Changeset 3690657
- Timestamp:
- 09/11/2026 01:38:22 AM (6 weeks ago)
- Location:
- alpaca-bot
- Files:
-
- 1802 added
- 64 deleted
- 13 edited
- 1 copied
-
assets/banner-1544x500.jpg (deleted)
-
assets/banner-1544x500.png (added)
-
assets/banner-1880x609.jpg (deleted)
-
assets/banner-772x250.jpg (deleted)
-
assets/banner-772x250.png (added)
-
assets/icon-128x128.png (modified) (1 prop) ( previous)
-
assets/icon-256x256.png (modified) (1 prop) ( previous)
-
assets/screenshot-1.png (modified) (1 prop) ( previous)
-
assets/screenshot-2.png (modified) (1 prop) ( previous)
-
assets/screenshot-3.png (modified) (1 prop) ( previous)
-
assets/screenshot-4.png (deleted)
-
assets/screenshot-5.png (deleted)
-
assets/screenshot-6.png (deleted)
-
tags/0.5.0 (copied) (copied from alpaca-bot/trunk )
-
tags/0.5.0/README.md (deleted)
-
tags/0.5.0/alpaca-bot.php (modified) (1 diff)
-
tags/0.5.0/assets/css/alpaca-bot-shortcode.css (added)
-
tags/0.5.0/assets/css/alpaca-bot.css (modified) (2 diffs)
-
tags/0.5.0/assets/css/hint.css (deleted)
-
tags/0.5.0/assets/css/hint.min.css (deleted)
-
tags/0.5.0/assets/css/materialsymbolsoutlined.css (deleted)
-
tags/0.5.0/assets/css/materialsymbolsoutlined.woff2 (deleted)
-
tags/0.5.0/assets/css/prism-default.css (deleted)
-
tags/0.5.0/assets/css/prism-default.min.css (deleted)
-
tags/0.5.0/assets/img/alpaca-bot-512.png (deleted)
-
tags/0.5.0/assets/img/alpaca-bot-avatar.png (added)
-
tags/0.5.0/assets/img/grid.svg (deleted)
-
tags/0.5.0/assets/img/icon-80.png (deleted)
-
tags/0.5.0/assets/img/icons.svg (added)
-
tags/0.5.0/assets/img/menu-icon.svg (added)
-
tags/0.5.0/assets/img/ollama-large.png (deleted)
-
tags/0.5.0/assets/js/alpaca-bot.js (deleted)
-
tags/0.5.0/assets/js/chat.js (added)
-
tags/0.5.0/assets/js/htmx.js (deleted)
-
tags/0.5.0/assets/js/htmx.min.js (modified) (1 diff)
-
tags/0.5.0/assets/js/multi-swap.js (deleted)
-
tags/0.5.0/assets/js/prism.js (deleted)
-
tags/0.5.0/assets/js/prism.min.js (deleted)
-
tags/0.5.0/composer.json (deleted)
-
tags/0.5.0/composer.lock (deleted)
-
tags/0.5.0/readme.txt (modified) (1 diff)
-
tags/0.5.0/src/Abilities (added)
-
tags/0.5.0/src/Abilities/Register.php (added)
-
tags/0.5.0/src/Admin (added)
-
tags/0.5.0/src/Admin/Assets.php (added)
-
tags/0.5.0/src/Admin/ChatScreen.php (added)
-
tags/0.5.0/src/Admin/Fields.php (added)
-
tags/0.5.0/src/Admin/HelpTabs.php (added)
-
tags/0.5.0/src/Admin/Menu.php (added)
-
tags/0.5.0/src/Admin/SettingsPage.php (added)
-
tags/0.5.0/src/Agents (deleted)
-
tags/0.5.0/src/Agents.php (deleted)
-
tags/0.5.0/src/AlpacaBot.php (deleted)
-
tags/0.5.0/src/Api (deleted)
-
tags/0.5.0/src/Capability.php (added)
-
tags/0.5.0/src/Chat/AgentStreamObserver.php (added)
-
tags/0.5.0/src/Chat/Assistant.php (added)
-
tags/0.5.0/src/Chat/CapExceeded.php (added)
-
tags/0.5.0/src/Chat/CapPolicy.php (added)
-
tags/0.5.0/src/Chat/Conversation.php (added)
-
tags/0.5.0/src/Chat/ConversationStore.php (added)
-
tags/0.5.0/src/Chat/Delta.php (added)
-
tags/0.5.0/src/Chat/ImageData.php (added)
-
tags/0.5.0/src/Chat/Message.php (added)
-
tags/0.5.0/src/Chat/Pipeline.php (added)
-
tags/0.5.0/src/Chat/Post.php (deleted)
-
tags/0.5.0/src/Chat/Result.php (added)
-
tags/0.5.0/src/Chat/Screen.php (deleted)
-
tags/0.5.0/src/Chat/UsageMeter.php (added)
-
tags/0.5.0/src/Chat/UserPrefs.php (added)
-
tags/0.5.0/src/Cli (added)
-
tags/0.5.0/src/Cli/ChatCommand.php (added)
-
tags/0.5.0/src/Context (added)
-
tags/0.5.0/src/Context/Collector.php (added)
-
tags/0.5.0/src/Context/Context.php (added)
-
tags/0.5.0/src/Context/ContextSourceInterface.php (added)
-
tags/0.5.0/src/Context/CurrentScreenSource.php (added)
-
tags/0.5.0/src/Define.php (deleted)
-
tags/0.5.0/src/Help.php (deleted)
-
tags/0.5.0/src/Log (deleted)
-
tags/0.5.0/src/Plugin.php (added)
-
tags/0.5.0/src/Provider (added)
-
tags/0.5.0/src/Provider/BearerHttpClient.php (added)
-
tags/0.5.0/src/Provider/BoundOptionsProvider.php (added)
-
tags/0.5.0/src/Provider/Factory.php (added)
-
tags/0.5.0/src/Provider/Model.php (added)
-
tags/0.5.0/src/Provider/ModelCatalog.php (added)
-
tags/0.5.0/src/Provider/WpAi (added)
-
tags/0.5.0/src/Provider/WpAi/Client.php (added)
-
tags/0.5.0/src/Provider/WpAi/CoreClient.php (added)
-
tags/0.5.0/src/Provider/WpAiClientProvider.php (added)
-
tags/0.5.0/src/Rest (added)
-
tags/0.5.0/src/Rest/ChatController.php (added)
-
tags/0.5.0/src/Rest/Controller.php (added)
-
tags/0.5.0/src/Rest/ConversationsController.php (added)
-
tags/0.5.0/src/Rest/Errors.php (added)
-
tags/0.5.0/src/Rest/ModelsController.php (added)
-
tags/0.5.0/src/Rest/RateLimit.php (added)
-
tags/0.5.0/src/Rest/SettingsController.php (added)
-
tags/0.5.0/src/Rest/Sse.php (added)
-
tags/0.5.0/src/Rest/StreamBudget.php (added)
-
tags/0.5.0/src/Rest/StreamController.php (added)
-
tags/0.5.0/src/Rest/UsageController.php (added)
-
tags/0.5.0/src/Rest/ViewController.php (added)
-
tags/0.5.0/src/Settings (added)
-
tags/0.5.0/src/Settings/Migrate04.php (added)
-
tags/0.5.0/src/Settings/Schema.php (added)
-
tags/0.5.0/src/Settings/Store.php (added)
-
tags/0.5.0/src/Shortcodes (added)
-
tags/0.5.0/src/Shortcodes/AgentShim.php (added)
-
tags/0.5.0/src/Shortcodes/Chat.php (added)
-
tags/0.5.0/src/Toolkit (added)
-
tags/0.5.0/src/Toolkit/DraftPostToolkit.php (added)
-
tags/0.5.0/src/Toolkit/Registry.php (added)
-
tags/0.5.0/src/Toolkit/SpecialPurposeAddress.php (added)
-
tags/0.5.0/src/Toolkit/SummarizeToolkit.php (added)
-
tags/0.5.0/src/Toolkit/WebFetchToolkit.php (added)
-
tags/0.5.0/src/Utils (deleted)
-
tags/0.5.0/src/View (added)
-
tags/0.5.0/src/View/Chat (added)
-
tags/0.5.0/src/View/Chat/Composer.php (added)
-
tags/0.5.0/src/View/Chat/Header.php (added)
-
tags/0.5.0/src/View/Chat/HistorySelect.php (added)
-
tags/0.5.0/src/View/Chat/MessageBubble.php (added)
-
tags/0.5.0/src/View/Chat/MessageList.php (added)
-
tags/0.5.0/src/View/Chat/ModelSelect.php (added)
-
tags/0.5.0/src/View/Chat/Notice.php (added)
-
tags/0.5.0/src/View/Chat/Participants.php (added)
-
tags/0.5.0/src/View/Chat/Receipt.php (added)
-
tags/0.5.0/src/View/Chat/Shell.php (added)
-
tags/0.5.0/src/View/Component.php (added)
-
tags/0.5.0/src/View/Hx.php (added)
-
tags/0.5.0/src/View/Icon.php (added)
-
tags/0.5.0/src/View/Markdown.php (added)
-
tags/0.5.0/vendor (deleted)
-
tags/0.5.0/vendor-prefixed (added)
-
tags/0.5.0/vendor-prefixed/autoload.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/LICENSE (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/README.md (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/composer.json (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Agent (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Agent/AbstractAgent.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Agent/NullCancellationToken.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Agent/NullPendingInputProvider.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Agent/NullTickCallback.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Agent/Output.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Agent/SynchronousToolExecutor.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Config (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Config/EnvConfig.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Config/ModelDefinition.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Context (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Context/ContextWindow.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Context/HeuristicCounter.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Context/TiktokenCounter.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Context/TokenCounterFactory.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Contract (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Contract/AgentInterface.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Contract/BatchToolExecutorInterface.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Contract/BudgetPruningStrategyInterface.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Contract/CancellationTokenInterface.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Contract/CliRuntimeInterface.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Contract/CliVendorAdapterInterface.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Contract/ConfigInterface.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Contract/ContextWindowInterface.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Contract/EmbeddingProviderInterface.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Contract/LocalModelHandleInterface.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Contract/LocalModelRuntimeInterface.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Contract/MessageInterface.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Contract/PackageEventListenerInterface.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Contract/PendingInputProviderInterface.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Contract/ProviderInterface.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Contract/TickCallbackInterface.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Contract/TokenCounterInterface.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Contract/ToolDocumentationInterface.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Contract/ToolExecutionPolicyInterface.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Contract/ToolExecutorInterface.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Contract/ToolInterface.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Contract/ToolkitInterface.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Contract/VectorStoreInterface.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Embedding (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Embedding/OllamaEmbeddingProvider.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Embedding/OpenAIEmbeddingProvider.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Enum (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Enum/AgentFinishReason.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Enum/EmptyResponseHandling.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Enum/FinishReason.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Enum/ModelCapability.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Enum/ProviderFinishReason.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Enum/ReasoningEffort.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Enum/Role.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Enum/RuntimeFinishReason.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Enum/ToolResultStatus.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Exception (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Exception/DocumentException.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Exception/MaxIterationsException.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Exception/ProviderException.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Exception/TerminationException.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Exception/ToolNotFoundException.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Memory (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Memory/Document.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Memory/EmbeddingResult.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Message (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Message/AssistantMessage.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Message/Conversation.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Message/DefaultBudgetPruningStrategy.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Message/SafetyOnlyPruningStrategy.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Message/SystemMessage.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Message/ToolResultMessage.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Message/UserMessage.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Prompt (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Prompt/SystemPrompt.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Provider (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Provider/AbstractProvider.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Provider/AnthropicProvider.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Provider/Cli (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Provider/Cli/ClaudeCliVendorAdapter.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Provider/Cli/CliProcessChunk.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Provider/Cli/CliProcessRequest.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Provider/Cli/CliProcessResult.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Provider/CliProvider.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Provider/GeminiProvider.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Provider/LlamaCpp (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Provider/LlamaCpp/LlamaCppHistoryFormatter.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Provider/LlamaCpp/LlamaCppMultimodalContext.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Provider/LlamaCpp/LlamaCppMultimodalNormalizer.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Provider/LlamaCpp/LlamaCppProjectorResolver.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Provider/LlamaCpp/LlamaCppPromptContext.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Provider/LlamaCpp/LlamaCppStructuredOutputContext.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Provider/LlamaCpp/LlamaCppStructuredOutputNormalizer.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Provider/LlamaCpp/LlamaCppTemplateRegistry.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Provider/LlamaCpp/LlamaCppTemplateResolver.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Provider/LlamaCpp/LlamaCppToolCallParser.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Provider/LlamaCpp/LlamaCppToolPromptInjector.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Provider/LlamaCpp/LlamaCppToolSchemaNormalizer.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Provider/LlamaCppProvider.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Provider/MistralProvider.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Provider/OllamaProvider.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Provider/OpenAICompatibleProvider.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Provider/OpenAIResponsesProvider.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Provider/ProviderFactory.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Provider/Response.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Provider/SchemaUtils.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Provider/SseStreamParser.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Provider/StrictSchemaNormalizer.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Provider/Usage.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Provider/XAIProvider.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Runtime (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Runtime/LlamaCpp (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Runtime/LlamaCpp/FfiLlamaCppNativeApi.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Runtime/LlamaCpp/LlamaCppJsonGrammar.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Runtime/LlamaCpp/LlamaCppNativeApiInterface.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Runtime/LlamaCpp/LlamaCppNativeHandle.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Runtime/LlamaCpp/LlamaCppNativeRuntime.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Runtime/LlamaCpp/LlamaCppStructuredOutputValidator.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Runtime/RuntimeCompletionChunk.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Runtime/RuntimeCompletionRequest.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Runtime/RuntimeCompletionResult.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Runtime/RuntimeImageInput.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Runtime/RuntimeModelMetadata.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Runtime/RuntimeStateSnapshot.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Runtime/RuntimeStructuredOutput.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Runtime/RuntimeToolDefinition.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Tool (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Tool/DoneTool.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Tool/Parameter (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Tool/Parameter/ArrayParameter.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Tool/Parameter/BoolParameter.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Tool/Parameter/EnumParameter.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Tool/Parameter/MapParameter.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Tool/Parameter/NumberParameter.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Tool/Parameter/ObjectParameter.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Tool/Parameter/Parameter.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Tool/Parameter/StringParameter.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Tool/Parameter/ValidationResult.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Tool/Tool.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Tool/ToolCall.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/Tool/ToolResult.php (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/VectorStore (added)
-
tags/0.5.0/vendor-prefixed/carmelosantana/php-agents/src/VectorStore/InMemoryVectorStore.php (added)
-
tags/0.5.0/vendor-prefixed/composer (added)
-
tags/0.5.0/vendor-prefixed/composer/ClassLoader.php (added)
-
tags/0.5.0/vendor-prefixed/composer/InstalledVersions.php (added)
-
tags/0.5.0/vendor-prefixed/composer/LICENSE (added)
-
tags/0.5.0/vendor-prefixed/composer/autoload_classmap.php (added)
-
tags/0.5.0/vendor-prefixed/composer/autoload_files.php (added)
-
tags/0.5.0/vendor-prefixed/composer/autoload_namespaces.php (added)
-
tags/0.5.0/vendor-prefixed/composer/autoload_psr4.php (added)
-
tags/0.5.0/vendor-prefixed/composer/autoload_real.php (added)
-
tags/0.5.0/vendor-prefixed/composer/autoload_static.php (added)
-
tags/0.5.0/vendor-prefixed/composer/installed.json (added)
-
tags/0.5.0/vendor-prefixed/composer/installed.php (added)
-
tags/0.5.0/vendor-prefixed/composer/platform_check.php (added)
-
tags/0.5.0/vendor-prefixed/dflydev (added)
-
tags/0.5.0/vendor-prefixed/dflydev/dot-access-data (added)
-
tags/0.5.0/vendor-prefixed/dflydev/dot-access-data/CHANGELOG.md (added)
-
tags/0.5.0/vendor-prefixed/dflydev/dot-access-data/LICENSE (added)
-
tags/0.5.0/vendor-prefixed/dflydev/dot-access-data/README.md (added)
-
tags/0.5.0/vendor-prefixed/dflydev/dot-access-data/composer.json (added)
-
tags/0.5.0/vendor-prefixed/dflydev/dot-access-data/src (added)
-
tags/0.5.0/vendor-prefixed/dflydev/dot-access-data/src/Data.php (added)
-
tags/0.5.0/vendor-prefixed/dflydev/dot-access-data/src/DataInterface.php (added)
-
tags/0.5.0/vendor-prefixed/dflydev/dot-access-data/src/Exception (added)
-
tags/0.5.0/vendor-prefixed/dflydev/dot-access-data/src/Exception/DataException.php (added)
-
tags/0.5.0/vendor-prefixed/dflydev/dot-access-data/src/Exception/InvalidPathException.php (added)
-
tags/0.5.0/vendor-prefixed/dflydev/dot-access-data/src/Exception/MissingPathException.php (added)
-
tags/0.5.0/vendor-prefixed/dflydev/dot-access-data/src/Util.php (added)
-
tags/0.5.0/vendor-prefixed/league (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/CHANGELOG.md (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/LICENSE (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/README.md (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/composer.json (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/CommonMarkConverter.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/ConverterInterface.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Delimiter (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Delimiter/Bracket.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Delimiter/Delimiter.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Delimiter/DelimiterInterface.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Delimiter/DelimiterParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Delimiter/DelimiterStack.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Delimiter/Processor (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Delimiter/Processor/CacheableDelimiterProcessorInterface.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Delimiter/Processor/DelimiterProcessorCollection.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Delimiter/Processor/DelimiterProcessorCollectionInterface.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Delimiter/Processor/DelimiterProcessorInterface.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Delimiter/Processor/StaggeredDelimiterProcessor.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Environment (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Environment/Environment.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Environment/EnvironmentAwareInterface.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Environment/EnvironmentBuilderInterface.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Environment/EnvironmentInterface.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Event (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Event/AbstractEvent.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Event/DocumentParsedEvent.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Event/DocumentPreParsedEvent.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Event/DocumentPreRenderEvent.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Event/DocumentRenderedEvent.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Event/ListenerData.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Exception (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Exception/AlreadyInitializedException.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Exception/CommonMarkException.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Exception/IOException.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Exception/InvalidArgumentException.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Exception/LogicException.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Exception/MissingDependencyException.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Exception/UnexpectedEncodingException.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Attributes (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Attributes/AttributesExtension.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Attributes/Event (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Attributes/Event/AttributesListener.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Attributes/Node (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Attributes/Node/Attributes.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Attributes/Node/AttributesInline.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Attributes/Parser (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Attributes/Parser/AttributesBlockContinueParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Attributes/Parser/AttributesBlockStartParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Attributes/Parser/AttributesInlineParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Attributes/Util (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Attributes/Util/AttributesHelper.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Autolink (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Autolink/AutolinkExtension.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Autolink/EmailAutolinkParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Autolink/UrlAutolinkParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/CommonMarkCoreExtension.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Delimiter (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Delimiter/Processor (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Delimiter/Processor/EmphasisDelimiterProcessor.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Node (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Node/Block (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Node/Block/BlockQuote.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Node/Block/FencedCode.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Node/Block/Heading.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Node/Block/HtmlBlock.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Node/Block/IndentedCode.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Node/Block/ListBlock.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Node/Block/ListData.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Node/Block/ListItem.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Node/Block/ThematicBreak.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Node/Inline (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Node/Inline/AbstractWebResource.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Node/Inline/Code.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Node/Inline/Emphasis.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Node/Inline/HtmlInline.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Node/Inline/Image.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Node/Inline/Link.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Node/Inline/Strong.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Parser (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Parser/Block (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Parser/Block/BlockQuoteParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Parser/Block/BlockQuoteStartParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Parser/Block/FencedCodeParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Parser/Block/FencedCodeStartParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Parser/Block/HeadingParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Parser/Block/HeadingStartParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Parser/Block/HtmlBlockParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Parser/Block/HtmlBlockStartParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Parser/Block/IndentedCodeParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Parser/Block/IndentedCodeStartParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Parser/Block/ListBlockParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Parser/Block/ListBlockStartParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Parser/Block/ListItemParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Parser/Block/ThematicBreakParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Parser/Block/ThematicBreakStartParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Parser/Inline (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Parser/Inline/AutolinkParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Parser/Inline/BacktickParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Parser/Inline/BangParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Parser/Inline/CloseBracketParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Parser/Inline/EntityParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Parser/Inline/EscapableParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Parser/Inline/HtmlInlineParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Parser/Inline/OpenBracketParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Renderer (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Renderer/Block (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Renderer/Block/BlockQuoteRenderer.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Renderer/Block/FencedCodeRenderer.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Renderer/Block/HeadingRenderer.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Renderer/Block/HtmlBlockRenderer.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Renderer/Block/IndentedCodeRenderer.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Renderer/Block/ListBlockRenderer.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Renderer/Block/ListItemRenderer.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Renderer/Block/ThematicBreakRenderer.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Renderer/Inline (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Renderer/Inline/CodeRenderer.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Renderer/Inline/EmphasisRenderer.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Renderer/Inline/HtmlInlineRenderer.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Renderer/Inline/ImageRenderer.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Renderer/Inline/LinkRenderer.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Renderer/Inline/StrongRenderer.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/ConfigurableExtensionInterface.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/DefaultAttributes (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/DefaultAttributes/ApplyDefaultAttributesProcessor.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/DefaultAttributes/DefaultAttributesExtension.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/DescriptionList (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/DescriptionList/DescriptionListExtension.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/DescriptionList/Event (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/DescriptionList/Event/ConsecutiveDescriptionListMerger.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/DescriptionList/Event/LooseDescriptionHandler.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/DescriptionList/Node (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/DescriptionList/Node/Description.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/DescriptionList/Node/DescriptionList.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/DescriptionList/Node/DescriptionTerm.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/DescriptionList/Parser (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/DescriptionList/Parser/DescriptionContinueParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/DescriptionList/Parser/DescriptionListContinueParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/DescriptionList/Parser/DescriptionStartParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/DescriptionList/Parser/DescriptionTermContinueParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/DescriptionList/Renderer (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/DescriptionList/Renderer/DescriptionListRenderer.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/DescriptionList/Renderer/DescriptionRenderer.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/DescriptionList/Renderer/DescriptionTermRenderer.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/DisallowedRawHtml (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/DisallowedRawHtml/DisallowedRawHtmlExtension.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/DisallowedRawHtml/DisallowedRawHtmlRenderer.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Embed (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Embed/Bridge (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Embed/Bridge/OscaroteroEmbedAdapter.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Embed/DomainFilteringAdapter.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Embed/Embed.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Embed/EmbedAdapterInterface.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Embed/EmbedExtension.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Embed/EmbedParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Embed/EmbedProcessor.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Embed/EmbedRenderer.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Embed/EmbedStartParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/ExtensionInterface.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/ExternalLink (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/ExternalLink/ExternalLinkExtension.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/ExternalLink/ExternalLinkProcessor.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Footnote (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Footnote/Event (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Footnote/Event/AnonymousFootnotesListener.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Footnote/Event/FixOrphanedFootnotesAndRefsListener.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Footnote/Event/GatherFootnotesListener.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Footnote/Event/NumberFootnotesListener.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Footnote/FootnoteExtension.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Footnote/Node (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Footnote/Node/Footnote.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Footnote/Node/FootnoteBackref.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Footnote/Node/FootnoteContainer.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Footnote/Node/FootnoteRef.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Footnote/Parser (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Footnote/Parser/AnonymousFootnoteRefParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Footnote/Parser/FootnoteParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Footnote/Parser/FootnoteRefParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Footnote/Parser/FootnoteStartParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Footnote/Renderer (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Footnote/Renderer/FootnoteBackrefRenderer.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Footnote/Renderer/FootnoteContainerRenderer.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Footnote/Renderer/FootnoteRefRenderer.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Footnote/Renderer/FootnoteRenderer.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/FrontMatter (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/FrontMatter/Data (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/FrontMatter/Data/FrontMatterDataParserInterface.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/FrontMatter/Data/LibYamlFrontMatterParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/FrontMatter/Data/SymfonyYamlFrontMatterParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/FrontMatter/Exception (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/FrontMatter/Exception/InvalidFrontMatterException.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/FrontMatter/FrontMatterExtension.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/FrontMatter/FrontMatterParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/FrontMatter/FrontMatterParserInterface.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/FrontMatter/FrontMatterProviderInterface.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/FrontMatter/Input (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/FrontMatter/Input/MarkdownInputWithFrontMatter.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/FrontMatter/Listener (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/FrontMatter/Listener/FrontMatterPostRenderListener.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/FrontMatter/Listener/FrontMatterPreParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/FrontMatter/Output (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/FrontMatter/Output/RenderedContentWithFrontMatter.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/GithubFlavoredMarkdownExtension.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/HeadingPermalink (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/HeadingPermalink/HeadingPermalink.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/HeadingPermalink/HeadingPermalinkExtension.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/HeadingPermalink/HeadingPermalinkProcessor.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/HeadingPermalink/HeadingPermalinkRenderer.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Highlight (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Highlight/HighlightExtension.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Highlight/Mark.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Highlight/MarkDelimiterProcessor.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Highlight/MarkRenderer.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/InlinesOnly (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/InlinesOnly/ChildRenderer.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/InlinesOnly/InlinesOnlyExtension.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Mention (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Mention/Generator (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Mention/Generator/CallbackGenerator.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Mention/Generator/MentionGeneratorInterface.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Mention/Generator/StringTemplateLinkGenerator.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Mention/Mention.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Mention/MentionExtension.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Mention/MentionParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/NormalizeHeadings (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/NormalizeHeadings/NormalizeHeadingsExtension.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/NormalizeHeadings/NormalizeHeadingsProcessor.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/SmartPunct (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/SmartPunct/DashParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/SmartPunct/EllipsesParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/SmartPunct/Quote.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/SmartPunct/QuoteParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/SmartPunct/QuoteProcessor.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/SmartPunct/ReplaceUnpairedQuotesListener.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/SmartPunct/SmartPunctExtension.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Strikethrough (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Strikethrough/Strikethrough.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Strikethrough/StrikethroughDelimiterProcessor.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Strikethrough/StrikethroughExtension.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Strikethrough/StrikethroughRenderer.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Table (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Table/Table.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Table/TableCell.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Table/TableCellRenderer.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Table/TableExtension.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Table/TableParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Table/TableRenderer.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Table/TableRow.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Table/TableRowRenderer.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Table/TableSection.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Table/TableSectionRenderer.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/Table/TableStartParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/TableOfContents (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/TableOfContents/Node (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/TableOfContents/Node/TableOfContents.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/TableOfContents/Node/TableOfContentsPlaceholder.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/TableOfContents/Node/TableOfContentsReference.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/TableOfContents/Normalizer (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/TableOfContents/Normalizer/AsIsNormalizerStrategy.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/TableOfContents/Normalizer/FlatNormalizerStrategy.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/TableOfContents/Normalizer/NormalizerStrategyInterface.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/TableOfContents/Normalizer/RelativeNormalizerStrategy.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/TableOfContents/TableOfContentsBuilder.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/TableOfContents/TableOfContentsExtension.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/TableOfContents/TableOfContentsGenerator.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/TableOfContents/TableOfContentsGeneratorInterface.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/TableOfContents/TableOfContentsPlaceholderParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/TableOfContents/TableOfContentsPlaceholderRenderer.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/TableOfContents/TableOfContentsReferenceRenderer.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/TableOfContents/TableOfContentsRenderCache.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/TableOfContents/TableOfContentsRenderer.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/TaskList (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/TaskList/TaskListExtension.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/TaskList/TaskListItemMarker.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/TaskList/TaskListItemMarkerParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Extension/TaskList/TaskListItemMarkerRenderer.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/GithubFlavoredMarkdownConverter.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Input (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Input/MarkdownInput.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Input/MarkdownInputInterface.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/MarkdownConverter.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/MarkdownConverterInterface.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Node (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Node/Block (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Node/Block/AbstractBlock.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Node/Block/Document.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Node/Block/Paragraph.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Node/Block/TightBlockInterface.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Node/Inline (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Node/Inline/AbstractInline.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Node/Inline/AbstractStringContainer.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Node/Inline/AdjacentTextMerger.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Node/Inline/DelimitedInterface.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Node/Inline/Newline.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Node/Inline/Text.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Node/Node.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Node/NodeIterator.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Node/NodeWalker.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Node/NodeWalkerEvent.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Node/Query (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Node/Query.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Node/Query/AndExpr.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Node/Query/ExpressionInterface.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Node/Query/OrExpr.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Node/RawMarkupContainerInterface.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Node/StringContainerHelper.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Node/StringContainerInterface.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Normalizer (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Normalizer/SlugNormalizer.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Normalizer/TextNormalizer.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Normalizer/TextNormalizerInterface.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Normalizer/UniqueSlugNormalizer.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Normalizer/UniqueSlugNormalizerInterface.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Output (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Output/RenderedContent.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Output/RenderedContentInterface.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Parser (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Parser/Block (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Parser/Block/AbstractBlockContinueParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Parser/Block/BlockContinue.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Parser/Block/BlockContinueParserInterface.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Parser/Block/BlockContinueParserWithInlinesInterface.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Parser/Block/BlockStart.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Parser/Block/BlockStartParserInterface.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Parser/Block/DocumentBlockParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Parser/Block/ParagraphParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Parser/Block/SkipLinesStartingWithLettersParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Parser/Cursor.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Parser/CursorState.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Parser/Inline (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Parser/Inline/InlineParserInterface.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Parser/Inline/InlineParserMatch.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Parser/Inline/NewlineParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Parser/InlineParserContext.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Parser/InlineParserEngine.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Parser/InlineParserEngineInterface.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Parser/MarkdownParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Parser/MarkdownParserInterface.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Parser/MarkdownParserState.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Parser/MarkdownParserStateInterface.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Parser/ParserLogicException.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Reference (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Reference/MemoryLimitedReferenceMap.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Reference/Reference.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Reference/ReferenceInterface.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Reference/ReferenceMap.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Reference/ReferenceMapInterface.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Reference/ReferenceParser.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Reference/ReferenceableInterface.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Renderer (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Renderer/Block (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Renderer/Block/DocumentRenderer.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Renderer/Block/ParagraphRenderer.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Renderer/ChildNodeRendererInterface.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Renderer/DocumentRendererInterface.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Renderer/HtmlDecorator.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Renderer/HtmlRenderer.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Renderer/Inline (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Renderer/Inline/NewlineRenderer.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Renderer/Inline/TextRenderer.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Renderer/MarkdownRendererInterface.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Renderer/NoMatchingRendererException.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Renderer/NodeRendererInterface.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Util (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Util/ArrayCollection.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Util/Html5EntityDecoder.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Util/HtmlElement.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Util/HtmlFilter.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Util/LinkParserHelper.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Util/PrioritizedList.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Util/RegexHelper.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Util/SpecReader.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Util/UrlEncoder.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Util/Xml.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Xml (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Xml/FallbackNodeXmlRenderer.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Xml/MarkdownToXmlConverter.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Xml/XmlNodeRendererInterface.php (added)
-
tags/0.5.0/vendor-prefixed/league/commonmark/src/Xml/XmlRenderer.php (added)
-
tags/0.5.0/vendor-prefixed/league/config (added)
-
tags/0.5.0/vendor-prefixed/league/config/CHANGELOG.md (added)
-
tags/0.5.0/vendor-prefixed/league/config/LICENSE.md (added)
-
tags/0.5.0/vendor-prefixed/league/config/README.md (added)
-
tags/0.5.0/vendor-prefixed/league/config/composer.json (added)
-
tags/0.5.0/vendor-prefixed/league/config/src (added)
-
tags/0.5.0/vendor-prefixed/league/config/src/Configuration.php (added)
-
tags/0.5.0/vendor-prefixed/league/config/src/ConfigurationAwareInterface.php (added)
-
tags/0.5.0/vendor-prefixed/league/config/src/ConfigurationBuilderInterface.php (added)
-
tags/0.5.0/vendor-prefixed/league/config/src/ConfigurationInterface.php (added)
-
tags/0.5.0/vendor-prefixed/league/config/src/ConfigurationProviderInterface.php (added)
-
tags/0.5.0/vendor-prefixed/league/config/src/Exception (added)
-
tags/0.5.0/vendor-prefixed/league/config/src/Exception/ConfigurationExceptionInterface.php (added)
-
tags/0.5.0/vendor-prefixed/league/config/src/Exception/InvalidConfigurationException.php (added)
-
tags/0.5.0/vendor-prefixed/league/config/src/Exception/UnknownOptionException.php (added)
-
tags/0.5.0/vendor-prefixed/league/config/src/Exception/ValidationException.php (added)
-
tags/0.5.0/vendor-prefixed/league/config/src/MutableConfigurationInterface.php (added)
-
tags/0.5.0/vendor-prefixed/league/config/src/ReadOnlyConfiguration.php (added)
-
tags/0.5.0/vendor-prefixed/league/config/src/SchemaBuilderInterface.php (added)
-
tags/0.5.0/vendor-prefixed/nette (added)
-
tags/0.5.0/vendor-prefixed/nette/schema (added)
-
tags/0.5.0/vendor-prefixed/nette/schema/composer.json (added)
-
tags/0.5.0/vendor-prefixed/nette/schema/license.md (added)
-
tags/0.5.0/vendor-prefixed/nette/schema/readme.md (added)
-
tags/0.5.0/vendor-prefixed/nette/schema/src (added)
-
tags/0.5.0/vendor-prefixed/nette/schema/src/Schema (added)
-
tags/0.5.0/vendor-prefixed/nette/schema/src/Schema/Context.php (added)
-
tags/0.5.0/vendor-prefixed/nette/schema/src/Schema/DynamicParameter.php (added)
-
tags/0.5.0/vendor-prefixed/nette/schema/src/Schema/Elements (added)
-
tags/0.5.0/vendor-prefixed/nette/schema/src/Schema/Elements/AnyOf.php (added)
-
tags/0.5.0/vendor-prefixed/nette/schema/src/Schema/Elements/Base.php (added)
-
tags/0.5.0/vendor-prefixed/nette/schema/src/Schema/Elements/Structure.php (added)
-
tags/0.5.0/vendor-prefixed/nette/schema/src/Schema/Elements/Type.php (added)
-
tags/0.5.0/vendor-prefixed/nette/schema/src/Schema/Expect.php (added)
-
tags/0.5.0/vendor-prefixed/nette/schema/src/Schema/Helpers.php (added)
-
tags/0.5.0/vendor-prefixed/nette/schema/src/Schema/Message.php (added)
-
tags/0.5.0/vendor-prefixed/nette/schema/src/Schema/Processor.php (added)
-
tags/0.5.0/vendor-prefixed/nette/schema/src/Schema/Schema.php (added)
-
tags/0.5.0/vendor-prefixed/nette/schema/src/Schema/ValidationException.php (added)
-
tags/0.5.0/vendor-prefixed/nette/utils (added)
-
tags/0.5.0/vendor-prefixed/nette/utils/composer.json (added)
-
tags/0.5.0/vendor-prefixed/nette/utils/license.md (added)
-
tags/0.5.0/vendor-prefixed/nette/utils/readme.md (added)
-
tags/0.5.0/vendor-prefixed/nette/utils/src (added)
-
tags/0.5.0/vendor-prefixed/nette/utils/src/HtmlStringable.php (added)
-
tags/0.5.0/vendor-prefixed/nette/utils/src/Iterators (added)
-
tags/0.5.0/vendor-prefixed/nette/utils/src/Iterators/CachingIterator.php (added)
-
tags/0.5.0/vendor-prefixed/nette/utils/src/Iterators/Mapper.php (added)
-
tags/0.5.0/vendor-prefixed/nette/utils/src/SmartObject.php (added)
-
tags/0.5.0/vendor-prefixed/nette/utils/src/StaticClass.php (added)
-
tags/0.5.0/vendor-prefixed/nette/utils/src/Translator.php (added)
-
tags/0.5.0/vendor-prefixed/nette/utils/src/Utils (added)
-
tags/0.5.0/vendor-prefixed/nette/utils/src/Utils/ArrayHash.php (added)
-
tags/0.5.0/vendor-prefixed/nette/utils/src/Utils/ArrayList.php (added)
-
tags/0.5.0/vendor-prefixed/nette/utils/src/Utils/Arrays.php (added)
-
tags/0.5.0/vendor-prefixed/nette/utils/src/Utils/Callback.php (added)
-
tags/0.5.0/vendor-prefixed/nette/utils/src/Utils/DateTime.php (added)
-
tags/0.5.0/vendor-prefixed/nette/utils/src/Utils/DateTimeImmutable.php (added)
-
tags/0.5.0/vendor-prefixed/nette/utils/src/Utils/FileInfo.php (added)
-
tags/0.5.0/vendor-prefixed/nette/utils/src/Utils/FileSystem.php (added)
-
tags/0.5.0/vendor-prefixed/nette/utils/src/Utils/Finder.php (added)
-
tags/0.5.0/vendor-prefixed/nette/utils/src/Utils/Floats.php (added)
-
tags/0.5.0/vendor-prefixed/nette/utils/src/Utils/Helpers.php (added)
-
tags/0.5.0/vendor-prefixed/nette/utils/src/Utils/Html.php (added)
-
tags/0.5.0/vendor-prefixed/nette/utils/src/Utils/Image.php (added)
-
tags/0.5.0/vendor-prefixed/nette/utils/src/Utils/ImageColor.php (added)
-
tags/0.5.0/vendor-prefixed/nette/utils/src/Utils/ImageType.php (added)
-
tags/0.5.0/vendor-prefixed/nette/utils/src/Utils/Iterables.php (added)
-
tags/0.5.0/vendor-prefixed/nette/utils/src/Utils/Json.php (added)
-
tags/0.5.0/vendor-prefixed/nette/utils/src/Utils/ObjectHelpers.php (added)
-
tags/0.5.0/vendor-prefixed/nette/utils/src/Utils/Paginator.php (added)
-
tags/0.5.0/vendor-prefixed/nette/utils/src/Utils/Process.php (added)
-
tags/0.5.0/vendor-prefixed/nette/utils/src/Utils/Random.php (added)
-
tags/0.5.0/vendor-prefixed/nette/utils/src/Utils/Reflection.php (added)
-
tags/0.5.0/vendor-prefixed/nette/utils/src/Utils/ReflectionMethod.php (added)
-
tags/0.5.0/vendor-prefixed/nette/utils/src/Utils/Strings.php (added)
-
tags/0.5.0/vendor-prefixed/nette/utils/src/Utils/Type.php (added)
-
tags/0.5.0/vendor-prefixed/nette/utils/src/Utils/Validators.php (added)
-
tags/0.5.0/vendor-prefixed/nette/utils/src/Utils/exceptions.php (added)
-
tags/0.5.0/vendor-prefixed/nette/utils/src/compatibility.php (added)
-
tags/0.5.0/vendor-prefixed/nette/utils/src/exceptions.php (added)
-
tags/0.5.0/vendor-prefixed/psr (added)
-
tags/0.5.0/vendor-prefixed/psr/container (added)
-
tags/0.5.0/vendor-prefixed/psr/container/LICENSE (added)
-
tags/0.5.0/vendor-prefixed/psr/container/README.md (added)
-
tags/0.5.0/vendor-prefixed/psr/container/composer.json (added)
-
tags/0.5.0/vendor-prefixed/psr/container/src (added)
-
tags/0.5.0/vendor-prefixed/psr/container/src/ContainerExceptionInterface.php (added)
-
tags/0.5.0/vendor-prefixed/psr/container/src/ContainerInterface.php (added)
-
tags/0.5.0/vendor-prefixed/psr/container/src/NotFoundExceptionInterface.php (added)
-
tags/0.5.0/vendor-prefixed/psr/event-dispatcher (added)
-
tags/0.5.0/vendor-prefixed/psr/event-dispatcher/LICENSE (added)
-
tags/0.5.0/vendor-prefixed/psr/event-dispatcher/README.md (added)
-
tags/0.5.0/vendor-prefixed/psr/event-dispatcher/composer.json (added)
-
tags/0.5.0/vendor-prefixed/psr/event-dispatcher/src (added)
-
tags/0.5.0/vendor-prefixed/psr/event-dispatcher/src/EventDispatcherInterface.php (added)
-
tags/0.5.0/vendor-prefixed/psr/event-dispatcher/src/ListenerProviderInterface.php (added)
-
tags/0.5.0/vendor-prefixed/psr/event-dispatcher/src/StoppableEventInterface.php (added)
-
tags/0.5.0/vendor-prefixed/psr/log (added)
-
tags/0.5.0/vendor-prefixed/psr/log/LICENSE (added)
-
tags/0.5.0/vendor-prefixed/psr/log/README.md (added)
-
tags/0.5.0/vendor-prefixed/psr/log/composer.json (added)
-
tags/0.5.0/vendor-prefixed/psr/log/src (added)
-
tags/0.5.0/vendor-prefixed/psr/log/src/AbstractLogger.php (added)
-
tags/0.5.0/vendor-prefixed/psr/log/src/InvalidArgumentException.php (added)
-
tags/0.5.0/vendor-prefixed/psr/log/src/LogLevel.php (added)
-
tags/0.5.0/vendor-prefixed/psr/log/src/LoggerAwareInterface.php (added)
-
tags/0.5.0/vendor-prefixed/psr/log/src/LoggerAwareTrait.php (added)
-
tags/0.5.0/vendor-prefixed/psr/log/src/LoggerInterface.php (added)
-
tags/0.5.0/vendor-prefixed/psr/log/src/LoggerTrait.php (added)
-
tags/0.5.0/vendor-prefixed/psr/log/src/NullLogger.php (added)
-
tags/0.5.0/vendor-prefixed/symfony (added)
-
tags/0.5.0/vendor-prefixed/symfony/deprecation-contracts (added)
-
tags/0.5.0/vendor-prefixed/symfony/deprecation-contracts/CHANGELOG.md (added)
-
tags/0.5.0/vendor-prefixed/symfony/deprecation-contracts/LICENSE (added)
-
tags/0.5.0/vendor-prefixed/symfony/deprecation-contracts/README.md (added)
-
tags/0.5.0/vendor-prefixed/symfony/deprecation-contracts/composer.json (added)
-
tags/0.5.0/vendor-prefixed/symfony/deprecation-contracts/function.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client-contracts (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client-contracts/CHANGELOG.md (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client-contracts/ChunkInterface.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client-contracts/Exception (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client-contracts/Exception/ClientExceptionInterface.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client-contracts/Exception/DecodingExceptionInterface.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client-contracts/Exception/ExceptionInterface.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client-contracts/Exception/HttpExceptionInterface.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client-contracts/Exception/RedirectionExceptionInterface.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client-contracts/Exception/ServerExceptionInterface.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client-contracts/Exception/TimeoutExceptionInterface.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client-contracts/Exception/TransportExceptionInterface.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client-contracts/HttpClientInterface.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client-contracts/LICENSE (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client-contracts/README.md (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client-contracts/ResponseInterface.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client-contracts/ResponseStreamInterface.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client-contracts/composer.json (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/AmpHttpClient.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/AsyncDecoratorTrait.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/CHANGELOG.md (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Caching (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Caching/Freshness.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/CachingHttpClient.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Chunk (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Chunk/DataChunk.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Chunk/ErrorChunk.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Chunk/FirstChunk.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Chunk/InformationalChunk.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Chunk/LastChunk.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Chunk/ServerSentEvent.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/CurlHttpClient.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/DataCollector (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/DataCollector/HttpClientDataCollector.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/DecoratorTrait.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/DependencyInjection (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/DependencyInjection/HttpClientPass.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/DnsResolvingHttpClient.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/EventSourceHttpClient.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Exception (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Exception/ChunkCacheItemNotFoundException.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Exception/ClientException.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Exception/EventSourceException.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Exception/HttpExceptionTrait.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Exception/InvalidArgumentException.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Exception/JsonException.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Exception/RedirectionException.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Exception/ServerException.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Exception/TimeoutException.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Exception/TransportException.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/GuzzleHttpHandler.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/HttpClient.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/HttpClientTrait.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/HttpOptions.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/HttplugClient.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Internal (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Internal/AmpBody.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Internal/AmpClientState.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Internal/AmpListener.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Internal/AmpResolver.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Internal/Canary.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Internal/ClientState.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Internal/CurlClientState.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Internal/Dechunker.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Internal/DnsCache.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Internal/FollowRedirectsTrait.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Internal/HttplugWaitLoop.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Internal/NativeClientState.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Internal/OutgoingRequest.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Internal/PushedResponse.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/LICENSE (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Messenger (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Messenger/PingWebhookMessage.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Messenger/PingWebhookMessageHandler.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/MockHttpClient.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/NativeHttpClient.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/NoPrivateNetworkHttpClient.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Psr18Client.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/README.md (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Response (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Response/AmpResponse.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Response/AsyncContext.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Response/AsyncResponse.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Response/CommonResponseTrait.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Response/CurlResponse.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Response/HttplugPromise.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Response/JsonMockResponse.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Response/MockResponse.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Response/NativeResponse.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Response/ResponseStream.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Response/StreamWrapper.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Response/StreamableInterface.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Response/TraceableResponse.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Response/TransportResponseTrait.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Retry (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Retry/GenericRetryStrategy.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Retry/RetryStrategyInterface.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/RetryableHttpClient.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/ScopingHttpClient.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Test (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/Test/HarFileResponseFactory.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/ThrottlingHttpClient.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/TraceableHttpClient.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/UriTemplateHttpClient.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/http-client/composer.json (added)
-
tags/0.5.0/vendor-prefixed/symfony/polyfill-php80 (added)
-
tags/0.5.0/vendor-prefixed/symfony/polyfill-php80/LICENSE (added)
-
tags/0.5.0/vendor-prefixed/symfony/polyfill-php80/Php80.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/polyfill-php80/PhpToken.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/polyfill-php80/README.md (added)
-
tags/0.5.0/vendor-prefixed/symfony/polyfill-php80/Resources (added)
-
tags/0.5.0/vendor-prefixed/symfony/polyfill-php80/Resources/stubs (added)
-
tags/0.5.0/vendor-prefixed/symfony/polyfill-php80/Resources/stubs/Attribute.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/polyfill-php80/Resources/stubs/PhpToken.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/polyfill-php80/Resources/stubs/Stringable.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/polyfill-php80/Resources/stubs/ValueError.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/polyfill-php80/bootstrap.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/polyfill-php80/composer.json (added)
-
tags/0.5.0/vendor-prefixed/symfony/service-contracts (added)
-
tags/0.5.0/vendor-prefixed/symfony/service-contracts/Attribute (added)
-
tags/0.5.0/vendor-prefixed/symfony/service-contracts/Attribute/Required.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/service-contracts/Attribute/SubscribedService.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/service-contracts/CHANGELOG.md (added)
-
tags/0.5.0/vendor-prefixed/symfony/service-contracts/ContainerAwareInterface.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/service-contracts/ContainerProviderInterface.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/service-contracts/LICENSE (added)
-
tags/0.5.0/vendor-prefixed/symfony/service-contracts/README.md (added)
-
tags/0.5.0/vendor-prefixed/symfony/service-contracts/ResetInterface.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/service-contracts/ServiceCollectionInterface.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/service-contracts/ServiceLocatorTrait.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/service-contracts/ServiceMethodsSubscriberTrait.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/service-contracts/ServiceProviderInterface.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/service-contracts/ServiceSubscriberInterface.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/service-contracts/ServiceSubscriberTrait.php (added)
-
tags/0.5.0/vendor-prefixed/symfony/service-contracts/composer.json (added)
-
trunk/README.md (deleted)
-
trunk/alpaca-bot.php (modified) (1 diff)
-
trunk/assets/css/alpaca-bot-shortcode.css (added)
-
trunk/assets/css/alpaca-bot.css (modified) (2 diffs)
-
trunk/assets/css/hint.css (deleted)
-
trunk/assets/css/hint.min.css (deleted)
-
trunk/assets/css/materialsymbolsoutlined.css (deleted)
-
trunk/assets/css/materialsymbolsoutlined.woff2 (deleted)
-
trunk/assets/css/prism-default.css (deleted)
-
trunk/assets/css/prism-default.min.css (deleted)
-
trunk/assets/img/alpaca-bot-512.png (deleted)
-
trunk/assets/img/alpaca-bot-avatar.png (added)
-
trunk/assets/img/grid.svg (deleted)
-
trunk/assets/img/icon-80.png (deleted)
-
trunk/assets/img/icons.svg (added)
-
trunk/assets/img/menu-icon.svg (added)
-
trunk/assets/img/ollama-large.png (deleted)
-
trunk/assets/js/alpaca-bot.js (deleted)
-
trunk/assets/js/chat.js (added)
-
trunk/assets/js/htmx.js (deleted)
-
trunk/assets/js/htmx.min.js (modified) (1 diff)
-
trunk/assets/js/multi-swap.js (deleted)
-
trunk/assets/js/prism.js (deleted)
-
trunk/assets/js/prism.min.js (deleted)
-
trunk/composer.json (deleted)
-
trunk/composer.lock (deleted)
-
trunk/readme.txt (modified) (1 diff)
-
trunk/src/Abilities (added)
-
trunk/src/Abilities/Register.php (added)
-
trunk/src/Admin (added)
-
trunk/src/Admin/Assets.php (added)
-
trunk/src/Admin/ChatScreen.php (added)
-
trunk/src/Admin/Fields.php (added)
-
trunk/src/Admin/HelpTabs.php (added)
-
trunk/src/Admin/Menu.php (added)
-
trunk/src/Admin/SettingsPage.php (added)
-
trunk/src/Agents (deleted)
-
trunk/src/Agents.php (deleted)
-
trunk/src/AlpacaBot.php (deleted)
-
trunk/src/Api (deleted)
-
trunk/src/Capability.php (added)
-
trunk/src/Chat/AgentStreamObserver.php (added)
-
trunk/src/Chat/Assistant.php (added)
-
trunk/src/Chat/CapExceeded.php (added)
-
trunk/src/Chat/CapPolicy.php (added)
-
trunk/src/Chat/Conversation.php (added)
-
trunk/src/Chat/ConversationStore.php (added)
-
trunk/src/Chat/Delta.php (added)
-
trunk/src/Chat/ImageData.php (added)
-
trunk/src/Chat/Message.php (added)
-
trunk/src/Chat/Pipeline.php (added)
-
trunk/src/Chat/Post.php (deleted)
-
trunk/src/Chat/Result.php (added)
-
trunk/src/Chat/Screen.php (deleted)
-
trunk/src/Chat/UsageMeter.php (added)
-
trunk/src/Chat/UserPrefs.php (added)
-
trunk/src/Cli (added)
-
trunk/src/Cli/ChatCommand.php (added)
-
trunk/src/Context (added)
-
trunk/src/Context/Collector.php (added)
-
trunk/src/Context/Context.php (added)
-
trunk/src/Context/ContextSourceInterface.php (added)
-
trunk/src/Context/CurrentScreenSource.php (added)
-
trunk/src/Define.php (deleted)
-
trunk/src/Help.php (deleted)
-
trunk/src/Log (deleted)
-
trunk/src/Plugin.php (added)
-
trunk/src/Provider (added)
-
trunk/src/Provider/BearerHttpClient.php (added)
-
trunk/src/Provider/BoundOptionsProvider.php (added)
-
trunk/src/Provider/Factory.php (added)
-
trunk/src/Provider/Model.php (added)
-
trunk/src/Provider/ModelCatalog.php (added)
-
trunk/src/Provider/WpAi (added)
-
trunk/src/Provider/WpAi/Client.php (added)
-
trunk/src/Provider/WpAi/CoreClient.php (added)
-
trunk/src/Provider/WpAiClientProvider.php (added)
-
trunk/src/Rest (added)
-
trunk/src/Rest/ChatController.php (added)
-
trunk/src/Rest/Controller.php (added)
-
trunk/src/Rest/ConversationsController.php (added)
-
trunk/src/Rest/Errors.php (added)
-
trunk/src/Rest/ModelsController.php (added)
-
trunk/src/Rest/RateLimit.php (added)
-
trunk/src/Rest/SettingsController.php (added)
-
trunk/src/Rest/Sse.php (added)
-
trunk/src/Rest/StreamBudget.php (added)
-
trunk/src/Rest/StreamController.php (added)
-
trunk/src/Rest/UsageController.php (added)
-
trunk/src/Rest/ViewController.php (added)
-
trunk/src/Settings (added)
-
trunk/src/Settings/Migrate04.php (added)
-
trunk/src/Settings/Schema.php (added)
-
trunk/src/Settings/Store.php (added)
-
trunk/src/Shortcodes (added)
-
trunk/src/Shortcodes/AgentShim.php (added)
-
trunk/src/Shortcodes/Chat.php (added)
-
trunk/src/Toolkit (added)
-
trunk/src/Toolkit/DraftPostToolkit.php (added)
-
trunk/src/Toolkit/Registry.php (added)
-
trunk/src/Toolkit/SpecialPurposeAddress.php (added)
-
trunk/src/Toolkit/SummarizeToolkit.php (added)
-
trunk/src/Toolkit/WebFetchToolkit.php (added)
-
trunk/src/Utils (deleted)
-
trunk/src/View (added)
-
trunk/src/View/Chat (added)
-
trunk/src/View/Chat/Composer.php (added)
-
trunk/src/View/Chat/Header.php (added)
-
trunk/src/View/Chat/HistorySelect.php (added)
-
trunk/src/View/Chat/MessageBubble.php (added)
-
trunk/src/View/Chat/MessageList.php (added)
-
trunk/src/View/Chat/ModelSelect.php (added)
-
trunk/src/View/Chat/Notice.php (added)
-
trunk/src/View/Chat/Participants.php (added)
-
trunk/src/View/Chat/Receipt.php (added)
-
trunk/src/View/Chat/Shell.php (added)
-
trunk/src/View/Component.php (added)
-
trunk/src/View/Hx.php (added)
-
trunk/src/View/Icon.php (added)
-
trunk/src/View/Markdown.php (added)
-
trunk/vendor (deleted)
-
trunk/vendor-prefixed (added)
-
trunk/vendor-prefixed/autoload.php (added)
-
trunk/vendor-prefixed/carmelosantana (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/LICENSE (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/README.md (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/composer.json (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Agent (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Agent/AbstractAgent.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Agent/NullCancellationToken.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Agent/NullPendingInputProvider.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Agent/NullTickCallback.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Agent/Output.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Agent/SynchronousToolExecutor.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Config (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Config/EnvConfig.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Config/ModelDefinition.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Context (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Context/ContextWindow.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Context/HeuristicCounter.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Context/TiktokenCounter.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Context/TokenCounterFactory.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Contract (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Contract/AgentInterface.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Contract/BatchToolExecutorInterface.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Contract/BudgetPruningStrategyInterface.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Contract/CancellationTokenInterface.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Contract/CliRuntimeInterface.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Contract/CliVendorAdapterInterface.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Contract/ConfigInterface.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Contract/ContextWindowInterface.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Contract/EmbeddingProviderInterface.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Contract/LocalModelHandleInterface.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Contract/LocalModelRuntimeInterface.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Contract/MessageInterface.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Contract/PackageEventListenerInterface.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Contract/PendingInputProviderInterface.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Contract/ProviderInterface.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Contract/TickCallbackInterface.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Contract/TokenCounterInterface.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Contract/ToolDocumentationInterface.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Contract/ToolExecutionPolicyInterface.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Contract/ToolExecutorInterface.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Contract/ToolInterface.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Contract/ToolkitInterface.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Contract/VectorStoreInterface.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Embedding (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Embedding/OllamaEmbeddingProvider.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Embedding/OpenAIEmbeddingProvider.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Enum (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Enum/AgentFinishReason.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Enum/EmptyResponseHandling.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Enum/FinishReason.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Enum/ModelCapability.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Enum/ProviderFinishReason.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Enum/ReasoningEffort.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Enum/Role.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Enum/RuntimeFinishReason.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Enum/ToolResultStatus.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Exception (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Exception/DocumentException.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Exception/MaxIterationsException.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Exception/ProviderException.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Exception/TerminationException.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Exception/ToolNotFoundException.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Memory (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Memory/Document.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Memory/EmbeddingResult.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Message (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Message/AssistantMessage.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Message/Conversation.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Message/DefaultBudgetPruningStrategy.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Message/SafetyOnlyPruningStrategy.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Message/SystemMessage.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Message/ToolResultMessage.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Message/UserMessage.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Prompt (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Prompt/SystemPrompt.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Provider (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Provider/AbstractProvider.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Provider/AnthropicProvider.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Provider/Cli (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Provider/Cli/ClaudeCliVendorAdapter.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Provider/Cli/CliProcessChunk.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Provider/Cli/CliProcessRequest.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Provider/Cli/CliProcessResult.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Provider/CliProvider.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Provider/GeminiProvider.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Provider/LlamaCpp (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Provider/LlamaCpp/LlamaCppHistoryFormatter.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Provider/LlamaCpp/LlamaCppMultimodalContext.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Provider/LlamaCpp/LlamaCppMultimodalNormalizer.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Provider/LlamaCpp/LlamaCppProjectorResolver.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Provider/LlamaCpp/LlamaCppPromptContext.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Provider/LlamaCpp/LlamaCppStructuredOutputContext.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Provider/LlamaCpp/LlamaCppStructuredOutputNormalizer.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Provider/LlamaCpp/LlamaCppTemplateRegistry.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Provider/LlamaCpp/LlamaCppTemplateResolver.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Provider/LlamaCpp/LlamaCppToolCallParser.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Provider/LlamaCpp/LlamaCppToolPromptInjector.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Provider/LlamaCpp/LlamaCppToolSchemaNormalizer.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Provider/LlamaCppProvider.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Provider/MistralProvider.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Provider/OllamaProvider.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Provider/OpenAICompatibleProvider.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Provider/OpenAIResponsesProvider.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Provider/ProviderFactory.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Provider/Response.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Provider/SchemaUtils.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Provider/SseStreamParser.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Provider/StrictSchemaNormalizer.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Provider/Usage.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Provider/XAIProvider.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Runtime (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Runtime/LlamaCpp (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Runtime/LlamaCpp/FfiLlamaCppNativeApi.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Runtime/LlamaCpp/LlamaCppJsonGrammar.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Runtime/LlamaCpp/LlamaCppNativeApiInterface.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Runtime/LlamaCpp/LlamaCppNativeHandle.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Runtime/LlamaCpp/LlamaCppNativeRuntime.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Runtime/LlamaCpp/LlamaCppStructuredOutputValidator.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Runtime/RuntimeCompletionChunk.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Runtime/RuntimeCompletionRequest.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Runtime/RuntimeCompletionResult.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Runtime/RuntimeImageInput.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Runtime/RuntimeModelMetadata.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Runtime/RuntimeStateSnapshot.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Runtime/RuntimeStructuredOutput.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Runtime/RuntimeToolDefinition.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Tool (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Tool/DoneTool.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Tool/Parameter (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Tool/Parameter/ArrayParameter.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Tool/Parameter/BoolParameter.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Tool/Parameter/EnumParameter.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Tool/Parameter/MapParameter.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Tool/Parameter/NumberParameter.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Tool/Parameter/ObjectParameter.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Tool/Parameter/Parameter.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Tool/Parameter/StringParameter.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Tool/Parameter/ValidationResult.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Tool/Tool.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Tool/ToolCall.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/Tool/ToolResult.php (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/VectorStore (added)
-
trunk/vendor-prefixed/carmelosantana/php-agents/src/VectorStore/InMemoryVectorStore.php (added)
-
trunk/vendor-prefixed/composer (added)
-
trunk/vendor-prefixed/composer/ClassLoader.php (added)
-
trunk/vendor-prefixed/composer/InstalledVersions.php (added)
-
trunk/vendor-prefixed/composer/LICENSE (added)
-
trunk/vendor-prefixed/composer/autoload_classmap.php (added)
-
trunk/vendor-prefixed/composer/autoload_files.php (added)
-
trunk/vendor-prefixed/composer/autoload_namespaces.php (added)
-
trunk/vendor-prefixed/composer/autoload_psr4.php (added)
-
trunk/vendor-prefixed/composer/autoload_real.php (added)
-
trunk/vendor-prefixed/composer/autoload_static.php (added)
-
trunk/vendor-prefixed/composer/installed.json (added)
-
trunk/vendor-prefixed/composer/installed.php (added)
-
trunk/vendor-prefixed/composer/platform_check.php (added)
-
trunk/vendor-prefixed/dflydev (added)
-
trunk/vendor-prefixed/dflydev/dot-access-data (added)
-
trunk/vendor-prefixed/dflydev/dot-access-data/CHANGELOG.md (added)
-
trunk/vendor-prefixed/dflydev/dot-access-data/LICENSE (added)
-
trunk/vendor-prefixed/dflydev/dot-access-data/README.md (added)
-
trunk/vendor-prefixed/dflydev/dot-access-data/composer.json (added)
-
trunk/vendor-prefixed/dflydev/dot-access-data/src (added)
-
trunk/vendor-prefixed/dflydev/dot-access-data/src/Data.php (added)
-
trunk/vendor-prefixed/dflydev/dot-access-data/src/DataInterface.php (added)
-
trunk/vendor-prefixed/dflydev/dot-access-data/src/Exception (added)
-
trunk/vendor-prefixed/dflydev/dot-access-data/src/Exception/DataException.php (added)
-
trunk/vendor-prefixed/dflydev/dot-access-data/src/Exception/InvalidPathException.php (added)
-
trunk/vendor-prefixed/dflydev/dot-access-data/src/Exception/MissingPathException.php (added)
-
trunk/vendor-prefixed/dflydev/dot-access-data/src/Util.php (added)
-
trunk/vendor-prefixed/league (added)
-
trunk/vendor-prefixed/league/commonmark (added)
-
trunk/vendor-prefixed/league/commonmark/CHANGELOG.md (added)
-
trunk/vendor-prefixed/league/commonmark/LICENSE (added)
-
trunk/vendor-prefixed/league/commonmark/README.md (added)
-
trunk/vendor-prefixed/league/commonmark/composer.json (added)
-
trunk/vendor-prefixed/league/commonmark/src (added)
-
trunk/vendor-prefixed/league/commonmark/src/CommonMarkConverter.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/ConverterInterface.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Delimiter (added)
-
trunk/vendor-prefixed/league/commonmark/src/Delimiter/Bracket.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Delimiter/Delimiter.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Delimiter/DelimiterInterface.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Delimiter/DelimiterParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Delimiter/DelimiterStack.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Delimiter/Processor (added)
-
trunk/vendor-prefixed/league/commonmark/src/Delimiter/Processor/CacheableDelimiterProcessorInterface.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Delimiter/Processor/DelimiterProcessorCollection.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Delimiter/Processor/DelimiterProcessorCollectionInterface.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Delimiter/Processor/DelimiterProcessorInterface.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Delimiter/Processor/StaggeredDelimiterProcessor.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Environment (added)
-
trunk/vendor-prefixed/league/commonmark/src/Environment/Environment.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Environment/EnvironmentAwareInterface.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Environment/EnvironmentBuilderInterface.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Environment/EnvironmentInterface.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Event (added)
-
trunk/vendor-prefixed/league/commonmark/src/Event/AbstractEvent.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Event/DocumentParsedEvent.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Event/DocumentPreParsedEvent.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Event/DocumentPreRenderEvent.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Event/DocumentRenderedEvent.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Event/ListenerData.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Exception (added)
-
trunk/vendor-prefixed/league/commonmark/src/Exception/AlreadyInitializedException.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Exception/CommonMarkException.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Exception/IOException.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Exception/InvalidArgumentException.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Exception/LogicException.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Exception/MissingDependencyException.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Exception/UnexpectedEncodingException.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Attributes (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Attributes/AttributesExtension.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Attributes/Event (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Attributes/Event/AttributesListener.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Attributes/Node (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Attributes/Node/Attributes.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Attributes/Node/AttributesInline.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Attributes/Parser (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Attributes/Parser/AttributesBlockContinueParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Attributes/Parser/AttributesBlockStartParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Attributes/Parser/AttributesInlineParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Attributes/Util (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Attributes/Util/AttributesHelper.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Autolink (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Autolink/AutolinkExtension.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Autolink/EmailAutolinkParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Autolink/UrlAutolinkParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/CommonMarkCoreExtension.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Delimiter (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Delimiter/Processor (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Delimiter/Processor/EmphasisDelimiterProcessor.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Node (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Node/Block (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Node/Block/BlockQuote.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Node/Block/FencedCode.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Node/Block/Heading.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Node/Block/HtmlBlock.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Node/Block/IndentedCode.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Node/Block/ListBlock.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Node/Block/ListData.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Node/Block/ListItem.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Node/Block/ThematicBreak.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Node/Inline (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Node/Inline/AbstractWebResource.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Node/Inline/Code.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Node/Inline/Emphasis.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Node/Inline/HtmlInline.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Node/Inline/Image.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Node/Inline/Link.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Node/Inline/Strong.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Parser (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Parser/Block (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Parser/Block/BlockQuoteParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Parser/Block/BlockQuoteStartParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Parser/Block/FencedCodeParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Parser/Block/FencedCodeStartParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Parser/Block/HeadingParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Parser/Block/HeadingStartParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Parser/Block/HtmlBlockParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Parser/Block/HtmlBlockStartParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Parser/Block/IndentedCodeParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Parser/Block/IndentedCodeStartParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Parser/Block/ListBlockParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Parser/Block/ListBlockStartParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Parser/Block/ListItemParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Parser/Block/ThematicBreakParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Parser/Block/ThematicBreakStartParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Parser/Inline (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Parser/Inline/AutolinkParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Parser/Inline/BacktickParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Parser/Inline/BangParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Parser/Inline/CloseBracketParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Parser/Inline/EntityParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Parser/Inline/EscapableParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Parser/Inline/HtmlInlineParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Parser/Inline/OpenBracketParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Renderer (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Renderer/Block (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Renderer/Block/BlockQuoteRenderer.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Renderer/Block/FencedCodeRenderer.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Renderer/Block/HeadingRenderer.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Renderer/Block/HtmlBlockRenderer.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Renderer/Block/IndentedCodeRenderer.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Renderer/Block/ListBlockRenderer.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Renderer/Block/ListItemRenderer.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Renderer/Block/ThematicBreakRenderer.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Renderer/Inline (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Renderer/Inline/CodeRenderer.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Renderer/Inline/EmphasisRenderer.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Renderer/Inline/HtmlInlineRenderer.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Renderer/Inline/ImageRenderer.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Renderer/Inline/LinkRenderer.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/CommonMark/Renderer/Inline/StrongRenderer.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/ConfigurableExtensionInterface.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/DefaultAttributes (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/DefaultAttributes/ApplyDefaultAttributesProcessor.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/DefaultAttributes/DefaultAttributesExtension.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/DescriptionList (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/DescriptionList/DescriptionListExtension.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/DescriptionList/Event (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/DescriptionList/Event/ConsecutiveDescriptionListMerger.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/DescriptionList/Event/LooseDescriptionHandler.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/DescriptionList/Node (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/DescriptionList/Node/Description.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/DescriptionList/Node/DescriptionList.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/DescriptionList/Node/DescriptionTerm.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/DescriptionList/Parser (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/DescriptionList/Parser/DescriptionContinueParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/DescriptionList/Parser/DescriptionListContinueParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/DescriptionList/Parser/DescriptionStartParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/DescriptionList/Parser/DescriptionTermContinueParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/DescriptionList/Renderer (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/DescriptionList/Renderer/DescriptionListRenderer.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/DescriptionList/Renderer/DescriptionRenderer.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/DescriptionList/Renderer/DescriptionTermRenderer.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/DisallowedRawHtml (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/DisallowedRawHtml/DisallowedRawHtmlExtension.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/DisallowedRawHtml/DisallowedRawHtmlRenderer.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Embed (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Embed/Bridge (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Embed/Bridge/OscaroteroEmbedAdapter.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Embed/DomainFilteringAdapter.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Embed/Embed.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Embed/EmbedAdapterInterface.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Embed/EmbedExtension.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Embed/EmbedParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Embed/EmbedProcessor.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Embed/EmbedRenderer.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Embed/EmbedStartParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/ExtensionInterface.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/ExternalLink (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/ExternalLink/ExternalLinkExtension.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/ExternalLink/ExternalLinkProcessor.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Footnote (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Footnote/Event (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Footnote/Event/AnonymousFootnotesListener.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Footnote/Event/FixOrphanedFootnotesAndRefsListener.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Footnote/Event/GatherFootnotesListener.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Footnote/Event/NumberFootnotesListener.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Footnote/FootnoteExtension.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Footnote/Node (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Footnote/Node/Footnote.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Footnote/Node/FootnoteBackref.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Footnote/Node/FootnoteContainer.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Footnote/Node/FootnoteRef.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Footnote/Parser (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Footnote/Parser/AnonymousFootnoteRefParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Footnote/Parser/FootnoteParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Footnote/Parser/FootnoteRefParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Footnote/Parser/FootnoteStartParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Footnote/Renderer (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Footnote/Renderer/FootnoteBackrefRenderer.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Footnote/Renderer/FootnoteContainerRenderer.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Footnote/Renderer/FootnoteRefRenderer.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Footnote/Renderer/FootnoteRenderer.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/FrontMatter (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/FrontMatter/Data (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/FrontMatter/Data/FrontMatterDataParserInterface.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/FrontMatter/Data/LibYamlFrontMatterParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/FrontMatter/Data/SymfonyYamlFrontMatterParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/FrontMatter/Exception (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/FrontMatter/Exception/InvalidFrontMatterException.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/FrontMatter/FrontMatterExtension.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/FrontMatter/FrontMatterParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/FrontMatter/FrontMatterParserInterface.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/FrontMatter/FrontMatterProviderInterface.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/FrontMatter/Input (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/FrontMatter/Input/MarkdownInputWithFrontMatter.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/FrontMatter/Listener (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/FrontMatter/Listener/FrontMatterPostRenderListener.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/FrontMatter/Listener/FrontMatterPreParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/FrontMatter/Output (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/FrontMatter/Output/RenderedContentWithFrontMatter.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/GithubFlavoredMarkdownExtension.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/HeadingPermalink (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/HeadingPermalink/HeadingPermalink.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/HeadingPermalink/HeadingPermalinkExtension.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/HeadingPermalink/HeadingPermalinkProcessor.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/HeadingPermalink/HeadingPermalinkRenderer.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Highlight (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Highlight/HighlightExtension.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Highlight/Mark.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Highlight/MarkDelimiterProcessor.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Highlight/MarkRenderer.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/InlinesOnly (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/InlinesOnly/ChildRenderer.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/InlinesOnly/InlinesOnlyExtension.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Mention (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Mention/Generator (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Mention/Generator/CallbackGenerator.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Mention/Generator/MentionGeneratorInterface.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Mention/Generator/StringTemplateLinkGenerator.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Mention/Mention.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Mention/MentionExtension.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Mention/MentionParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/NormalizeHeadings (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/NormalizeHeadings/NormalizeHeadingsExtension.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/NormalizeHeadings/NormalizeHeadingsProcessor.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/SmartPunct (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/SmartPunct/DashParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/SmartPunct/EllipsesParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/SmartPunct/Quote.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/SmartPunct/QuoteParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/SmartPunct/QuoteProcessor.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/SmartPunct/ReplaceUnpairedQuotesListener.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/SmartPunct/SmartPunctExtension.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Strikethrough (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Strikethrough/Strikethrough.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Strikethrough/StrikethroughDelimiterProcessor.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Strikethrough/StrikethroughExtension.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Strikethrough/StrikethroughRenderer.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Table (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Table/Table.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Table/TableCell.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Table/TableCellRenderer.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Table/TableExtension.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Table/TableParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Table/TableRenderer.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Table/TableRow.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Table/TableRowRenderer.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Table/TableSection.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Table/TableSectionRenderer.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/Table/TableStartParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/TableOfContents (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/TableOfContents/Node (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/TableOfContents/Node/TableOfContents.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/TableOfContents/Node/TableOfContentsPlaceholder.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/TableOfContents/Node/TableOfContentsReference.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/TableOfContents/Normalizer (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/TableOfContents/Normalizer/AsIsNormalizerStrategy.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/TableOfContents/Normalizer/FlatNormalizerStrategy.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/TableOfContents/Normalizer/NormalizerStrategyInterface.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/TableOfContents/Normalizer/RelativeNormalizerStrategy.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/TableOfContents/TableOfContentsBuilder.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/TableOfContents/TableOfContentsExtension.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/TableOfContents/TableOfContentsGenerator.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/TableOfContents/TableOfContentsGeneratorInterface.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/TableOfContents/TableOfContentsPlaceholderParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/TableOfContents/TableOfContentsPlaceholderRenderer.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/TableOfContents/TableOfContentsReferenceRenderer.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/TableOfContents/TableOfContentsRenderCache.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/TableOfContents/TableOfContentsRenderer.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/TaskList (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/TaskList/TaskListExtension.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/TaskList/TaskListItemMarker.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/TaskList/TaskListItemMarkerParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Extension/TaskList/TaskListItemMarkerRenderer.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/GithubFlavoredMarkdownConverter.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Input (added)
-
trunk/vendor-prefixed/league/commonmark/src/Input/MarkdownInput.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Input/MarkdownInputInterface.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/MarkdownConverter.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/MarkdownConverterInterface.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Node (added)
-
trunk/vendor-prefixed/league/commonmark/src/Node/Block (added)
-
trunk/vendor-prefixed/league/commonmark/src/Node/Block/AbstractBlock.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Node/Block/Document.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Node/Block/Paragraph.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Node/Block/TightBlockInterface.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Node/Inline (added)
-
trunk/vendor-prefixed/league/commonmark/src/Node/Inline/AbstractInline.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Node/Inline/AbstractStringContainer.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Node/Inline/AdjacentTextMerger.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Node/Inline/DelimitedInterface.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Node/Inline/Newline.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Node/Inline/Text.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Node/Node.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Node/NodeIterator.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Node/NodeWalker.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Node/NodeWalkerEvent.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Node/Query (added)
-
trunk/vendor-prefixed/league/commonmark/src/Node/Query.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Node/Query/AndExpr.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Node/Query/ExpressionInterface.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Node/Query/OrExpr.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Node/RawMarkupContainerInterface.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Node/StringContainerHelper.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Node/StringContainerInterface.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Normalizer (added)
-
trunk/vendor-prefixed/league/commonmark/src/Normalizer/SlugNormalizer.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Normalizer/TextNormalizer.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Normalizer/TextNormalizerInterface.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Normalizer/UniqueSlugNormalizer.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Normalizer/UniqueSlugNormalizerInterface.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Output (added)
-
trunk/vendor-prefixed/league/commonmark/src/Output/RenderedContent.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Output/RenderedContentInterface.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Parser (added)
-
trunk/vendor-prefixed/league/commonmark/src/Parser/Block (added)
-
trunk/vendor-prefixed/league/commonmark/src/Parser/Block/AbstractBlockContinueParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Parser/Block/BlockContinue.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Parser/Block/BlockContinueParserInterface.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Parser/Block/BlockContinueParserWithInlinesInterface.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Parser/Block/BlockStart.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Parser/Block/BlockStartParserInterface.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Parser/Block/DocumentBlockParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Parser/Block/ParagraphParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Parser/Block/SkipLinesStartingWithLettersParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Parser/Cursor.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Parser/CursorState.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Parser/Inline (added)
-
trunk/vendor-prefixed/league/commonmark/src/Parser/Inline/InlineParserInterface.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Parser/Inline/InlineParserMatch.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Parser/Inline/NewlineParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Parser/InlineParserContext.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Parser/InlineParserEngine.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Parser/InlineParserEngineInterface.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Parser/MarkdownParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Parser/MarkdownParserInterface.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Parser/MarkdownParserState.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Parser/MarkdownParserStateInterface.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Parser/ParserLogicException.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Reference (added)
-
trunk/vendor-prefixed/league/commonmark/src/Reference/MemoryLimitedReferenceMap.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Reference/Reference.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Reference/ReferenceInterface.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Reference/ReferenceMap.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Reference/ReferenceMapInterface.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Reference/ReferenceParser.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Reference/ReferenceableInterface.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Renderer (added)
-
trunk/vendor-prefixed/league/commonmark/src/Renderer/Block (added)
-
trunk/vendor-prefixed/league/commonmark/src/Renderer/Block/DocumentRenderer.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Renderer/Block/ParagraphRenderer.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Renderer/ChildNodeRendererInterface.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Renderer/DocumentRendererInterface.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Renderer/HtmlDecorator.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Renderer/HtmlRenderer.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Renderer/Inline (added)
-
trunk/vendor-prefixed/league/commonmark/src/Renderer/Inline/NewlineRenderer.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Renderer/Inline/TextRenderer.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Renderer/MarkdownRendererInterface.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Renderer/NoMatchingRendererException.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Renderer/NodeRendererInterface.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Util (added)
-
trunk/vendor-prefixed/league/commonmark/src/Util/ArrayCollection.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Util/Html5EntityDecoder.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Util/HtmlElement.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Util/HtmlFilter.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Util/LinkParserHelper.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Util/PrioritizedList.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Util/RegexHelper.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Util/SpecReader.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Util/UrlEncoder.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Util/Xml.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Xml (added)
-
trunk/vendor-prefixed/league/commonmark/src/Xml/FallbackNodeXmlRenderer.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Xml/MarkdownToXmlConverter.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Xml/XmlNodeRendererInterface.php (added)
-
trunk/vendor-prefixed/league/commonmark/src/Xml/XmlRenderer.php (added)
-
trunk/vendor-prefixed/league/config (added)
-
trunk/vendor-prefixed/league/config/CHANGELOG.md (added)
-
trunk/vendor-prefixed/league/config/LICENSE.md (added)
-
trunk/vendor-prefixed/league/config/README.md (added)
-
trunk/vendor-prefixed/league/config/composer.json (added)
-
trunk/vendor-prefixed/league/config/src (added)
-
trunk/vendor-prefixed/league/config/src/Configuration.php (added)
-
trunk/vendor-prefixed/league/config/src/ConfigurationAwareInterface.php (added)
-
trunk/vendor-prefixed/league/config/src/ConfigurationBuilderInterface.php (added)
-
trunk/vendor-prefixed/league/config/src/ConfigurationInterface.php (added)
-
trunk/vendor-prefixed/league/config/src/ConfigurationProviderInterface.php (added)
-
trunk/vendor-prefixed/league/config/src/Exception (added)
-
trunk/vendor-prefixed/league/config/src/Exception/ConfigurationExceptionInterface.php (added)
-
trunk/vendor-prefixed/league/config/src/Exception/InvalidConfigurationException.php (added)
-
trunk/vendor-prefixed/league/config/src/Exception/UnknownOptionException.php (added)
-
trunk/vendor-prefixed/league/config/src/Exception/ValidationException.php (added)
-
trunk/vendor-prefixed/league/config/src/MutableConfigurationInterface.php (added)
-
trunk/vendor-prefixed/league/config/src/ReadOnlyConfiguration.php (added)
-
trunk/vendor-prefixed/league/config/src/SchemaBuilderInterface.php (added)
-
trunk/vendor-prefixed/nette (added)
-
trunk/vendor-prefixed/nette/schema (added)
-
trunk/vendor-prefixed/nette/schema/composer.json (added)
-
trunk/vendor-prefixed/nette/schema/license.md (added)
-
trunk/vendor-prefixed/nette/schema/readme.md (added)
-
trunk/vendor-prefixed/nette/schema/src (added)
-
trunk/vendor-prefixed/nette/schema/src/Schema (added)
-
trunk/vendor-prefixed/nette/schema/src/Schema/Context.php (added)
-
trunk/vendor-prefixed/nette/schema/src/Schema/DynamicParameter.php (added)
-
trunk/vendor-prefixed/nette/schema/src/Schema/Elements (added)
-
trunk/vendor-prefixed/nette/schema/src/Schema/Elements/AnyOf.php (added)
-
trunk/vendor-prefixed/nette/schema/src/Schema/Elements/Base.php (added)
-
trunk/vendor-prefixed/nette/schema/src/Schema/Elements/Structure.php (added)
-
trunk/vendor-prefixed/nette/schema/src/Schema/Elements/Type.php (added)
-
trunk/vendor-prefixed/nette/schema/src/Schema/Expect.php (added)
-
trunk/vendor-prefixed/nette/schema/src/Schema/Helpers.php (added)
-
trunk/vendor-prefixed/nette/schema/src/Schema/Message.php (added)
-
trunk/vendor-prefixed/nette/schema/src/Schema/Processor.php (added)
-
trunk/vendor-prefixed/nette/schema/src/Schema/Schema.php (added)
-
trunk/vendor-prefixed/nette/schema/src/Schema/ValidationException.php (added)
-
trunk/vendor-prefixed/nette/utils (added)
-
trunk/vendor-prefixed/nette/utils/composer.json (added)
-
trunk/vendor-prefixed/nette/utils/license.md (added)
-
trunk/vendor-prefixed/nette/utils/readme.md (added)
-
trunk/vendor-prefixed/nette/utils/src (added)
-
trunk/vendor-prefixed/nette/utils/src/HtmlStringable.php (added)
-
trunk/vendor-prefixed/nette/utils/src/Iterators (added)
-
trunk/vendor-prefixed/nette/utils/src/Iterators/CachingIterator.php (added)
-
trunk/vendor-prefixed/nette/utils/src/Iterators/Mapper.php (added)
-
trunk/vendor-prefixed/nette/utils/src/SmartObject.php (added)
-
trunk/vendor-prefixed/nette/utils/src/StaticClass.php (added)
-
trunk/vendor-prefixed/nette/utils/src/Translator.php (added)
-
trunk/vendor-prefixed/nette/utils/src/Utils (added)
-
trunk/vendor-prefixed/nette/utils/src/Utils/ArrayHash.php (added)
-
trunk/vendor-prefixed/nette/utils/src/Utils/ArrayList.php (added)
-
trunk/vendor-prefixed/nette/utils/src/Utils/Arrays.php (added)
-
trunk/vendor-prefixed/nette/utils/src/Utils/Callback.php (added)
-
trunk/vendor-prefixed/nette/utils/src/Utils/DateTime.php (added)
-
trunk/vendor-prefixed/nette/utils/src/Utils/DateTimeImmutable.php (added)
-
trunk/vendor-prefixed/nette/utils/src/Utils/FileInfo.php (added)
-
trunk/vendor-prefixed/nette/utils/src/Utils/FileSystem.php (added)
-
trunk/vendor-prefixed/nette/utils/src/Utils/Finder.php (added)
-
trunk/vendor-prefixed/nette/utils/src/Utils/Floats.php (added)
-
trunk/vendor-prefixed/nette/utils/src/Utils/Helpers.php (added)
-
trunk/vendor-prefixed/nette/utils/src/Utils/Html.php (added)
-
trunk/vendor-prefixed/nette/utils/src/Utils/Image.php (added)
-
trunk/vendor-prefixed/nette/utils/src/Utils/ImageColor.php (added)
-
trunk/vendor-prefixed/nette/utils/src/Utils/ImageType.php (added)
-
trunk/vendor-prefixed/nette/utils/src/Utils/Iterables.php (added)
-
trunk/vendor-prefixed/nette/utils/src/Utils/Json.php (added)
-
trunk/vendor-prefixed/nette/utils/src/Utils/ObjectHelpers.php (added)
-
trunk/vendor-prefixed/nette/utils/src/Utils/Paginator.php (added)
-
trunk/vendor-prefixed/nette/utils/src/Utils/Process.php (added)
-
trunk/vendor-prefixed/nette/utils/src/Utils/Random.php (added)
-
trunk/vendor-prefixed/nette/utils/src/Utils/Reflection.php (added)
-
trunk/vendor-prefixed/nette/utils/src/Utils/ReflectionMethod.php (added)
-
trunk/vendor-prefixed/nette/utils/src/Utils/Strings.php (added)
-
trunk/vendor-prefixed/nette/utils/src/Utils/Type.php (added)
-
trunk/vendor-prefixed/nette/utils/src/Utils/Validators.php (added)
-
trunk/vendor-prefixed/nette/utils/src/Utils/exceptions.php (added)
-
trunk/vendor-prefixed/nette/utils/src/compatibility.php (added)
-
trunk/vendor-prefixed/nette/utils/src/exceptions.php (added)
-
trunk/vendor-prefixed/psr (added)
-
trunk/vendor-prefixed/psr/container (added)
-
trunk/vendor-prefixed/psr/container/LICENSE (added)
-
trunk/vendor-prefixed/psr/container/README.md (added)
-
trunk/vendor-prefixed/psr/container/composer.json (added)
-
trunk/vendor-prefixed/psr/container/src (added)
-
trunk/vendor-prefixed/psr/container/src/ContainerExceptionInterface.php (added)
-
trunk/vendor-prefixed/psr/container/src/ContainerInterface.php (added)
-
trunk/vendor-prefixed/psr/container/src/NotFoundExceptionInterface.php (added)
-
trunk/vendor-prefixed/psr/event-dispatcher (added)
-
trunk/vendor-prefixed/psr/event-dispatcher/LICENSE (added)
-
trunk/vendor-prefixed/psr/event-dispatcher/README.md (added)
-
trunk/vendor-prefixed/psr/event-dispatcher/composer.json (added)
-
trunk/vendor-prefixed/psr/event-dispatcher/src (added)
-
trunk/vendor-prefixed/psr/event-dispatcher/src/EventDispatcherInterface.php (added)
-
trunk/vendor-prefixed/psr/event-dispatcher/src/ListenerProviderInterface.php (added)
-
trunk/vendor-prefixed/psr/event-dispatcher/src/StoppableEventInterface.php (added)
-
trunk/vendor-prefixed/psr/log (added)
-
trunk/vendor-prefixed/psr/log/LICENSE (added)
-
trunk/vendor-prefixed/psr/log/README.md (added)
-
trunk/vendor-prefixed/psr/log/composer.json (added)
-
trunk/vendor-prefixed/psr/log/src (added)
-
trunk/vendor-prefixed/psr/log/src/AbstractLogger.php (added)
-
trunk/vendor-prefixed/psr/log/src/InvalidArgumentException.php (added)
-
trunk/vendor-prefixed/psr/log/src/LogLevel.php (added)
-
trunk/vendor-prefixed/psr/log/src/LoggerAwareInterface.php (added)
-
trunk/vendor-prefixed/psr/log/src/LoggerAwareTrait.php (added)
-
trunk/vendor-prefixed/psr/log/src/LoggerInterface.php (added)
-
trunk/vendor-prefixed/psr/log/src/LoggerTrait.php (added)
-
trunk/vendor-prefixed/psr/log/src/NullLogger.php (added)
-
trunk/vendor-prefixed/symfony (added)
-
trunk/vendor-prefixed/symfony/deprecation-contracts (added)
-
trunk/vendor-prefixed/symfony/deprecation-contracts/CHANGELOG.md (added)
-
trunk/vendor-prefixed/symfony/deprecation-contracts/LICENSE (added)
-
trunk/vendor-prefixed/symfony/deprecation-contracts/README.md (added)
-
trunk/vendor-prefixed/symfony/deprecation-contracts/composer.json (added)
-
trunk/vendor-prefixed/symfony/deprecation-contracts/function.php (added)
-
trunk/vendor-prefixed/symfony/http-client (added)
-
trunk/vendor-prefixed/symfony/http-client-contracts (added)
-
trunk/vendor-prefixed/symfony/http-client-contracts/CHANGELOG.md (added)
-
trunk/vendor-prefixed/symfony/http-client-contracts/ChunkInterface.php (added)
-
trunk/vendor-prefixed/symfony/http-client-contracts/Exception (added)
-
trunk/vendor-prefixed/symfony/http-client-contracts/Exception/ClientExceptionInterface.php (added)
-
trunk/vendor-prefixed/symfony/http-client-contracts/Exception/DecodingExceptionInterface.php (added)
-
trunk/vendor-prefixed/symfony/http-client-contracts/Exception/ExceptionInterface.php (added)
-
trunk/vendor-prefixed/symfony/http-client-contracts/Exception/HttpExceptionInterface.php (added)
-
trunk/vendor-prefixed/symfony/http-client-contracts/Exception/RedirectionExceptionInterface.php (added)
-
trunk/vendor-prefixed/symfony/http-client-contracts/Exception/ServerExceptionInterface.php (added)
-
trunk/vendor-prefixed/symfony/http-client-contracts/Exception/TimeoutExceptionInterface.php (added)
-
trunk/vendor-prefixed/symfony/http-client-contracts/Exception/TransportExceptionInterface.php (added)
-
trunk/vendor-prefixed/symfony/http-client-contracts/HttpClientInterface.php (added)
-
trunk/vendor-prefixed/symfony/http-client-contracts/LICENSE (added)
-
trunk/vendor-prefixed/symfony/http-client-contracts/README.md (added)
-
trunk/vendor-prefixed/symfony/http-client-contracts/ResponseInterface.php (added)
-
trunk/vendor-prefixed/symfony/http-client-contracts/ResponseStreamInterface.php (added)
-
trunk/vendor-prefixed/symfony/http-client-contracts/composer.json (added)
-
trunk/vendor-prefixed/symfony/http-client/AmpHttpClient.php (added)
-
trunk/vendor-prefixed/symfony/http-client/AsyncDecoratorTrait.php (added)
-
trunk/vendor-prefixed/symfony/http-client/CHANGELOG.md (added)
-
trunk/vendor-prefixed/symfony/http-client/Caching (added)
-
trunk/vendor-prefixed/symfony/http-client/Caching/Freshness.php (added)
-
trunk/vendor-prefixed/symfony/http-client/CachingHttpClient.php (added)
-
trunk/vendor-prefixed/symfony/http-client/Chunk (added)
-
trunk/vendor-prefixed/symfony/http-client/Chunk/DataChunk.php (added)
-
trunk/vendor-prefixed/symfony/http-client/Chunk/ErrorChunk.php (added)
-
trunk/vendor-prefixed/symfony/http-client/Chunk/FirstChunk.php (added)
-
trunk/vendor-prefixed/symfony/http-client/Chunk/InformationalChunk.php (added)
-
trunk/vendor-prefixed/symfony/http-client/Chunk/LastChunk.php (added)
-
trunk/vendor-prefixed/symfony/http-client/Chunk/ServerSentEvent.php (added)
-
trunk/vendor-prefixed/symfony/http-client/CurlHttpClient.php (added)
-
trunk/vendor-prefixed/symfony/http-client/DataCollector (added)
-
trunk/vendor-prefixed/symfony/http-client/DataCollector/HttpClientDataCollector.php (added)
-
trunk/vendor-prefixed/symfony/http-client/DecoratorTrait.php (added)
-
trunk/vendor-prefixed/symfony/http-client/DependencyInjection (added)
-
trunk/vendor-prefixed/symfony/http-client/DependencyInjection/HttpClientPass.php (added)
-
trunk/vendor-prefixed/symfony/http-client/DnsResolvingHttpClient.php (added)
-
trunk/vendor-prefixed/symfony/http-client/EventSourceHttpClient.php (added)
-
trunk/vendor-prefixed/symfony/http-client/Exception (added)
-
trunk/vendor-prefixed/symfony/http-client/Exception/ChunkCacheItemNotFoundException.php (added)
-
trunk/vendor-prefixed/symfony/http-client/Exception/ClientException.php (added)
-
trunk/vendor-prefixed/symfony/http-client/Exception/EventSourceException.php (added)
-
trunk/vendor-prefixed/symfony/http-client/Exception/HttpExceptionTrait.php (added)
-
trunk/vendor-prefixed/symfony/http-client/Exception/InvalidArgumentException.php (added)
-
trunk/vendor-prefixed/symfony/http-client/Exception/JsonException.php (added)
-
trunk/vendor-prefixed/symfony/http-client/Exception/RedirectionException.php (added)
-
trunk/vendor-prefixed/symfony/http-client/Exception/ServerException.php (added)
-
trunk/vendor-prefixed/symfony/http-client/Exception/TimeoutException.php (added)
-
trunk/vendor-prefixed/symfony/http-client/Exception/TransportException.php (added)
-
trunk/vendor-prefixed/symfony/http-client/GuzzleHttpHandler.php (added)
-
trunk/vendor-prefixed/symfony/http-client/HttpClient.php (added)
-
trunk/vendor-prefixed/symfony/http-client/HttpClientTrait.php (added)
-
trunk/vendor-prefixed/symfony/http-client/HttpOptions.php (added)
-
trunk/vendor-prefixed/symfony/http-client/HttplugClient.php (added)
-
trunk/vendor-prefixed/symfony/http-client/Internal (added)
-
trunk/vendor-prefixed/symfony/http-client/Internal/AmpBody.php (added)
-
trunk/vendor-prefixed/symfony/http-client/Internal/AmpClientState.php (added)
-
trunk/vendor-prefixed/symfony/http-client/Internal/AmpListener.php (added)
-
trunk/vendor-prefixed/symfony/http-client/Internal/AmpResolver.php (added)
-
trunk/vendor-prefixed/symfony/http-client/Internal/Canary.php (added)
-
trunk/vendor-prefixed/symfony/http-client/Internal/ClientState.php (added)
-
trunk/vendor-prefixed/symfony/http-client/Internal/CurlClientState.php (added)
-
trunk/vendor-prefixed/symfony/http-client/Internal/Dechunker.php (added)
-
trunk/vendor-prefixed/symfony/http-client/Internal/DnsCache.php (added)
-
trunk/vendor-prefixed/symfony/http-client/Internal/FollowRedirectsTrait.php (added)
-
trunk/vendor-prefixed/symfony/http-client/Internal/HttplugWaitLoop.php (added)
-
trunk/vendor-prefixed/symfony/http-client/Internal/NativeClientState.php (added)
-
trunk/vendor-prefixed/symfony/http-client/Internal/OutgoingRequest.php (added)
-
trunk/vendor-prefixed/symfony/http-client/Internal/PushedResponse.php (added)
-
trunk/vendor-prefixed/symfony/http-client/LICENSE (added)
-
trunk/vendor-prefixed/symfony/http-client/Messenger (added)
-
trunk/vendor-prefixed/symfony/http-client/Messenger/PingWebhookMessage.php (added)
-
trunk/vendor-prefixed/symfony/http-client/Messenger/PingWebhookMessageHandler.php (added)
-
trunk/vendor-prefixed/symfony/http-client/MockHttpClient.php (added)
-
trunk/vendor-prefixed/symfony/http-client/NativeHttpClient.php (added)
-
trunk/vendor-prefixed/symfony/http-client/NoPrivateNetworkHttpClient.php (added)
-
trunk/vendor-prefixed/symfony/http-client/Psr18Client.php (added)
-
trunk/vendor-prefixed/symfony/http-client/README.md (added)
-
trunk/vendor-prefixed/symfony/http-client/Response (added)
-
trunk/vendor-prefixed/symfony/http-client/Response/AmpResponse.php (added)
-
trunk/vendor-prefixed/symfony/http-client/Response/AsyncContext.php (added)
-
trunk/vendor-prefixed/symfony/http-client/Response/AsyncResponse.php (added)
-
trunk/vendor-prefixed/symfony/http-client/Response/CommonResponseTrait.php (added)
-
trunk/vendor-prefixed/symfony/http-client/Response/CurlResponse.php (added)
-
trunk/vendor-prefixed/symfony/http-client/Response/HttplugPromise.php (added)
-
trunk/vendor-prefixed/symfony/http-client/Response/JsonMockResponse.php (added)
-
trunk/vendor-prefixed/symfony/http-client/Response/MockResponse.php (added)
-
trunk/vendor-prefixed/symfony/http-client/Response/NativeResponse.php (added)
-
trunk/vendor-prefixed/symfony/http-client/Response/ResponseStream.php (added)
-
trunk/vendor-prefixed/symfony/http-client/Response/StreamWrapper.php (added)
-
trunk/vendor-prefixed/symfony/http-client/Response/StreamableInterface.php (added)
-
trunk/vendor-prefixed/symfony/http-client/Response/TraceableResponse.php (added)
-
trunk/vendor-prefixed/symfony/http-client/Response/TransportResponseTrait.php (added)
-
trunk/vendor-prefixed/symfony/http-client/Retry (added)
-
trunk/vendor-prefixed/symfony/http-client/Retry/GenericRetryStrategy.php (added)
-
trunk/vendor-prefixed/symfony/http-client/Retry/RetryStrategyInterface.php (added)
-
trunk/vendor-prefixed/symfony/http-client/RetryableHttpClient.php (added)
-
trunk/vendor-prefixed/symfony/http-client/ScopingHttpClient.php (added)
-
trunk/vendor-prefixed/symfony/http-client/Test (added)
-
trunk/vendor-prefixed/symfony/http-client/Test/HarFileResponseFactory.php (added)
-
trunk/vendor-prefixed/symfony/http-client/ThrottlingHttpClient.php (added)
-
trunk/vendor-prefixed/symfony/http-client/TraceableHttpClient.php (added)
-
trunk/vendor-prefixed/symfony/http-client/UriTemplateHttpClient.php (added)
-
trunk/vendor-prefixed/symfony/http-client/composer.json (added)
-
trunk/vendor-prefixed/symfony/polyfill-php80 (added)
-
trunk/vendor-prefixed/symfony/polyfill-php80/LICENSE (added)
-
trunk/vendor-prefixed/symfony/polyfill-php80/Php80.php (added)
-
trunk/vendor-prefixed/symfony/polyfill-php80/PhpToken.php (added)
-
trunk/vendor-prefixed/symfony/polyfill-php80/README.md (added)
-
trunk/vendor-prefixed/symfony/polyfill-php80/Resources (added)
-
trunk/vendor-prefixed/symfony/polyfill-php80/Resources/stubs (added)
-
trunk/vendor-prefixed/symfony/polyfill-php80/Resources/stubs/Attribute.php (added)
-
trunk/vendor-prefixed/symfony/polyfill-php80/Resources/stubs/PhpToken.php (added)
-
trunk/vendor-prefixed/symfony/polyfill-php80/Resources/stubs/Stringable.php (added)
-
trunk/vendor-prefixed/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php (added)
-
trunk/vendor-prefixed/symfony/polyfill-php80/Resources/stubs/ValueError.php (added)
-
trunk/vendor-prefixed/symfony/polyfill-php80/bootstrap.php (added)
-
trunk/vendor-prefixed/symfony/polyfill-php80/composer.json (added)
-
trunk/vendor-prefixed/symfony/service-contracts (added)
-
trunk/vendor-prefixed/symfony/service-contracts/Attribute (added)
-
trunk/vendor-prefixed/symfony/service-contracts/Attribute/Required.php (added)
-
trunk/vendor-prefixed/symfony/service-contracts/Attribute/SubscribedService.php (added)
-
trunk/vendor-prefixed/symfony/service-contracts/CHANGELOG.md (added)
-
trunk/vendor-prefixed/symfony/service-contracts/ContainerAwareInterface.php (added)
-
trunk/vendor-prefixed/symfony/service-contracts/ContainerProviderInterface.php (added)
-
trunk/vendor-prefixed/symfony/service-contracts/LICENSE (added)
-
trunk/vendor-prefixed/symfony/service-contracts/README.md (added)
-
trunk/vendor-prefixed/symfony/service-contracts/ResetInterface.php (added)
-
trunk/vendor-prefixed/symfony/service-contracts/ServiceCollectionInterface.php (added)
-
trunk/vendor-prefixed/symfony/service-contracts/ServiceLocatorTrait.php (added)
-
trunk/vendor-prefixed/symfony/service-contracts/ServiceMethodsSubscriberTrait.php (added)
-
trunk/vendor-prefixed/symfony/service-contracts/ServiceProviderInterface.php (added)
-
trunk/vendor-prefixed/symfony/service-contracts/ServiceSubscriberInterface.php (added)
-
trunk/vendor-prefixed/symfony/service-contracts/ServiceSubscriberTrait.php (added)
-
trunk/vendor-prefixed/symfony/service-contracts/composer.json (added)
Legend:
- Unmodified
- Added
- Removed
-
alpaca-bot/assets/icon-128x128.png
-
Property svn:mime-type
changed from
application/octet-streamtoimage/png
-
Property svn:mime-type
changed from
-
alpaca-bot/assets/icon-256x256.png
-
Property svn:mime-type
changed from
application/octet-streamtoimage/png
-
Property svn:mime-type
changed from
-
alpaca-bot/assets/screenshot-1.png
-
Property svn:mime-type
changed from
application/octet-streamtoimage/png
-
Property svn:mime-type
changed from
-
alpaca-bot/assets/screenshot-2.png
-
Property svn:mime-type
changed from
application/octet-streamtoimage/png
-
Property svn:mime-type
changed from
-
alpaca-bot/assets/screenshot-3.png
-
Property svn:mime-type
changed from
application/octet-streamtoimage/png
-
Property svn:mime-type
changed from
-
alpaca-bot/tags/0.5.0/alpaca-bot.php
r3113345 r3690657 3 3 Plugin Name: Alpaca Bot 4 4 Plugin URI: https://github.com/carmelosantana/alpaca-bot 5 Description: A privately hosted WordPress AI chatbot. 6 Version: 0. 4.175 Description: A privately hosted WordPress AI chatbot. Chat with your own models, ground answers in your site, and keep control of cost. 6 Version: 0.5.0 7 7 Author: Carmelo Santana 8 8 Author URI: https://carmelosantana.com/ 9 License: GNU General Public License v2 or later 10 License URI: http://www.gnu.org/licenses/gpl-2.0.html 11 Requires at least: 6.4 9 License: GPL-2.0-or-later 10 License URI: https://www.gnu.org/licenses/gpl-2.0.html 11 Text Domain: alpaca-bot 12 Requires at least: 6.9 13 Requires PHP: 8.4 12 14 */ 13 15 14 if (!defined('ABSPATH')) exit; // Exit if accessed directly 16 declare(strict_types=1); 15 17 16 // Defines 17 define('ALPACA_BOT', 'alpaca-bot'); 18 define('ALPACA_BOT_TITLE', 'Alpaca Bot'); 19 define('ALPACA_BOT_DIR_URL', plugin_dir_url(__FILE__)); 20 define('ALPACA_BOT_DIR_PATH', plugin_dir_path(__FILE__)); 18 if (!defined('ABSPATH')) { 19 exit; 20 } 21 21 22 // Composer 23 if (!file_exists($composer = plugin_dir_path(__FILE__) . 'vendor/autoload.php')) { 24 // display error message when activating plugin 25 trigger_error( 26 sprintf( 27 /* translators: %s: plugin name */ 28 esc_html__('Error locating %s autoloader. Please run <code>composer install</code>.', 'alpaca-bot'), 29 esc_html__('Alpaca Bot', 'alpaca-bot') 30 ), 31 E_USER_ERROR 32 ); 22 if (PHP_VERSION_ID < 80400) { 23 add_action('admin_notices', static function (): void { 24 echo '<div class="notice notice-error"><p>' . esc_html__('Alpaca Bot 0.5 requires PHP 8.4 or newer. The plugin is inactive.', 'alpaca-bot') . '</p></div>'; 25 }); 26 return; 33 27 } 34 require $composer;35 28 36 add_action('plugins_loaded', function () { 37 new \AlpacaBot\AlpacaBot(); 38 }, 9); 29 define('ALPACA_BOT_FILE', __FILE__); 30 define('ALPACA_BOT_DIR', plugin_dir_path(__FILE__)); 31 define('ALPACA_BOT_URL', plugin_dir_url(__FILE__)); 32 33 // The plugin's own classes: a PSR-4 loader for AlpacaBot\ over src/, registered here rather 34 // than by requiring vendor/autoload.php. Composer's autoloader is dev/test only (tests/Pest.php 35 // loads it): at runtime it would register every third-party namespace unprefixed (php-agents, 36 // commonmark, symfony, psr) next to the strauss-prefixed copies and eagerly require the vendor 37 // polyfill bootstraps and function files, on every request, for every other plugin on the site 38 // to collide with. That is the conflict vendor-prefixed/ exists to prevent. 39 spl_autoload_register(static function (string $class): void { 40 if (!str_starts_with($class, 'AlpacaBot\\') || str_starts_with($class, 'AlpacaBot\\Vendor\\')) { 41 return; 42 } 43 $file = ALPACA_BOT_DIR . 'src/' . strtr(substr($class, strlen('AlpacaBot\\')), '\\', '/') . '.php'; 44 if (is_file($file)) { 45 require $file; 46 } 47 }); 48 49 // Third-party code, prefixed under AlpacaBot\Vendor\ by strauss (composer install builds it on 50 // a dev checkout; the release zip ships it). This is the only autoloader file the runtime loads. 51 $alpaca_bot_prefixed = ALPACA_BOT_DIR . 'vendor-prefixed/autoload.php'; 52 if (!is_readable($alpaca_bot_prefixed)) { 53 add_action('admin_notices', static function (): void { 54 echo '<div class="notice notice-error"><p>' . esc_html__('Alpaca Bot: vendor-prefixed/ is missing. Run composer install (dev checkout) or reinstall the release zip.', 'alpaca-bot') . '</p></div>'; 55 }); 56 return; 57 } 58 require_once $alpaca_bot_prefixed; 59 60 \AlpacaBot\Plugin::boot(); 61 register_deactivation_hook(__FILE__, [\AlpacaBot\Plugin::class, 'deactivate']); -
alpaca-bot/tags/0.5.0/assets/css/alpaca-bot.css
r3075126 r3690657 1 :root { 2 /* Colors */ 3 --chat-container-bg: #FFFFFF; 4 --chat-textarea-bg: #F7F7F8; 5 --console: #1EFF00; 6 --lighter-gray: #D9D9E3; 7 8 /* WordPress colors */ 9 --wp-blue: #0073aa; 10 --wp-menu-blue: #2271b1; 11 --wp-medium-blue: #00a0d2; 12 --wp-ultra-dark-gray: #191e23; 13 --wp-dark-gray: #23282d; 14 --wp-base-gray: #32373c; 15 --wp-dark-silver-gray: #82878c; 16 --wp-silver-gray: #a0a5aa; 17 --wp-light-silver-gray: #b4b9be; 18 --wp-accent-red: #dc3232; 19 --wp-accent-orange: #f56e28; 20 --wp-accent-yellow: #ffb900; 21 --wp-accent-green: #46B450; 22 --wp-accent-purple: #826eb4; 23 24 /* Size */ 25 --max-container-width: 800px; 26 } 27 28 /* Basic animation */ 29 .fadeIn { 30 visibility: visible; 31 opacity: 1; 32 transition: opacity 0.33s ease-in-out; 33 } 34 35 .fadeOut { 36 visibility: hidden; 37 opacity: 0; 38 transition: visibility 0s 2.6s, opacity 2.6s ease-in-out; 39 } 40 41 .keyframesFadeOut { 42 animation: fadeOut 2.6s; 43 } 44 45 @keyframes fadeOut { 46 0% { 47 opacity: 1; 48 } 49 50 100% { 51 opacity: 0; 52 } 53 } 54 55 /* https://stackoverflow.com/a/17260048/1007492 */ 56 .clipOut { 57 clip: rect(auto, auto, 0, auto); 58 transition-property: clip; 59 transition-duration: 0.46s; 60 transition-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1.275); 61 } 62 63 .maxHeightOut { 64 max-height: 0; 65 transition: max-height 0.26s ease-out; 66 overflow: hidden; 67 } 68 69 /* https://jsfiddle.net/dotnetCarpenter/PhyQc/9/ */ 70 .scaleY { 71 -webkit-transform: scaleY(0); 72 -o-transform: scaleY(0); 73 -ms-transform: scaleY(0); 74 transform: scaleY(0); 75 76 -webkit-transform-origin: top; 77 -o-transform-origin: top; 78 -ms-transform-origin: top; 79 transform-origin: top; 80 81 -webkit-transition: -webkit-transform 0.26s ease-out; 82 -o-transition: -o-transform 0.26s ease; 83 -ms-transition: -ms-transform 0.26s ease; 84 transition: transform 0.26s ease; 85 } 86 87 /* https://stackoverflow.com/a/30531678/1007492 */ 88 .shrinkOut { 89 margin: 0; 90 opacity: 0; 91 padding: 0; 92 /* fade out, then shrink */ 93 transition: opacity .25s, 94 font-size .5s .25s, 95 margin .5s .25s, 96 visibility 0s 2s, 97 padding .5s .25s; 98 } 99 100 /* Custom admin menu icons */ 101 #toplevel_page_alpaca-bot .wp-menu-image>img { 102 width: 20px; 103 height: 20px; 104 filter: invert(100%); 105 } 106 107 /* Primary wrap */ 108 #ab-chat-container { 109 min-height: 61vh; 110 } 111 112 /* Welcome message */ 113 #ab-hello p { 114 color: #646970; 115 font-size: 1.5rem; 116 font-style: normal; 117 margin: 0; 118 text-align: center; 119 } 120 121 #ab-hello img { 122 padding: 2em; 123 display: block; 124 margin: 0 auto; 125 width: 128px; 126 height: 128px; 127 border-radius: 50%; 128 } 129 130 /* Loading indicator */ 131 #indicator { 132 padding: 2em; 133 display: block; 134 margin: 1em auto; 135 width: 28px; 136 height: 28px; 137 } 138 139 /* Toolbar (model select, chat history select) */ 140 .ab-toolbar { 141 min-height: 40px; 142 margin: 20px 0 30px 0; 143 } 144 145 .ab-toolbar select { 146 font-size: 1.1em; 147 width: 240px; 148 height: 35px; 149 border: 1px solid var(--wp-light-silver-gray); 150 border-radius: 5px; 151 vertical-align: top; 152 } 153 154 .ab-toolbar p { 155 display: block; 156 margin: 0.75em 0 0 0.5em; 157 font-size: .95em; 158 color: var(--wp-base-gray); 159 } 160 161 .ab-toolbar #set_default_model:hover { 162 color: var(--wp-blue); 163 cursor: pointer; 164 } 165 166 .ab-toolbar .ab-tags { 167 float: left; 168 } 169 170 .ab-toolbar .ab-chat-logs, 171 #set_default_model { 172 float: right; 173 } 174 175 .ab-toolbar p, 176 .ab-toolbar select { 177 display: inline-block; 178 } 179 180 .ab-toolbar p { 181 margin-right: .5em; 182 } 183 184 #ab-response { 185 max-width: var(--max-container-width); 186 margin: 0 auto; 187 } 188 189 .toplevel_page_alpaca-bot #wpfooter #footer-left { 190 color: var(--wp-silver-gray); 191 font-size: .75rem; 192 } 193 194 .htmx-indicator { 195 display: none; 196 } 197 198 .htmx-request .htmx-indicator, 199 .htmx-request.htmx-indicator { 200 display: inline; 201 } 202 203 .ab-chat-message { 204 margin: .6em 0; 205 } 206 207 .ab-chat-message-response, 208 .ab-chat-message-response div, 209 .ab-chat-message-response p { 210 line-height: 1.31rem; 211 } 212 213 .ab-chat-message-response p { 214 margin: .7rem 0; 215 } 216 217 .ab-chat-message .notice { 218 margin: 1em 0; 219 } 220 221 .ab-chat-message-response img { 222 display: block; 223 margin: 0 auto; 224 border-radius: 4px; 225 width: 200px; 226 } 227 228 /* gravatar column should stretch to the bottom, forcing all elements to line up against */ 229 .ab-chat-message-gravatar { 230 float: left; 231 height: 100%; 232 margin-right: 1em; 233 } 234 235 .ab-chat-message-gravatar img { 236 width: 38px; 237 height: 38px; 238 border-radius: 50%; 239 } 240 241 .ab-chat-message-parts { 242 margin-left: 38px; 1 /* 2 * Alpaca Bot chat shell (0.5). Every selector here is emitted by src/View/Chat/*, 3 * src/View/Icon.php, or resources/ts/{chat,dom,highlight}.ts; the markdown elements are 4 * Markdown::allowedTags(). The accent comes from core's --wp-admin-theme-color and its 5 * derivatives, set on <body> for every admin colour scheme, so the screen follows whichever 6 * one the user picked; the Default scheme's values stand behind them as fallbacks so a missing 7 * variable cannot blank a control -- which is also what makes the file usable off wp-admin, 8 * where none of those variables exist. The surfaces, text and borders are core's fixed greys, 9 * which do not change between schemes. 10 * 11 * Two places load this, and one of them is not wp-admin: the admin chat screen 12 * (Admin\Assets::enqueue()) and a front-end page carrying `[alpacabot]` with no prompt 13 * (Admin\Assets::enqueueFront()). Everything below is shared but the height arithmetic on 14 * .ab-wrap, which subtracts wp-admin's chrome from the viewport, and one narrow-screen rule on 15 * `.wrap.ab-wrap` that serves it; the front end has no #wpfooter and the shell there is a block 16 * inside a page rather than the whole screen, so .ab-wrap--front (near the foot of this file) 17 * replaces the height, and has no .wrap for the other rule to match. View\Chat\Shell puts that 18 * modifier on, and leaves core's .wrap off, for a shell it was told is not on the admin screen. 19 */ 20 21 .ab-wrap { 22 /* The fallbacks are core's Default scheme; without one a missing variable would blank the send button. */ 23 --ab-accent: var(--wp-admin-theme-color, #2271b1); 24 --ab-accent-dark: var(--wp-admin-theme-color-darker-10, #135e96); 25 --ab-accent-rgb: var(--wp-admin-theme-color--rgb, 34, 113, 177); 26 --ab-focus-width: var(--wp-admin-border-width-focus, 2px); 27 --ab-surface: #f0f0f1; 28 --ab-panel: #fff; 29 --ab-text: #1d2327; 30 --ab-muted: #646970; 31 --ab-border: #c3c4c7; 32 --ab-code-bg: #1d2327; 33 --ab-code-text: #f0f0f1; 34 --ab-max: 800px; 35 --ab-admin-bar: 32px; 36 /* #wpbody-content's padding-bottom, where core parks #wpfooter. */ 37 --ab-footer: 65px; 38 /* What sits between the admin bar and the wrap's top edge besides the margin moved inside below: nothing, until narrow screens put the Help tab's row there (#screen-meta-links, which core prints only for a screen with help tabs or screen options; here that is the tabs HelpTabs registers). */ 39 --ab-cleared: 0px; 243 40 display: flex; 244 41 flex-direction: column; 245 } 246 247 /* .ab-chat-message-tools needs to make space for gravatar on left 38px */ 248 .ab-chat-message-tools { 249 color: var(--wp-light-silver-gray); 250 margin: 1em 0; 251 justify-content: space-between; 252 transition: opacity 0.3s ease-in; 253 transition: opacity 0.1s ease-out; 254 } 255 256 /* increase opacity on tools when hovering over parent message */ 257 .ab-chat-message:hover .ab-chat-message-tools { 258 color: var(--wp-dark-gray); 259 } 260 261 /* transition tool span changes */ 262 .ab-chat-message-tools span.tools { 263 font-size: 1.25rem; 264 color: var(--wp-dark-silver-gray); 265 cursor: pointer; 266 transition: color 0.3s ease-in-out; 267 margin-right: .3em; 268 } 269 270 .ab-chat-message-tools span:hover { 271 color: var(--wp-dark-gray); 272 } 273 274 .ab-chat-message-tools span.rotate-push-pin { 275 transform: rotate(33deg); 276 } 277 278 .ab-chat-message-username { 279 font-size: 1.1em; 280 font-weight: bold; 281 line-height: 1.3em; 282 text-transform: capitalize; 283 } 284 285 .ab-chat-message-username .model { 286 color: var(--wp-silver-gray); 287 font-family: monospace; 288 font-size: .82em; 289 font-weight: normal; 290 text-transform: none; 291 margin-left: .33em; 292 } 293 294 .alpaca-bot-options p.description { 295 margin: .6em .3em; 296 } 297 298 .alpaca-bot-options p.description.inline { 299 display: inline; 300 } 301 302 .alpaca-bot-options p.description span { 303 vertical-align: middle; 304 margin-right: .1em; 305 position: relative; 306 display: inline-block; 307 } 308 309 .alpaca-bot-options p.description span.label-success { 310 color: #46B450; 311 } 312 313 .alpaca-bot-options p.description span.label-error { 314 color: #dc3232; 315 } 316 317 .alpaca-bot-options pre.console, 318 .toplevel_page_alpaca-bot .console { 319 background-color: var(--wp-ultra-dark-gray); 320 padding: 1em; 321 border-radius: 5px; 322 font-family: monospace; 323 font-weight: bold; 324 color: limegreen; 325 text-shadow: 0px 0px .8em var(--console); 326 cursor: pointer; 327 } 328 329 /* 330 Typing container styling 331 https://emma-delaney.medium.com/how-to-create-your-own-chatgpt-in-html-css-and-javascript-78e32b70b4be 332 */ 333 .typing-container { 334 position: -webkit-sticky; 335 position: sticky; 336 bottom: 1em; 337 width: calc(100% - 20px); 338 display: flex; 339 justify-content: center; 340 z-index: 10; 341 margin-top: 1em; 342 } 343 344 .typing-container .typing-content { 345 display: flex; 346 max-width: var(--max-container-width); 347 width: 100%; 348 align-items: flex-end; 349 } 350 351 .typing-container .typing-textarea { 352 width: 100%; 353 display: flex; 354 position: relative; 355 } 356 357 .typing-textarea textarea { 358 resize: none; 359 height: 42px; 360 width: 100%; 361 border: none; 362 padding: 10px 35px 5px 40px; 363 color: var(--wp-base-gray); 364 font-size: 1rem; 365 border-radius: 4px; 366 max-height: 250px; 367 overflow-y: auto; 368 background: var(--chat-textarea-bg); 369 outline: 1px solid var(--lighter-gray); 370 line-height: 1.3rem; 371 } 372 373 .typing-textarea textarea::placeholder { 374 color: var(--wp-dark-silver-gray); 375 } 376 377 /* clear all button styles in .typing-textarea */ 378 .typing-textarea button { 379 background: none; 380 border: none; 381 padding: 0; 382 margin: 0; 383 } 384 385 .typing-content button, 386 .typing-content span { 387 width: 43px; 388 height: 43px; 389 display: flex; 390 font-size: 1.4rem; 42 box-sizing: border-box; 43 height: calc(100vh - var(--ab-admin-bar) - var(--ab-cleared) - var(--ab-footer)); 44 /* .wrap's own 10px top margin, moved inside so the height above is the whole space; the narrow-screen block takes it back. */ 45 margin-top: 0; 46 padding-top: 10px; 47 color: var(--ab-text); 48 } 49 50 /* ---- header: title, "New chat", model + history selects -------------------------------- */ 51 .ab-header { 52 display: flex; 53 flex-wrap: wrap; 391 54 align-items: center; 392 justify-content: center; 393 color: var(--wp-silver-gray); 394 cursor: pointer; 395 } 396 397 .typing-textarea button, 398 .typing-textarea span { 399 position: absolute; 400 bottom: 0px; 401 color: var(--wp-light-silver-gray); 402 } 403 404 .typing-textarea button#submit { 405 right: 0; 406 407 } 408 409 .typing-textarea button#upload { 410 left: 0; 411 } 412 413 .typing-textarea button#upload_remove { 414 display: none; 415 } 416 417 .typing-textarea textarea:valid~button#submit, 418 .typing-textarea textarea:valid~span { 419 color: var(--wp-dark-silver-gray); 420 } 421 422 /* on hover and when disabled */ 423 .typing-textarea button:hover, 424 .typing-textarea span:hover { 425 color: var(--wp-blue); 426 } 427 428 /* if span has disabled="" */ 429 .typing-textarea button[disabled], 430 .typing-textarea span[disabled] { 431 color: var(--lighter-gray); 432 cursor: not-allowed; 433 } 434 435 #ab-hello { 55 gap: 8px 12px; 56 margin-bottom: 8px; 57 } 58 .ab-header__controls { display: flex; flex-wrap: wrap; gap: 8px; margin-left: auto; } 59 60 /* Core's notice mover (common.js) inserts page notices after this rule; keep them on their own row. */ 61 .ab-header .wp-header-end, .ab-header > .notice { flex-basis: 100%; margin: 0; } 62 .ab-select { width: 240px; max-width: 100%; } 63 .ab-select:focus-visible { 64 border-color: var(--ab-accent); 65 box-shadow: 0 0 0 1px var(--ab-accent); 66 outline: var(--ab-focus-width) solid transparent; 67 } 68 69 /* ---- transcript ------------------------------------------------------------------------ */ 70 #ab-chat { display: flex; flex: 1; flex-direction: column; min-height: 0; } 71 .ab-status .notice { max-width: var(--ab-max); margin: 8px auto; } 72 .ab-messages { flex: 1; min-height: 0; overflow-y: auto; padding: 4px 4px 12px; } 73 .ab-welcome { 436 74 display: flex; 437 75 flex-direction: column; … … 439 77 justify-content: center; 440 78 height: 100%; 441 width: 100%; 442 } 443 444 .alpaca-bot-options .accordion-btn { 445 background-color: var(--wp-dark-gray); 446 color: var(--lighter-gray); 79 text-align: center; 80 } 81 .ab-welcome__avatar { width: 128px; height: 128px; margin: 2em auto; border-radius: 50%; } 82 .ab-welcome__text { margin: 0; color: var(--ab-muted); font-size: 1.5rem; } 83 .ab-msg { 84 display: grid; 85 grid-template-columns: 36px 1fr; 86 gap: 12px; 87 max-width: var(--ab-max); 88 margin: 0 auto 20px; 89 } 90 .ab-msg__avatar { width: 36px; height: 36px; border-radius: 50%; } 91 /* Wrap anywhere on the whole body, so a long model id in the name or receipt cannot widen the column. */ 92 .ab-msg__body { min-width: 0; overflow-wrap: anywhere; } 93 .ab-msg__meta { 94 display: flex; 95 align-items: center; 96 gap: 8px; 97 min-height: 24px; 98 margin-bottom: 4px; 99 } 100 .ab-msg__name { font-weight: 600; } 101 102 /* The assistant's name is its model id. */ 103 .ab-msg--assistant .ab-msg__name { font-family: Consolas, Monaco, monospace; font-size: 13px; } 104 .ab-msg__actions { display: flex; gap: 2px; opacity: 0; transition: opacity 0.15s ease-out; } 105 .ab-msg:hover .ab-msg__actions, .ab-msg:focus-within .ab-msg__actions { opacity: 1; } 106 107 @media (hover: none) { 108 .ab-msg__actions { opacity: 1; } 109 } 110 111 .ab-msg__images { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 8px; } 112 .ab-msg__image { max-width: 200px; max-height: 200px; border: 1px solid var(--ab-border); border-radius: 4px; } 113 /* An image the store let go (MessageBubble's evicted marker): a dashed, muted note in the images row, not a broken image. */ 114 .ab-msg__evicted { display: inline-flex; align-items: center; padding: 8px 12px; border: 1px dashed var(--ab-border); border-radius: 4px; color: var(--ab-muted); font-size: 12px; } 115 .ab-receipt { margin-top: 4px; color: var(--ab-muted); font-size: 12px; } 116 117 /* ---- message content: the markdown allowlist, the highlighter, the stream ----------- */ 118 .ab-msg__content { font-size: 14px; line-height: 1.5; } 119 .ab-msg__content > :first-child { margin-top: 0; } 120 .ab-msg__content > :last-child { margin-bottom: 0; } 121 .ab-msg__content p, .ab-msg__content ul, .ab-msg__content ol, .ab-msg__content blockquote, .ab-msg__content pre, .ab-msg__content table { 122 margin: 0 0 0.75em; 123 } 124 .ab-msg__content :is(h1, h2, h3, h4, h5, h6) { margin: 1em 0 0.5em; padding: 0; font-weight: 600; line-height: 1.3; } 125 .ab-msg__content h1 { font-size: 1.4em; } 126 .ab-msg__content h2 { font-size: 1.25em; } 127 .ab-msg__content h3 { font-size: 1.1em; } 128 .ab-msg__content :is(h4, h5, h6) { font-size: 1em; } 129 .ab-msg__content ul, .ab-msg__content ol { padding-left: 1.5em; } 130 .ab-msg__content ul { list-style: disc; } 131 .ab-msg__content ol { list-style: decimal; } 132 .ab-msg__content blockquote { padding-left: 12px; border-left: 4px solid var(--ab-border); color: var(--ab-muted); } 133 .ab-msg__content hr { margin: 1em 0; border: 0; border-top: 1px solid var(--ab-border); } 134 .ab-msg__content img { max-width: 100%; height: auto; border-radius: 4px; } 135 .ab-msg__content table { display: block; max-width: 100%; overflow-x: auto; border-collapse: collapse; } 136 .ab-msg__content th, .ab-msg__content td { padding: 4px 8px; border: 1px solid var(--ab-border); text-align: left; } 137 .ab-msg__content th { background: var(--ab-surface); } 138 .ab-msg__content code { 139 padding: 2px 4px; 140 margin: 0; 141 background: rgba(0, 0, 0, 0.06); 142 border-radius: 3px; 143 font-size: 13px; 144 } 145 .ab-msg__content pre { 146 position: relative; 147 padding: 12px 44px 12px 12px; 148 background: var(--ab-code-bg); 149 color: var(--ab-code-text); 150 overflow: auto; 151 border-radius: 4px; 152 font-size: 13px; 153 line-height: 1.5; 154 } 155 .ab-msg__content pre code { display: block; padding: 0; background: none; color: inherit; } 156 pre > .ab-code__copy { position: absolute; top: 6px; right: 6px; color: var(--ab-border); } 157 pre > .ab-code__copy:hover { color: var(--ab-code-text); background: rgba(255, 255, 255, 0.12); } 158 pre > .ab-code__copy:focus-visible { outline-color: var(--ab-code-text); } 159 160 /* Highlighter tokens (resources/ts/highlight.ts) on the dark block, from core's palette. */ 161 .tok-cmt { color: #a7aaad; font-style: italic; } 162 .tok-str { color: #68de7c; } 163 .tok-kw { color: #72aee6; } 164 .tok-num { color: #f2d675; } 165 .tok-fn { color: #ff8085; } 166 167 /* Streamed deltas are raw text until the server's rendering replaces the bubble; a reply the 168 stream left partial (chat.ts settle()) keeps them as they are, without the caret. */ 169 [data-streaming="1"] .ab-msg__content, 170 [data-partial="1"] .ab-msg__content { white-space: pre-wrap; } 171 [data-streaming="1"] .ab-msg__content::after { 172 content: ""; 173 display: inline-block; 174 width: 2px; 175 height: 1em; 176 margin-left: 2px; 177 vertical-align: -0.15em; 178 background: currentColor; 179 animation: ab-blink 1s steps(2, start) infinite; 180 } 181 182 @keyframes ab-blink { 183 to { visibility: hidden; } 184 } 185 186 .ab-msg__reasoning { margin-bottom: 8px; color: var(--ab-muted); font-size: 13px; } 187 .ab-msg__reasoning summary { cursor: pointer; } 188 .ab-msg__reasoning-text { max-height: 12em; margin-top: 4px; overflow-y: auto; } 189 190 /* ---- composer -------------------------------------------------------------------------- */ 191 192 /* Sticky is for iOS, where 100vh overshoots the visible viewport: the row stays in view as the page scrolls. */ 193 .ab-composer { position: sticky; bottom: 0; padding-top: 8px; } 194 .ab-composer__row { 195 display: flex; 196 align-items: flex-end; 197 gap: 6px; 198 max-width: var(--ab-max); 199 margin: 0 auto; 200 padding: 4px; 201 background: var(--ab-panel); 202 border: 1px solid var(--ab-border); 203 border-radius: 4px; 204 } 205 .ab-composer__row:focus-within { border-color: var(--ab-accent); box-shadow: 0 0 0 1px var(--ab-accent); } 206 .ab-composer textarea { 207 flex: 1; 208 box-sizing: border-box; 209 min-height: 36px; 210 max-height: 250px; 211 margin: 0; 212 padding: 8px; 213 border: 0; 214 background: transparent; 215 box-shadow: none; 216 color: var(--ab-text); 217 font-size: 14px; 218 line-height: 1.4; 219 resize: none; 220 } 221 222 /* The row's ring is the focus indicator; core's own textarea ring would double it. */ 223 .ab-composer textarea:focus { outline: 0; box-shadow: none; } 224 .ab-composer__buttons { display: flex; align-items: center; gap: 4px; } 225 .ab-composer__preview { height: 40px; width: auto; border-radius: 4px; } 226 227 /* ---- buttons and icons ----------------------------------------------------------------- */ 228 .ab-icon { width: 1.25em; height: 1.25em; vertical-align: -0.25em; } 229 .ab-btn, .ab-msg__action { 230 position: relative; 231 display: inline-flex; 232 align-items: center; 233 justify-content: center; 234 width: 36px; 235 height: 36px; 236 margin: 0; 237 padding: 0; 238 border: 0; 239 border-radius: 4px; 240 background: none; 241 color: var(--ab-muted); 242 font-size: 16px; 243 line-height: 1; 447 244 cursor: pointer; 448 padding: 18px; 449 width: 100%; 450 border: none; 451 text-align: left; 452 outline: none; 453 font-size: 15px; 454 transition: 0.4s; 455 display: flex; 456 align-items: center; 457 border-bottom: 1px solid var(--wp-ultra-dark-gray); 458 } 459 460 .alpaca-bot-options .accordion-btn code { 461 margin-right: .5em; 462 } 463 464 .alpaca-bot-options .panel code { 465 padding: 0; 466 } 467 468 .ab-accordian .active, 469 .alpaca-bot-options .accordion-btn:hover { 470 background-color: var(--wp-blue); 471 color: var(--chat-container-bg); 472 border-bottom: 1px solid var(--wp-medium-blue); 473 } 474 475 .alpaca-bot-options .accordion-btn:after { 476 content: '\002B'; 477 color: var(--wp-light-silver-gray); 478 font-weight: bold; 479 margin-left: auto; 480 } 481 482 .ab-accordian .active:after { 483 content: "\2212"; 484 } 485 486 .alpaca-bot-options .panel { 487 padding: 0 18px; 488 background-color: var(--chat-textarea-bg); 489 max-height: 0; 490 overflow: hidden; 491 transition: max-height 0.2s ease-out; 492 } 493 494 .alpaca-bot-options .panel ul a { 495 text-decoration: none; 496 } 497 498 .alpaca-bot-shortcode-processed { 499 font-size: .8em; 500 background-color: var(--wp-ultra-dark-gray); 501 margin: .8em 0; 502 padding: .4em .6em; 503 border-radius: 5px; 504 font-family: monospace; 505 font-weight: bold; 506 color: var(--console); 507 text-shadow: 0px 0px .7em var(--console); 508 cursor: pointer; 509 } 510 511 /* The container <div> - needed to position the dropdown content */ 512 .ab-dropdown { 513 position: relative; 514 display: inline-block; 515 } 516 517 /* Dropdown Content (Hidden by Default) */ 518 .ab-dropdown-content { 519 display: none; 245 } 246 .ab-btn[hidden] { display: none; } 247 .ab-msg__action { width: 28px; height: 28px; font-size: 14px; } 248 .ab-btn--icon:hover, .ab-msg__action:hover { color: var(--ab-accent); background: rgba(var(--ab-accent-rgb), 0.1); } 249 .ab-btn:focus-visible, .ab-msg__action:focus-visible, .ab-msg__reasoning summary:focus-visible { 250 outline: var(--ab-focus-width) solid var(--ab-accent); 251 outline-offset: 2px; 252 } 253 254 /* Send (Kanboard #566): resting, hover, focus and disabled each read differently. */ 255 .ab-btn--send { background: var(--ab-accent); color: #fff; } 256 .ab-btn--send:hover { background: var(--ab-accent-dark); } 257 .ab-btn--send:focus-visible { background: var(--ab-accent-dark); box-shadow: 0 0 0 2px var(--ab-panel); } 258 .ab-btn--send:disabled { background: var(--ab-border); color: var(--ab-panel); cursor: not-allowed; } 259 260 /* Tooltips: the aria-label of an icon-only button, on hover, for sighted mouse users. */ 261 .ab-btn--icon[aria-label]:hover::after, .ab-btn--send[aria-label]:hover::after, .ab-msg__action[aria-label]:hover::after { 262 content: attr(aria-label); 520 263 position: absolute; 521 background-color: var(--chat-textarea-bg); 522 min-width: 260px; 523 box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.15); 524 z-index: 1; 525 border-radius: 4px; 526 } 527 528 /* Links inside the dropdown */ 529 .ab-dropdown-content a { 530 padding: 12px 16px; 531 text-decoration: none; 532 display: block; 533 } 534 535 .ab-dropdown-content a strong { 536 color: var(--wp-dark-gray); 537 } 538 539 .ab-dropdown-content a p { 540 color: var(--wp-dark-silver-gray); 541 font-size: .9em; 542 margin: .2em 0; 543 } 544 545 /* Change color of dropdown links on hover */ 546 .ab-dropdown-content a:hover { 547 color: var(--wp-dark-gray); 548 background-color: var(--chat-container-bg); 549 border-radius: 4px; 550 } 551 552 /* Show the dropdown menu on hover */ 553 .ab-dropdown:hover .ab-dropdown-content { 554 display: block; 555 } 556 557 /* reduce the size of google icons in span tags inside of dropdown-content */ 558 .ab-dropdown-content span { 559 float: left; 560 font-size: 1.33em; 561 margin-right: .5em; 562 } 563 564 /* reduce p padding */ 565 .ab-dropdown-content p { 566 margin: .5em 0; 567 } 568 569 .page-title-action span { 570 font-size: 1.2em; 571 margin-left: .2em; 572 width: .9em; 573 vertical-align: middle; 574 } 575 576 /* reduce text size for hint.css tooltop */ 577 [class*=hint--]:after { 578 font-size: .8rem !important; 579 } 580 581 /* Responsive Media Query */ 582 @media screen and (max-width: 781px) { 583 .typing-container { 584 position: fixed; 585 bottom: 10px; 586 width: calc(100% - 20px); 587 } 588 589 .ab-toolbar { 590 display: flex; 591 flex-direction: column; 592 justify-content: center; 593 width: 100%; 594 margin-bottom: 1em; 595 } 596 597 .ab-toolbar div { 598 margin: 0.5em 0; 599 } 600 601 .ab-toolbar code, 602 .ab-toolbar select { 603 float: right; 604 } 605 606 #set_default_model { 607 display: none; 608 } 609 610 .ab-chat-message-username { 611 font-size: 1.15em; 612 line-height: 1.4em; 613 } 614 615 .ab-chat-message-username, 616 .ab-chat-message-username .model { 617 margin-bottom: 0; 618 } 619 620 .ab-chat-message-parts, 621 .ab-chat-message-tools { 622 margin-left: 0; 623 } 624 625 .ab-chat-message-response { 626 font-size: 1.25em; 627 line-height: 1.4em; 628 margin-top: 0; 629 } 630 } 631 632 @media screen and (max-width: 360px) { 633 .ab-toolbar select { 634 margin-top: 0em; 635 width: 100%; 636 } 637 } 638 639 @media screen and (max-width: 255px) { 640 .ab-toolbar { 641 margin-top: 0em; 642 } 643 644 #ab-chat-container .page-title-action { 645 width: 100%; 646 } 647 } 264 bottom: calc(100% + 6px); 265 left: 50%; 266 transform: translateX(-50%); 267 z-index: 10; 268 padding: 4px 8px; 269 border-radius: 3px; 270 background: var(--ab-text); 271 color: var(--ab-panel); 272 font-size: 12px; 273 line-height: 1.4; 274 white-space: nowrap; 275 pointer-events: none; 276 } 277 278 /* A turn's actions sit at the top of its bubble, and the first bubble at the scroller's edge, so the 279 tooltip goes below the button, as 0.4's tooltips did. */ 280 .ab-msg__action[aria-label]:hover::after { top: calc(100% + 6px); bottom: auto; } 281 282 /* Inside a scrolling <pre> a tooltip above the button would be clipped; put it to the left. */ 283 pre > .ab-code__copy[aria-label]:hover::after { 284 top: 50%; 285 right: calc(100% + 6px); 286 bottom: auto; 287 left: auto; 288 transform: translateY(-50%); 289 } 290 291 /* ---- the same shell on a front-end page -------------------------------------------------- */ 292 293 /* 294 * One rule, because one rule is all .ab-wrap assumes that a `[alpacabot]` page does not have: 295 * that the shell owns the viewport, less wp-admin's admin bar and #wpfooter. On a page the shell 296 * is a block in the middle of the content, and neither the subtraction nor the intent survives 297 * -- a shell sized to the screen pushes everything after it out of reach, and #wpfooter is not 298 * on the page to subtract. A bounded box instead. This replaces the height outright rather than 299 * zeroing --ab-footer, so the narrow-screen block below, which retunes those variables for 300 * wp-admin, has nothing to say here either, nor does its `.wrap.ab-wrap` rule, since this shell 301 * has no .wrap. Everything else in this file works on both: the 302 * variables all carry fallbacks for the admin colour scheme that is not there, `.ab-status 303 * .notice` is what dom.ts writes on either surface, `.wp-header-end` is Header's own <hr>, and 304 * `.ab-header > .notice` is the one rule that only wp-admin can trigger -- core's notice mover 305 * -- which costs a front-end page a selector that matches nothing. What this file does *not* 306 * carry is core's own admin chrome: `.page-title-action` is styled by wp-admin's stylesheet, so 307 * "New chat" is a plain link on a front-end shell. 308 */ 309 .ab-wrap--front { 310 height: min(70vh, 640px); 311 } 312 313 /* ---- narrow screens (core's own admin breakpoint) --------------------------------------- */ 314 315 @media screen and (max-width: 782px) { 316 /* 317 * Core's narrow layout: a taller admin bar, 100px under #wpbody-content in place of the footer, and the 318 * Screen Options / Help tabs on a row of their own above the title: core's `.wrap { clear: both }` at this 319 * breakpoint (wp-admin/css/common.css) drops the wrap under the floated #screen-meta-links, 40px of 320 * buttons plus the 20px bottom margin core gives it here, so 60px of the viewport goes to that row. 321 */ 322 .ab-wrap { --ab-admin-bar: 46px; --ab-footer: 100px; --ab-cleared: 60px; } 323 /* 324 * The clearance sets the wrap's border edge under the float and swallows its top margin (CSS 2.1 9.5.2), 325 * which is why core's own h1 sits flush with its wrap here; the padding standing in for that margin is 326 * inside the border edge, survives the clearance, and is 10px core does not have, so it goes with the 327 * margin. On `.wrap.ab-wrap` because it is core's .wrap that clears: the front shell has no .wrap and no 328 * #screen-meta-links to clear, and keeps its padding. 329 */ 330 .wrap.ab-wrap { padding-top: 0; } 331 .ab-header__controls { flex-basis: 100%; flex-direction: column; margin-left: 0; } 332 .ab-select { width: 100%; } 333 .ab-msg { grid-template-columns: 32px 1fr; gap: 8px; } 334 .ab-msg__avatar { width: 32px; height: 32px; } 335 336 /* 16px keeps iOS from zooming the page when the box takes focus, as core does for its inputs. */ 337 .ab-composer textarea { font-size: 16px; } 338 } 339 340 @media (prefers-reduced-motion: reduce) { 341 .ab-msg__actions { transition: none; } 342 [data-streaming="1"] .ab-msg__content::after { animation: none; } 343 } -
alpaca-bot/tags/0.5.0/assets/js/htmx.min.js
r3075126 r3690657 1 (function(e,t){if(typeof define==="function"&&define.amd){define([],t)}else if(typeof module==="object"&&module.exports){module.exports=t()}else{e.htmx=e.htmx||t()}})(typeof self!=="undefined"?self:this,function(){return function(){"use strict";var Q={onLoad:B,process:zt,on:de,off:ge,trigger:ce,ajax:Nr,find:C,findAll:f,closest:v,values:function(e,t){var r=dr(e,t||"post");return r.values},remove:_,addClass:z,removeClass:n,toggleClass:$,takeClass:W,defineExtension:Ur,removeExtension:Fr,logAll:V,logNone:j,logger:null,config:{historyEnabled:true,historyCacheSize:10,refreshOnHistoryMiss:false,defaultSwapStyle:"innerHTML",defaultSwapDelay:0,defaultSettleDelay:20,includeIndicatorStyles:true,indicatorClass:"htmx-indicator",requestClass:"htmx-request",addedClass:"htmx-added",settlingClass:"htmx-settling",swappingClass:"htmx-swapping",allowEval:true,allowScriptTags:true,inlineScriptNonce:"",attributesToSettle:["class","style","width","height"],withCredentials:false,timeout:0,wsReconnectDelay:"full-jitter",wsBinaryType:"blob",disableSelector:"[hx-disable], [data-hx-disable]",useTemplateFragments:false,scrollBehavior:"smooth",defaultFocusScroll:false,getCacheBusterParam:false,globalViewTransitions:false,methodsThatUseUrlParams:["get"],selfRequestsOnly:false,ignoreTitle:false,scrollIntoViewOnBoost:true,triggerSpecsCache:null},parseInterval:d,_:t,createEventSource:function(e){return new EventSource(e,{withCredentials:true})},createWebSocket:function(e){var t=new WebSocket(e,[]);t.binaryType=Q.config.wsBinaryType;return t},version:"1.9.11"};var r={addTriggerHandler:Lt,bodyContains:se,canAccessLocalStorage:U,findThisElement:xe,filterValues:yr,hasAttribute:o,getAttributeValue:te,getClosestAttributeValue:ne,getClosestMatch:c,getExpressionVars:Hr,getHeaders:xr,getInputValues:dr,getInternalData:ae,getSwapSpecification:wr,getTriggerSpecs:it,getTarget:ye,makeFragment:l,mergeObjects:le,makeSettleInfo:T,oobSwap:Ee,querySelectorExt:ue,selectAndSwap:je,settleImmediately:nr,shouldCancel:ut,triggerEvent:ce,triggerErrorEvent:fe,withExtensions:R};var w=["get","post","put","delete","patch"];var i=w.map(function(e){return"[hx-"+e+"], [data-hx-"+e+"]"}).join(", ");var S=e("head"),q=e("title"),H=e("svg",true);function e(e,t=false){return new RegExp(`<${e}(\\s[^>]*>|>)([\\s\\S]*?)<\\/${e}>`,t?"gim":"im")}function d(e){if(e==undefined){return undefined}let t=NaN;if(e.slice(-2)=="ms"){t=parseFloat(e.slice(0,-2))}else if(e.slice(-1)=="s"){t=parseFloat(e.slice(0,-1))*1e3}else if(e.slice(-1)=="m"){t=parseFloat(e.slice(0,-1))*1e3*60}else{t=parseFloat(e)}return isNaN(t)?undefined:t}function ee(e,t){return e.getAttribute&&e.getAttribute(t)}function o(e,t){return e.hasAttribute&&(e.hasAttribute(t)||e.hasAttribute("data-"+t))}function te(e,t){return ee(e,t)||ee(e,"data-"+t)}function u(e){return e.parentElement}function re(){return document}function c(e,t){while(e&&!t(e)){e=u(e)}return e?e:null}function L(e,t,r){var n=te(t,r);var i=te(t,"hx-disinherit");if(e!==t&&i&&(i==="*"||i.split(" ").indexOf(r)>=0)){return"unset"}else{return n}}function ne(t,r){var n=null;c(t,function(e){return n=L(t,e,r)});if(n!=="unset"){return n}}function h(e,t){var r=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.oMatchesSelector;return r&&r.call(e,t)}function A(e){var t=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i;var r=t.exec(e);if(r){return r[1].toLowerCase()}else{return""}}function s(e,t){var r=new DOMParser;var n=r.parseFromString(e,"text/html");var i=n.body;while(t>0){t--;i=i.firstChild}if(i==null){i=re().createDocumentFragment()}return i}function N(e){return/<body/.test(e)}function l(e){var t=!N(e);var r=A(e);var n=e;if(r==="head"){n=n.replace(S,"")}if(Q.config.useTemplateFragments&&t){var i=s("<body><template>"+n+"</template></body>",0);var a=i.querySelector("template").content;if(Q.config.allowScriptTags){oe(a.querySelectorAll("script"),function(e){if(Q.config.inlineScriptNonce){e.nonce=Q.config.inlineScriptNonce}e.htmxExecuted=navigator.userAgent.indexOf("Firefox")===-1})}else{oe(a.querySelectorAll("script"),function(e){_(e)})}return a}switch(r){case"thead":case"tbody":case"tfoot":case"colgroup":case"caption":return s("<table>"+n+"</table>",1);case"col":return s("<table><colgroup>"+n+"</colgroup></table>",2);case"tr":return s("<table><tbody>"+n+"</tbody></table>",2);case"td":case"th":return s("<table><tbody><tr>"+n+"</tr></tbody></table>",3);case"script":case"style":return s("<div>"+n+"</div>",1);default:return s(n,0)}}function ie(e){if(e){e()}}function I(e,t){return Object.prototype.toString.call(e)==="[object "+t+"]"}function k(e){return I(e,"Function")}function P(e){return I(e,"Object")}function ae(e){var t="htmx-internal-data";var r=e[t];if(!r){r=e[t]={}}return r}function M(e){var t=[];if(e){for(var r=0;r<e.length;r++){t.push(e[r])}}return t}function oe(e,t){if(e){for(var r=0;r<e.length;r++){t(e[r])}}}function X(e){var t=e.getBoundingClientRect();var r=t.top;var n=t.bottom;return r<window.innerHeight&&n>=0}function se(e){if(e.getRootNode&&e.getRootNode()instanceof window.ShadowRoot){return re().body.contains(e.getRootNode().host)}else{return re().body.contains(e)}}function D(e){return e.trim().split(/\s+/)}function le(e,t){for(var r in t){if(t.hasOwnProperty(r)){e[r]=t[r]}}return e}function E(e){try{return JSON.parse(e)}catch(e){b(e);return null}}function U(){var e="htmx:localStorageTest";try{localStorage.setItem(e,e);localStorage.removeItem(e);return true}catch(e){return false}}function F(t){try{var e=new URL(t);if(e){t=e.pathname+e.search}if(!/^\/$/.test(t)){t=t.replace(/\/+$/,"")}return t}catch(e){return t}}function t(e){return Tr(re().body,function(){return eval(e)})}function B(t){var e=Q.on("htmx:load",function(e){t(e.detail.elt)});return e}function V(){Q.logger=function(e,t,r){if(console){console.log(t,e,r)}}}function j(){Q.logger=null}function C(e,t){if(t){return e.querySelector(t)}else{return C(re(),e)}}function f(e,t){if(t){return e.querySelectorAll(t)}else{return f(re(),e)}}function _(e,t){e=p(e);if(t){setTimeout(function(){_(e);e=null},t)}else{e.parentElement.removeChild(e)}}function z(e,t,r){e=p(e);if(r){setTimeout(function(){z(e,t);e=null},r)}else{e.classList&&e.classList.add(t)}}function n(e,t,r){e=p(e);if(r){setTimeout(function(){n(e,t);e=null},r)}else{if(e.classList){e.classList.remove(t);if(e.classList.length===0){e.removeAttribute("class")}}}}function $(e,t){e=p(e);e.classList.toggle(t)}function W(e,t){e=p(e);oe(e.parentElement.children,function(e){n(e,t)});z(e,t)}function v(e,t){e=p(e);if(e.closest){return e.closest(t)}else{do{if(e==null||h(e,t)){return e}}while(e=e&&u(e));return null}}function g(e,t){return e.substring(0,t.length)===t}function G(e,t){return e.substring(e.length-t.length)===t}function J(e){var t=e.trim();if(g(t,"<")&&G(t,"/>")){return t.substring(1,t.length-2)}else{return t}}function Z(e,t){if(t.indexOf("closest ")===0){return[v(e,J(t.substr(8)))]}else if(t.indexOf("find ")===0){return[C(e,J(t.substr(5)))]}else if(t==="next"){return[e.nextElementSibling]}else if(t.indexOf("next ")===0){return[K(e,J(t.substr(5)))]}else if(t==="previous"){return[e.previousElementSibling]}else if(t.indexOf("previous ")===0){return[Y(e,J(t.substr(9)))]}else if(t==="document"){return[document]}else if(t==="window"){return[window]}else if(t==="body"){return[document.body]}else{return re().querySelectorAll(J(t))}}var K=function(e,t){var r=re().querySelectorAll(t);for(var n=0;n<r.length;n++){var i=r[n];if(i.compareDocumentPosition(e)===Node.DOCUMENT_POSITION_PRECEDING){return i}}};var Y=function(e,t){var r=re().querySelectorAll(t);for(var n=r.length-1;n>=0;n--){var i=r[n];if(i.compareDocumentPosition(e)===Node.DOCUMENT_POSITION_FOLLOWING){return i}}};function ue(e,t){if(t){return Z(e,t)[0]}else{return Z(re().body,e)[0]}}function p(e){if(I(e,"String")){return C(e)}else{return e}}function ve(e,t,r){if(k(t)){return{target:re().body,event:e,listener:t}}else{return{target:p(e),event:t,listener:r}}}function de(t,r,n){jr(function(){var e=ve(t,r,n);e.target.addEventListener(e.event,e.listener)});var e=k(r);return e?r:n}function ge(t,r,n){jr(function(){var e=ve(t,r,n);e.target.removeEventListener(e.event,e.listener)});return k(r)?r:n}var pe=re().createElement("output");function me(e,t){var r=ne(e,t);if(r){if(r==="this"){return[xe(e,t)]}else{var n=Z(e,r);if(n.length===0){b('The selector "'+r+'" on '+t+" returned no matches!");return[pe]}else{return n}}}}function xe(e,t){return c(e,function(e){return te(e,t)!=null})}function ye(e){var t=ne(e,"hx-target");if(t){if(t==="this"){return xe(e,"hx-target")}else{return ue(e,t)}}else{var r=ae(e);if(r.boosted){return re().body}else{return e}}}function be(e){var t=Q.config.attributesToSettle;for(var r=0;r<t.length;r++){if(e===t[r]){return true}}return false}function we(t,r){oe(t.attributes,function(e){if(!r.hasAttribute(e.name)&&be(e.name)){t.removeAttribute(e.name)}});oe(r.attributes,function(e){if(be(e.name)){t.setAttribute(e.name,e.value)}})}function Se(e,t){var r=Br(t);for(var n=0;n<r.length;n++){var i=r[n];try{if(i.isInlineSwap(e)){return true}}catch(e){b(e)}}return e==="outerHTML"}function Ee(e,i,a){var t="#"+ee(i,"id");var o="outerHTML";if(e==="true"){}else if(e.indexOf(":")>0){o=e.substr(0,e.indexOf(":"));t=e.substr(e.indexOf(":")+1,e.length)}else{o=e}var r=re().querySelectorAll(t);if(r){oe(r,function(e){var t;var r=i.cloneNode(true);t=re().createDocumentFragment();t.appendChild(r);if(!Se(o,e)){t=r}var n={shouldSwap:true,target:e,fragment:t};if(!ce(e,"htmx:oobBeforeSwap",n))return;e=n.target;if(n["shouldSwap"]){Be(o,e,e,t,a)}oe(a.elts,function(e){ce(e,"htmx:oobAfterSwap",n)})});i.parentNode.removeChild(i)}else{i.parentNode.removeChild(i);fe(re().body,"htmx:oobErrorNoTarget",{content:i})}return e}function Ce(e,t,r){var n=ne(e,"hx-select-oob");if(n){var i=n.split(",");for(var a=0;a<i.length;a++){var o=i[a].split(":",2);var s=o[0].trim();if(s.indexOf("#")===0){s=s.substring(1)}var l=o[1]||"true";var u=t.querySelector("#"+s);if(u){Ee(l,u,r)}}}oe(f(t,"[hx-swap-oob], [data-hx-swap-oob]"),function(e){var t=te(e,"hx-swap-oob");if(t!=null){Ee(t,e,r)}})}function Re(e){oe(f(e,"[hx-preserve], [data-hx-preserve]"),function(e){var t=te(e,"id");var r=re().getElementById(t);if(r!=null){e.parentNode.replaceChild(r,e)}})}function Te(o,e,s){oe(e.querySelectorAll("[id]"),function(e){var t=ee(e,"id");if(t&&t.length>0){var r=t.replace("'","\\'");var n=e.tagName.replace(":","\\:");var i=o.querySelector(n+"[id='"+r+"']");if(i&&i!==o){var a=e.cloneNode();we(e,i);s.tasks.push(function(){we(e,a)})}}})}function Oe(e){return function(){n(e,Q.config.addedClass);zt(e);Nt(e);qe(e);ce(e,"htmx:load")}}function qe(e){var t="[autofocus]";var r=h(e,t)?e:e.querySelector(t);if(r!=null){r.focus()}}function a(e,t,r,n){Te(e,r,n);while(r.childNodes.length>0){var i=r.firstChild;z(i,Q.config.addedClass);e.insertBefore(i,t);if(i.nodeType!==Node.TEXT_NODE&&i.nodeType!==Node.COMMENT_NODE){n.tasks.push(Oe(i))}}}function He(e,t){var r=0;while(r<e.length){t=(t<<5)-t+e.charCodeAt(r++)|0}return t}function Le(e){var t=0;if(e.attributes){for(var r=0;r<e.attributes.length;r++){var n=e.attributes[r];if(n.value){t=He(n.name,t);t=He(n.value,t)}}}return t}function Ae(e){var t=ae(e);if(t.onHandlers){for(var r=0;r<t.onHandlers.length;r++){const n=t.onHandlers[r];e.removeEventListener(n.event,n.listener)}delete t.onHandlers}}function Ne(e){var t=ae(e);if(t.timeout){clearTimeout(t.timeout)}if(t.webSocket){t.webSocket.close()}if(t.sseEventSource){t.sseEventSource.close()}if(t.listenerInfos){oe(t.listenerInfos,function(e){if(e.on){e.on.removeEventListener(e.trigger,e.listener)}})}Ae(e);oe(Object.keys(t),function(e){delete t[e]})}function m(e){ce(e,"htmx:beforeCleanupElement");Ne(e);if(e.children){oe(e.children,function(e){m(e)})}}function Ie(t,e,r){if(t.tagName==="BODY"){return Ue(t,e,r)}else{var n;var i=t.previousSibling;a(u(t),t,e,r);if(i==null){n=u(t).firstChild}else{n=i.nextSibling}r.elts=r.elts.filter(function(e){return e!=t});while(n&&n!==t){if(n.nodeType===Node.ELEMENT_NODE){r.elts.push(n)}n=n.nextElementSibling}m(t);u(t).removeChild(t)}}function ke(e,t,r){return a(e,e.firstChild,t,r)}function Pe(e,t,r){return a(u(e),e,t,r)}function Me(e,t,r){return a(e,null,t,r)}function Xe(e,t,r){return a(u(e),e.nextSibling,t,r)}function De(e,t,r){m(e);return u(e).removeChild(e)}function Ue(e,t,r){var n=e.firstChild;a(e,n,t,r);if(n){while(n.nextSibling){m(n.nextSibling);e.removeChild(n.nextSibling)}m(n);e.removeChild(n)}}function Fe(e,t,r){var n=r||ne(e,"hx-select");if(n){var i=re().createDocumentFragment();oe(t.querySelectorAll(n),function(e){i.appendChild(e)});t=i}return t}function Be(e,t,r,n,i){switch(e){case"none":return;case"outerHTML":Ie(r,n,i);return;case"afterbegin":ke(r,n,i);return;case"beforebegin":Pe(r,n,i);return;case"beforeend":Me(r,n,i);return;case"afterend":Xe(r,n,i);return;case"delete":De(r,n,i);return;default:var a=Br(t);for(var o=0;o<a.length;o++){var s=a[o];try{var l=s.handleSwap(e,r,n,i);if(l){if(typeof l.length!=="undefined"){for(var u=0;u<l.length;u++){var f=l[u];if(f.nodeType!==Node.TEXT_NODE&&f.nodeType!==Node.COMMENT_NODE){i.tasks.push(Oe(f))}}}return}}catch(e){b(e)}}if(e==="innerHTML"){Ue(r,n,i)}else{Be(Q.config.defaultSwapStyle,t,r,n,i)}}}function Ve(e){if(e.indexOf("<title")>-1){var t=e.replace(H,"");var r=t.match(q);if(r){return r[2]}}}function je(e,t,r,n,i,a){i.title=Ve(n);var o=l(n);if(o){Ce(r,o,i);o=Fe(r,o,a);Re(o);return Be(e,r,t,o,i)}}function _e(e,t,r){var n=e.getResponseHeader(t);if(n.indexOf("{")===0){var i=E(n);for(var a in i){if(i.hasOwnProperty(a)){var o=i[a];if(!P(o)){o={value:o}}ce(r,a,o)}}}else{var s=n.split(",");for(var l=0;l<s.length;l++){ce(r,s[l].trim(),[])}}}var ze=/\s/;var x=/[\s,]/;var $e=/[_$a-zA-Z]/;var We=/[_$a-zA-Z0-9]/;var Ge=['"',"'","/"];var Je=/[^\s]/;var Ze=/[{(]/;var Ke=/[})]/;function Ye(e){var t=[];var r=0;while(r<e.length){if($e.exec(e.charAt(r))){var n=r;while(We.exec(e.charAt(r+1))){r++}t.push(e.substr(n,r-n+1))}else if(Ge.indexOf(e.charAt(r))!==-1){var i=e.charAt(r);var n=r;r++;while(r<e.length&&e.charAt(r)!==i){if(e.charAt(r)==="\\"){r++}r++}t.push(e.substr(n,r-n+1))}else{var a=e.charAt(r);t.push(a)}r++}return t}function Qe(e,t,r){return $e.exec(e.charAt(0))&&e!=="true"&&e!=="false"&&e!=="this"&&e!==r&&t!=="."}function et(e,t,r){if(t[0]==="["){t.shift();var n=1;var i=" return (function("+r+"){ return (";var a=null;while(t.length>0){var o=t[0];if(o==="]"){n--;if(n===0){if(a===null){i=i+"true"}t.shift();i+=")})";try{var s=Tr(e,function(){return Function(i)()},function(){return true});s.source=i;return s}catch(e){fe(re().body,"htmx:syntax:error",{error:e,source:i});return null}}}else if(o==="["){n++}if(Qe(o,a,r)){i+="(("+r+"."+o+") ? ("+r+"."+o+") : (window."+o+"))"}else{i=i+o}a=t.shift()}}}function y(e,t){var r="";while(e.length>0&&!t.test(e[0])){r+=e.shift()}return r}function tt(e){var t;if(e.length>0&&Ze.test(e[0])){e.shift();t=y(e,Ke).trim();e.shift()}else{t=y(e,x)}return t}var rt="input, textarea, select";function nt(e,t,r){var n=[];var i=Ye(t);do{y(i,Je);var a=i.length;var o=y(i,/[,\[\s]/);if(o!==""){if(o==="every"){var s={trigger:"every"};y(i,Je);s.pollInterval=d(y(i,/[,\[\s]/));y(i,Je);var l=et(e,i,"event");if(l){s.eventFilter=l}n.push(s)}else if(o.indexOf("sse:")===0){n.push({trigger:"sse",sseEvent:o.substr(4)})}else{var u={trigger:o};var l=et(e,i,"event");if(l){u.eventFilter=l}while(i.length>0&&i[0]!==","){y(i,Je);var f=i.shift();if(f==="changed"){u.changed=true}else if(f==="once"){u.once=true}else if(f==="consume"){u.consume=true}else if(f==="delay"&&i[0]===":"){i.shift();u.delay=d(y(i,x))}else if(f==="from"&&i[0]===":"){i.shift();if(Ze.test(i[0])){var c=tt(i)}else{var c=y(i,x);if(c==="closest"||c==="find"||c==="next"||c==="previous"){i.shift();var h=tt(i);if(h.length>0){c+=" "+h}}}u.from=c}else if(f==="target"&&i[0]===":"){i.shift();u.target=tt(i)}else if(f==="throttle"&&i[0]===":"){i.shift();u.throttle=d(y(i,x))}else if(f==="queue"&&i[0]===":"){i.shift();u.queue=y(i,x)}else if(f==="root"&&i[0]===":"){i.shift();u[f]=tt(i)}else if(f==="threshold"&&i[0]===":"){i.shift();u[f]=y(i,x)}else{fe(e,"htmx:syntax:error",{token:i.shift()})}}n.push(u)}}if(i.length===a){fe(e,"htmx:syntax:error",{token:i.shift()})}y(i,Je)}while(i[0]===","&&i.shift());if(r){r[t]=n}return n}function it(e){var t=te(e,"hx-trigger");var r=[];if(t){var n=Q.config.triggerSpecsCache;r=n&&n[t]||nt(e,t,n)}if(r.length>0){return r}else if(h(e,"form")){return[{trigger:"submit"}]}else if(h(e,'input[type="button"], input[type="submit"]')){return[{trigger:"click"}]}else if(h(e,rt)){return[{trigger:"change"}]}else{return[{trigger:"click"}]}}function at(e){ae(e).cancelled=true}function ot(e,t,r){var n=ae(e);n.timeout=setTimeout(function(){if(se(e)&&n.cancelled!==true){if(!ct(r,e,Wt("hx:poll:trigger",{triggerSpec:r,target:e}))){t(e)}ot(e,t,r)}},r.pollInterval)}function st(e){return location.hostname===e.hostname&&ee(e,"href")&&ee(e,"href").indexOf("#")!==0}function lt(t,r,e){if(t.tagName==="A"&&st(t)&&(t.target===""||t.target==="_self")||t.tagName==="FORM"){r.boosted=true;var n,i;if(t.tagName==="A"){n="get";i=ee(t,"href")}else{var a=ee(t,"method");n=a?a.toLowerCase():"get";if(n==="get"){}i=ee(t,"action")}e.forEach(function(e){ht(t,function(e,t){if(v(e,Q.config.disableSelector)){m(e);return}he(n,i,e,t)},r,e,true)})}}function ut(e,t){if(e.type==="submit"||e.type==="click"){if(t.tagName==="FORM"){return true}if(h(t,'input[type="submit"], button')&&v(t,"form")!==null){return true}if(t.tagName==="A"&&t.href&&(t.getAttribute("href")==="#"||t.getAttribute("href").indexOf("#")!==0)){return true}}return false}function ft(e,t){return ae(e).boosted&&e.tagName==="A"&&t.type==="click"&&(t.ctrlKey||t.metaKey)}function ct(e,t,r){var n=e.eventFilter;if(n){try{return n.call(t,r)!==true}catch(e){fe(re().body,"htmx:eventFilter:error",{error:e,source:n.source});return true}}return false}function ht(a,o,e,s,l){var u=ae(a);var t;if(s.from){t=Z(a,s.from)}else{t=[a]}if(s.changed){t.forEach(function(e){var t=ae(e);t.lastValue=e.value})}oe(t,function(n){var i=function(e){if(!se(a)){n.removeEventListener(s.trigger,i);return}if(ft(a,e)){return}if(l||ut(e,a)){e.preventDefault()}if(ct(s,a,e)){return}var t=ae(e);t.triggerSpec=s;if(t.handledFor==null){t.handledFor=[]}if(t.handledFor.indexOf(a)<0){t.handledFor.push(a);if(s.consume){e.stopPropagation()}if(s.target&&e.target){if(!h(e.target,s.target)){return}}if(s.once){if(u.triggeredOnce){return}else{u.triggeredOnce=true}}if(s.changed){var r=ae(n);if(r.lastValue===n.value){return}r.lastValue=n.value}if(u.delayed){clearTimeout(u.delayed)}if(u.throttle){return}if(s.throttle>0){if(!u.throttle){o(a,e);u.throttle=setTimeout(function(){u.throttle=null},s.throttle)}}else if(s.delay>0){u.delayed=setTimeout(function(){o(a,e)},s.delay)}else{ce(a,"htmx:trigger");o(a,e)}}};if(e.listenerInfos==null){e.listenerInfos=[]}e.listenerInfos.push({trigger:s.trigger,listener:i,on:n});n.addEventListener(s.trigger,i)})}var vt=false;var dt=null;function gt(){if(!dt){dt=function(){vt=true};window.addEventListener("scroll",dt);setInterval(function(){if(vt){vt=false;oe(re().querySelectorAll("[hx-trigger='revealed'],[data-hx-trigger='revealed']"),function(e){pt(e)})}},200)}}function pt(t){if(!o(t,"data-hx-revealed")&&X(t)){t.setAttribute("data-hx-revealed","true");var e=ae(t);if(e.initHash){ce(t,"revealed")}else{t.addEventListener("htmx:afterProcessNode",function(e){ce(t,"revealed")},{once:true})}}}function mt(e,t,r){var n=D(r);for(var i=0;i<n.length;i++){var a=n[i].split(/:(.+)/);if(a[0]==="connect"){xt(e,a[1],0)}if(a[0]==="send"){bt(e)}}}function xt(s,r,n){if(!se(s)){return}if(r.indexOf("/")==0){var e=location.hostname+(location.port?":"+location.port:"");if(location.protocol=="https:"){r="wss://"+e+r}else if(location.protocol=="http:"){r="ws://"+e+r}}var t=Q.createWebSocket(r);t.onerror=function(e){fe(s,"htmx:wsError",{error:e,socket:t});yt(s)};t.onclose=function(e){if([1006,1012,1013].indexOf(e.code)>=0){var t=wt(n);setTimeout(function(){xt(s,r,n+1)},t)}};t.onopen=function(e){n=0};ae(s).webSocket=t;t.addEventListener("message",function(e){if(yt(s)){return}var t=e.data;R(s,function(e){t=e.transformResponse(t,null,s)});var r=T(s);var n=l(t);var i=M(n.children);for(var a=0;a<i.length;a++){var o=i[a];Ee(te(o,"hx-swap-oob")||"true",o,r)}nr(r.tasks)})}function yt(e){if(!se(e)){ae(e).webSocket.close();return true}}function bt(u){var f=c(u,function(e){return ae(e).webSocket!=null});if(f){u.addEventListener(it(u)[0].trigger,function(e){var t=ae(f).webSocket;var r=xr(u,f);var n=dr(u,"post");var i=n.errors;var a=n.values;var o=Hr(u);var s=le(a,o);var l=yr(s,u);l["HEADERS"]=r;if(i&&i.length>0){ce(u,"htmx:validation:halted",i);return}t.send(JSON.stringify(l));if(ut(e,u)){e.preventDefault()}})}else{fe(u,"htmx:noWebSocketSourceError")}}function wt(e){var t=Q.config.wsReconnectDelay;if(typeof t==="function"){return t(e)}if(t==="full-jitter"){var r=Math.min(e,6);var n=1e3*Math.pow(2,r);return n*Math.random()}b('htmx.config.wsReconnectDelay must either be a function or the string "full-jitter"')}function St(e,t,r){var n=D(r);for(var i=0;i<n.length;i++){var a=n[i].split(/:(.+)/);if(a[0]==="connect"){Et(e,a[1])}if(a[0]==="swap"){Ct(e,a[1])}}}function Et(t,e){var r=Q.createEventSource(e);r.onerror=function(e){fe(t,"htmx:sseError",{error:e,source:r});Tt(t)};ae(t).sseEventSource=r}function Ct(a,o){var s=c(a,Ot);if(s){var l=ae(s).sseEventSource;var u=function(e){if(Tt(s)){return}if(!se(a)){l.removeEventListener(o,u);return}var t=e.data;R(a,function(e){t=e.transformResponse(t,null,a)});var r=wr(a);var n=ye(a);var i=T(a);je(r.swapStyle,n,a,t,i);nr(i.tasks);ce(a,"htmx:sseMessage",e)};ae(a).sseListener=u;l.addEventListener(o,u)}else{fe(a,"htmx:noSSESourceError")}}function Rt(e,t,r){var n=c(e,Ot);if(n){var i=ae(n).sseEventSource;var a=function(){if(!Tt(n)){if(se(e)){t(e)}else{i.removeEventListener(r,a)}}};ae(e).sseListener=a;i.addEventListener(r,a)}else{fe(e,"htmx:noSSESourceError")}}function Tt(e){if(!se(e)){ae(e).sseEventSource.close();return true}}function Ot(e){return ae(e).sseEventSource!=null}function qt(e,t,r,n){var i=function(){if(!r.loaded){r.loaded=true;t(e)}};if(n>0){setTimeout(i,n)}else{i()}}function Ht(t,i,e){var a=false;oe(w,function(r){if(o(t,"hx-"+r)){var n=te(t,"hx-"+r);a=true;i.path=n;i.verb=r;e.forEach(function(e){Lt(t,e,i,function(e,t){if(v(e,Q.config.disableSelector)){m(e);return}he(r,n,e,t)})})}});return a}function Lt(n,e,t,r){if(e.sseEvent){Rt(n,r,e.sseEvent)}else if(e.trigger==="revealed"){gt();ht(n,r,t,e);pt(n)}else if(e.trigger==="intersect"){var i={};if(e.root){i.root=ue(n,e.root)}if(e.threshold){i.threshold=parseFloat(e.threshold)}var a=new IntersectionObserver(function(e){for(var t=0;t<e.length;t++){var r=e[t];if(r.isIntersecting){ce(n,"intersect");break}}},i);a.observe(n);ht(n,r,t,e)}else if(e.trigger==="load"){if(!ct(e,n,Wt("load",{elt:n}))){qt(n,r,t,e.delay)}}else if(e.pollInterval>0){t.polling=true;ot(n,r,e)}else{ht(n,r,t,e)}}function At(e){if(!e.htmxExecuted&&Q.config.allowScriptTags&&(e.type==="text/javascript"||e.type==="module"||e.type==="")){var t=re().createElement("script");oe(e.attributes,function(e){t.setAttribute(e.name,e.value)});t.textContent=e.textContent;t.async=false;if(Q.config.inlineScriptNonce){t.nonce=Q.config.inlineScriptNonce}var r=e.parentElement;try{r.insertBefore(t,e)}catch(e){b(e)}finally{if(e.parentElement){e.parentElement.removeChild(e)}}}}function Nt(e){if(h(e,"script")){At(e)}oe(f(e,"script"),function(e){At(e)})}function It(e){var t=e.attributes;for(var r=0;r<t.length;r++){var n=t[r].name;if(g(n,"hx-on:")||g(n,"data-hx-on:")||g(n,"hx-on-")||g(n,"data-hx-on-")){return true}}return false}function kt(e){var t=null;var r=[];if(It(e)){r.push(e)}if(document.evaluate){var n=document.evaluate('.//*[@*[ starts-with(name(), "hx-on:") or starts-with(name(), "data-hx-on:") or'+' starts-with(name(), "hx-on-") or starts-with(name(), "data-hx-on-") ]]',e);while(t=n.iterateNext())r.push(t)}else{var i=e.getElementsByTagName("*");for(var a=0;a<i.length;a++){if(It(i[a])){r.push(i[a])}}}return r}function Pt(e){if(e.querySelectorAll){var t=", [hx-boost] a, [data-hx-boost] a, a[hx-boost], a[data-hx-boost]";var r=e.querySelectorAll(i+t+", form, [type='submit'], [hx-sse], [data-hx-sse], [hx-ws],"+" [data-hx-ws], [hx-ext], [data-hx-ext], [hx-trigger], [data-hx-trigger], [hx-on], [data-hx-on]");return r}else{return[]}}function Mt(e){var t=v(e.target,"button, input[type='submit']");var r=Dt(e);if(r){r.lastButtonClicked=t}}function Xt(e){var t=Dt(e);if(t){t.lastButtonClicked=null}}function Dt(e){var t=v(e.target,"button, input[type='submit']");if(!t){return}var r=p("#"+ee(t,"form"))||v(t,"form");if(!r){return}return ae(r)}function Ut(e){e.addEventListener("click",Mt);e.addEventListener("focusin",Mt);e.addEventListener("focusout",Xt)}function Ft(e){var t=Ye(e);var r=0;for(var n=0;n<t.length;n++){const i=t[n];if(i==="{"){r++}else if(i==="}"){r--}}return r}function Bt(t,e,r){var n=ae(t);if(!Array.isArray(n.onHandlers)){n.onHandlers=[]}var i;var a=function(e){return Tr(t,function(){if(!i){i=new Function("event",r)}i.call(t,e)})};t.addEventListener(e,a);n.onHandlers.push({event:e,listener:a})}function Vt(e){var t=te(e,"hx-on");if(t){var r={};var n=t.split("\n");var i=null;var a=0;while(n.length>0){var o=n.shift();var s=o.match(/^\s*([a-zA-Z:\-\.]+:)(.*)/);if(a===0&&s){o.split(":");i=s[1].slice(0,-1);r[i]=s[2]}else{r[i]+=o}a+=Ft(o)}for(var l in r){Bt(e,l,r[l])}}}function jt(e){Ae(e);for(var t=0;t<e.attributes.length;t++){var r=e.attributes[t].name;var n=e.attributes[t].value;if(g(r,"hx-on")||g(r,"data-hx-on")){var i=r.indexOf("-on")+3;var a=r.slice(i,i+1);if(a==="-"||a===":"){var o=r.slice(i+1);if(g(o,":")){o="htmx"+o}else if(g(o,"-")){o="htmx:"+o.slice(1)}else if(g(o,"htmx-")){o="htmx:"+o.slice(5)}Bt(e,o,n)}}}}function _t(t){if(v(t,Q.config.disableSelector)){m(t);return}var r=ae(t);if(r.initHash!==Le(t)){Ne(t);r.initHash=Le(t);Vt(t);ce(t,"htmx:beforeProcessNode");if(t.value){r.lastValue=t.value}var e=it(t);var n=Ht(t,r,e);if(!n){if(ne(t,"hx-boost")==="true"){lt(t,r,e)}else if(o(t,"hx-trigger")){e.forEach(function(e){Lt(t,e,r,function(){})})}}if(t.tagName==="FORM"||ee(t,"type")==="submit"&&o(t,"form")){Ut(t)}var i=te(t,"hx-sse");if(i){St(t,r,i)}var a=te(t,"hx-ws");if(a){mt(t,r,a)}ce(t,"htmx:afterProcessNode")}}function zt(e){e=p(e);if(v(e,Q.config.disableSelector)){m(e);return}_t(e);oe(Pt(e),function(e){_t(e)});oe(kt(e),jt)}function $t(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()}function Wt(e,t){var r;if(window.CustomEvent&&typeof window.CustomEvent==="function"){r=new CustomEvent(e,{bubbles:true,cancelable:true,detail:t})}else{r=re().createEvent("CustomEvent");r.initCustomEvent(e,true,true,t)}return r}function fe(e,t,r){ce(e,t,le({error:t},r))}function Gt(e){return e==="htmx:afterProcessNode"}function R(e,t){oe(Br(e),function(e){try{t(e)}catch(e){b(e)}})}function b(e){if(console.error){console.error(e)}else if(console.log){console.log("ERROR: ",e)}}function ce(e,t,r){e=p(e);if(r==null){r={}}r["elt"]=e;var n=Wt(t,r);if(Q.logger&&!Gt(t)){Q.logger(e,t,r)}if(r.error){b(r.error);ce(e,"htmx:error",{errorInfo:r})}var i=e.dispatchEvent(n);var a=$t(t);if(i&&a!==t){var o=Wt(a,n.detail);i=i&&e.dispatchEvent(o)}R(e,function(e){i=i&&(e.onEvent(t,n)!==false&&!n.defaultPrevented)});return i}var Jt=location.pathname+location.search;function Zt(){var e=re().querySelector("[hx-history-elt],[data-hx-history-elt]");return e||re().body}function Kt(e,t,r,n){if(!U()){return}if(Q.config.historyCacheSize<=0){localStorage.removeItem("htmx-history-cache");return}e=F(e);var i=E(localStorage.getItem("htmx-history-cache"))||[];for(var a=0;a<i.length;a++){if(i[a].url===e){i.splice(a,1);break}}var o={url:e,content:t,title:r,scroll:n};ce(re().body,"htmx:historyItemCreated",{item:o,cache:i});i.push(o);while(i.length>Q.config.historyCacheSize){i.shift()}while(i.length>0){try{localStorage.setItem("htmx-history-cache",JSON.stringify(i));break}catch(e){fe(re().body,"htmx:historyCacheError",{cause:e,cache:i});i.shift()}}}function Yt(e){if(!U()){return null}e=F(e);var t=E(localStorage.getItem("htmx-history-cache"))||[];for(var r=0;r<t.length;r++){if(t[r].url===e){return t[r]}}return null}function Qt(e){var t=Q.config.requestClass;var r=e.cloneNode(true);oe(f(r,"."+t),function(e){n(e,t)});return r.innerHTML}function er(){var e=Zt();var t=Jt||location.pathname+location.search;var r;try{r=re().querySelector('[hx-history="false" i],[data-hx-history="false" i]')}catch(e){r=re().querySelector('[hx-history="false"],[data-hx-history="false"]')}if(!r){ce(re().body,"htmx:beforeHistorySave",{path:t,historyElt:e});Kt(t,Qt(e),re().title,window.scrollY)}if(Q.config.historyEnabled)history.replaceState({htmx:true},re().title,window.location.href)}function tr(e){if(Q.config.getCacheBusterParam){e=e.replace(/org\.htmx\.cache-buster=[^&]*&?/,"");if(G(e,"&")||G(e,"?")){e=e.slice(0,-1)}}if(Q.config.historyEnabled){history.pushState({htmx:true},"",e)}Jt=e}function rr(e){if(Q.config.historyEnabled)history.replaceState({htmx:true},"",e);Jt=e}function nr(e){oe(e,function(e){e.call()})}function ir(a){var e=new XMLHttpRequest;var o={path:a,xhr:e};ce(re().body,"htmx:historyCacheMiss",o);e.open("GET",a,true);e.setRequestHeader("HX-Request","true");e.setRequestHeader("HX-History-Restore-Request","true");e.setRequestHeader("HX-Current-URL",re().location.href);e.onload=function(){if(this.status>=200&&this.status<400){ce(re().body,"htmx:historyCacheMissLoad",o);var e=l(this.response);e=e.querySelector("[hx-history-elt],[data-hx-history-elt]")||e;var t=Zt();var r=T(t);var n=Ve(this.response);if(n){var i=C("title");if(i){i.innerHTML=n}else{window.document.title=n}}Ue(t,e,r);nr(r.tasks);Jt=a;ce(re().body,"htmx:historyRestore",{path:a,cacheMiss:true,serverResponse:this.response})}else{fe(re().body,"htmx:historyCacheMissLoadError",o)}};e.send()}function ar(e){er();e=e||location.pathname+location.search;var t=Yt(e);if(t){var r=l(t.content);var n=Zt();var i=T(n);Ue(n,r,i);nr(i.tasks);document.title=t.title;setTimeout(function(){window.scrollTo(0,t.scroll)},0);Jt=e;ce(re().body,"htmx:historyRestore",{path:e,item:t})}else{if(Q.config.refreshOnHistoryMiss){window.location.reload(true)}else{ir(e)}}}function or(e){var t=me(e,"hx-indicator");if(t==null){t=[e]}oe(t,function(e){var t=ae(e);t.requestCount=(t.requestCount||0)+1;e.classList["add"].call(e.classList,Q.config.requestClass)});return t}function sr(e){var t=me(e,"hx-disabled-elt");if(t==null){t=[]}oe(t,function(e){var t=ae(e);t.requestCount=(t.requestCount||0)+1;e.setAttribute("disabled","")});return t}function lr(e,t){oe(e,function(e){var t=ae(e);t.requestCount=(t.requestCount||0)-1;if(t.requestCount===0){e.classList["remove"].call(e.classList,Q.config.requestClass)}});oe(t,function(e){var t=ae(e);t.requestCount=(t.requestCount||0)-1;if(t.requestCount===0){e.removeAttribute("disabled")}})}function ur(e,t){for(var r=0;r<e.length;r++){var n=e[r];if(n.isSameNode(t)){return true}}return false}function fr(e){if(e.name===""||e.name==null||e.disabled||v(e,"fieldset[disabled]")){return false}if(e.type==="button"||e.type==="submit"||e.tagName==="image"||e.tagName==="reset"||e.tagName==="file"){return false}if(e.type==="checkbox"||e.type==="radio"){return e.checked}return true}function cr(e,t,r){if(e!=null&&t!=null){var n=r[e];if(n===undefined){r[e]=t}else if(Array.isArray(n)){if(Array.isArray(t)){r[e]=n.concat(t)}else{n.push(t)}}else{if(Array.isArray(t)){r[e]=[n].concat(t)}else{r[e]=[n,t]}}}}function hr(t,r,n,e,i){if(e==null||ur(t,e)){return}else{t.push(e)}if(fr(e)){var a=ee(e,"name");var o=e.value;if(e.multiple&&e.tagName==="SELECT"){o=M(e.querySelectorAll("option:checked")).map(function(e){return e.value})}if(e.files){o=M(e.files)}cr(a,o,r);if(i){vr(e,n)}}if(h(e,"form")){var s=e.elements;oe(s,function(e){hr(t,r,n,e,i)})}}function vr(e,t){if(e.willValidate){ce(e,"htmx:validation:validate");if(!e.checkValidity()){t.push({elt:e,message:e.validationMessage,validity:e.validity});ce(e,"htmx:validation:failed",{message:e.validationMessage,validity:e.validity})}}}function dr(e,t){var r=[];var n={};var i={};var a=[];var o=ae(e);if(o.lastButtonClicked&&!se(o.lastButtonClicked)){o.lastButtonClicked=null}var s=h(e,"form")&&e.noValidate!==true||te(e,"hx-validate")==="true";if(o.lastButtonClicked){s=s&&o.lastButtonClicked.formNoValidate!==true}if(t!=="get"){hr(r,i,a,v(e,"form"),s)}hr(r,n,a,e,s);if(o.lastButtonClicked||e.tagName==="BUTTON"||e.tagName==="INPUT"&&ee(e,"type")==="submit"){var l=o.lastButtonClicked||e;var u=ee(l,"name");cr(u,l.value,i)}var f=me(e,"hx-include");oe(f,function(e){hr(r,n,a,e,s);if(!h(e,"form")){oe(e.querySelectorAll(rt),function(e){hr(r,n,a,e,s)})}});n=le(n,i);return{errors:a,values:n}}function gr(e,t,r){if(e!==""){e+="&"}if(String(r)==="[object Object]"){r=JSON.stringify(r)}var n=encodeURIComponent(r);e+=encodeURIComponent(t)+"="+n;return e}function pr(e){var t="";for(var r in e){if(e.hasOwnProperty(r)){var n=e[r];if(Array.isArray(n)){oe(n,function(e){t=gr(t,r,e)})}else{t=gr(t,r,n)}}}return t}function mr(e){var t=new FormData;for(var r in e){if(e.hasOwnProperty(r)){var n=e[r];if(Array.isArray(n)){oe(n,function(e){t.append(r,e)})}else{t.append(r,n)}}}return t}function xr(e,t,r){var n={"HX-Request":"true","HX-Trigger":ee(e,"id"),"HX-Trigger-Name":ee(e,"name"),"HX-Target":te(t,"id"),"HX-Current-URL":re().location.href};Rr(e,"hx-headers",false,n);if(r!==undefined){n["HX-Prompt"]=r}if(ae(e).boosted){n["HX-Boosted"]="true"}return n}function yr(t,e){var r=ne(e,"hx-params");if(r){if(r==="none"){return{}}else if(r==="*"){return t}else if(r.indexOf("not ")===0){oe(r.substr(4).split(","),function(e){e=e.trim();delete t[e]});return t}else{var n={};oe(r.split(","),function(e){e=e.trim();n[e]=t[e]});return n}}else{return t}}function br(e){return ee(e,"href")&&ee(e,"href").indexOf("#")>=0}function wr(e,t){var r=t?t:ne(e,"hx-swap");var n={swapStyle:ae(e).boosted?"innerHTML":Q.config.defaultSwapStyle,swapDelay:Q.config.defaultSwapDelay,settleDelay:Q.config.defaultSettleDelay};if(Q.config.scrollIntoViewOnBoost&&ae(e).boosted&&!br(e)){n["show"]="top"}if(r){var i=D(r);if(i.length>0){for(var a=0;a<i.length;a++){var o=i[a];if(o.indexOf("swap:")===0){n["swapDelay"]=d(o.substr(5))}else if(o.indexOf("settle:")===0){n["settleDelay"]=d(o.substr(7))}else if(o.indexOf("transition:")===0){n["transition"]=o.substr(11)==="true"}else if(o.indexOf("ignoreTitle:")===0){n["ignoreTitle"]=o.substr(12)==="true"}else if(o.indexOf("scroll:")===0){var s=o.substr(7);var l=s.split(":");var u=l.pop();var f=l.length>0?l.join(":"):null;n["scroll"]=u;n["scrollTarget"]=f}else if(o.indexOf("show:")===0){var c=o.substr(5);var l=c.split(":");var h=l.pop();var f=l.length>0?l.join(":"):null;n["show"]=h;n["showTarget"]=f}else if(o.indexOf("focus-scroll:")===0){var v=o.substr("focus-scroll:".length);n["focusScroll"]=v=="true"}else if(a==0){n["swapStyle"]=o}else{b("Unknown modifier in hx-swap: "+o)}}}}return n}function Sr(e){return ne(e,"hx-encoding")==="multipart/form-data"||h(e,"form")&&ee(e,"enctype")==="multipart/form-data"}function Er(t,r,n){var i=null;R(r,function(e){if(i==null){i=e.encodeParameters(t,n,r)}});if(i!=null){return i}else{if(Sr(r)){return mr(n)}else{return pr(n)}}}function T(e){return{tasks:[],elts:[e]}}function Cr(e,t){var r=e[0];var n=e[e.length-1];if(t.scroll){var i=null;if(t.scrollTarget){i=ue(r,t.scrollTarget)}if(t.scroll==="top"&&(r||i)){i=i||r;i.scrollTop=0}if(t.scroll==="bottom"&&(n||i)){i=i||n;i.scrollTop=i.scrollHeight}}if(t.show){var i=null;if(t.showTarget){var a=t.showTarget;if(t.showTarget==="window"){a="body"}i=ue(r,a)}if(t.show==="top"&&(r||i)){i=i||r;i.scrollIntoView({block:"start",behavior:Q.config.scrollBehavior})}if(t.show==="bottom"&&(n||i)){i=i||n;i.scrollIntoView({block:"end",behavior:Q.config.scrollBehavior})}}}function Rr(e,t,r,n){if(n==null){n={}}if(e==null){return n}var i=te(e,t);if(i){var a=i.trim();var o=r;if(a==="unset"){return null}if(a.indexOf("javascript:")===0){a=a.substr(11);o=true}else if(a.indexOf("js:")===0){a=a.substr(3);o=true}if(a.indexOf("{")!==0){a="{"+a+"}"}var s;if(o){s=Tr(e,function(){return Function("return ("+a+")")()},{})}else{s=E(a)}for(var l in s){if(s.hasOwnProperty(l)){if(n[l]==null){n[l]=s[l]}}}}return Rr(u(e),t,r,n)}function Tr(e,t,r){if(Q.config.allowEval){return t()}else{fe(e,"htmx:evalDisallowedError");return r}}function Or(e,t){return Rr(e,"hx-vars",true,t)}function qr(e,t){return Rr(e,"hx-vals",false,t)}function Hr(e){return le(Or(e),qr(e))}function Lr(t,r,n){if(n!==null){try{t.setRequestHeader(r,n)}catch(e){t.setRequestHeader(r,encodeURIComponent(n));t.setRequestHeader(r+"-URI-AutoEncoded","true")}}}function Ar(t){if(t.responseURL&&typeof URL!=="undefined"){try{var e=new URL(t.responseURL);return e.pathname+e.search}catch(e){fe(re().body,"htmx:badResponseUrl",{url:t.responseURL})}}}function O(e,t){return t.test(e.getAllResponseHeaders())}function Nr(e,t,r){e=e.toLowerCase();if(r){if(r instanceof Element||I(r,"String")){return he(e,t,null,null,{targetOverride:p(r),returnPromise:true})}else{return he(e,t,p(r.source),r.event,{handler:r.handler,headers:r.headers,values:r.values,targetOverride:p(r.target),swapOverride:r.swap,select:r.select,returnPromise:true})}}else{return he(e,t,null,null,{returnPromise:true})}}function Ir(e){var t=[];while(e){t.push(e);e=e.parentElement}return t}function kr(e,t,r){var n;var i;if(typeof URL==="function"){i=new URL(t,document.location.href);var a=document.location.origin;n=a===i.origin}else{i=t;n=g(t,document.location.origin)}if(Q.config.selfRequestsOnly){if(!n){return false}}return ce(e,"htmx:validateUrl",le({url:i,sameHost:n},r))}function he(t,r,n,i,a,e){var o=null;var s=null;a=a!=null?a:{};if(a.returnPromise&&typeof Promise!=="undefined"){var l=new Promise(function(e,t){o=e;s=t})}if(n==null){n=re().body}var M=a.handler||Mr;var X=a.select||null;if(!se(n)){ie(o);return l}var u=a.targetOverride||ye(n);if(u==null||u==pe){fe(n,"htmx:targetError",{target:te(n,"hx-target")});ie(s);return l}var f=ae(n);var c=f.lastButtonClicked;if(c){var h=ee(c,"formaction");if(h!=null){r=h}var v=ee(c,"formmethod");if(v!=null){if(v.toLowerCase()!=="dialog"){t=v}}}var d=ne(n,"hx-confirm");if(e===undefined){var D=function(e){return he(t,r,n,i,a,!!e)};var U={target:u,elt:n,path:r,verb:t,triggeringEvent:i,etc:a,issueRequest:D,question:d};if(ce(n,"htmx:confirm",U)===false){ie(o);return l}}var g=n;var p=ne(n,"hx-sync");var m=null;var x=false;if(p){var F=p.split(":");var B=F[0].trim();if(B==="this"){g=xe(n,"hx-sync")}else{g=ue(n,B)}p=(F[1]||"drop").trim();f=ae(g);if(p==="drop"&&f.xhr&&f.abortable!==true){ie(o);return l}else if(p==="abort"){if(f.xhr){ie(o);return l}else{x=true}}else if(p==="replace"){ce(g,"htmx:abort")}else if(p.indexOf("queue")===0){var V=p.split(" ");m=(V[1]||"last").trim()}}if(f.xhr){if(f.abortable){ce(g,"htmx:abort")}else{if(m==null){if(i){var y=ae(i);if(y&&y.triggerSpec&&y.triggerSpec.queue){m=y.triggerSpec.queue}}if(m==null){m="last"}}if(f.queuedRequests==null){f.queuedRequests=[]}if(m==="first"&&f.queuedRequests.length===0){f.queuedRequests.push(function(){he(t,r,n,i,a)})}else if(m==="all"){f.queuedRequests.push(function(){he(t,r,n,i,a)})}else if(m==="last"){f.queuedRequests=[];f.queuedRequests.push(function(){he(t,r,n,i,a)})}ie(o);return l}}var b=new XMLHttpRequest;f.xhr=b;f.abortable=x;var w=function(){f.xhr=null;f.abortable=false;if(f.queuedRequests!=null&&f.queuedRequests.length>0){var e=f.queuedRequests.shift();e()}};var j=ne(n,"hx-prompt");if(j){var S=prompt(j);if(S===null||!ce(n,"htmx:prompt",{prompt:S,target:u})){ie(o);w();return l}}if(d&&!e){if(!confirm(d)){ie(o);w();return l}}var E=xr(n,u,S);if(t!=="get"&&!Sr(n)){E["Content-Type"]="application/x-www-form-urlencoded"}if(a.headers){E=le(E,a.headers)}var _=dr(n,t);var C=_.errors;var R=_.values;if(a.values){R=le(R,a.values)}var z=Hr(n);var $=le(R,z);var T=yr($,n);if(Q.config.getCacheBusterParam&&t==="get"){T["org.htmx.cache-buster"]=ee(u,"id")||"true"}if(r==null||r===""){r=re().location.href}var O=Rr(n,"hx-request");var W=ae(n).boosted;var q=Q.config.methodsThatUseUrlParams.indexOf(t)>=0;var H={boosted:W,useUrlParams:q,parameters:T,unfilteredParameters:$,headers:E,target:u,verb:t,errors:C,withCredentials:a.credentials||O.credentials||Q.config.withCredentials,timeout:a.timeout||O.timeout||Q.config.timeout,path:r,triggeringEvent:i};if(!ce(n,"htmx:configRequest",H)){ie(o);w();return l}r=H.path;t=H.verb;E=H.headers;T=H.parameters;C=H.errors;q=H.useUrlParams;if(C&&C.length>0){ce(n,"htmx:validation:halted",H);ie(o);w();return l}var G=r.split("#");var J=G[0];var L=G[1];var A=r;if(q){A=J;var Z=Object.keys(T).length!==0;if(Z){if(A.indexOf("?")<0){A+="?"}else{A+="&"}A+=pr(T);if(L){A+="#"+L}}}if(!kr(n,A,H)){fe(n,"htmx:invalidPath",H);ie(s);return l}b.open(t.toUpperCase(),A,true);b.overrideMimeType("text/html");b.withCredentials=H.withCredentials;b.timeout=H.timeout;if(O.noHeaders){}else{for(var N in E){if(E.hasOwnProperty(N)){var K=E[N];Lr(b,N,K)}}}var I={xhr:b,target:u,requestConfig:H,etc:a,boosted:W,select:X,pathInfo:{requestPath:r,finalRequestPath:A,anchor:L}};b.onload=function(){try{var e=Ir(n);I.pathInfo.responsePath=Ar(b);M(n,I);lr(k,P);ce(n,"htmx:afterRequest",I);ce(n,"htmx:afterOnLoad",I);if(!se(n)){var t=null;while(e.length>0&&t==null){var r=e.shift();if(se(r)){t=r}}if(t){ce(t,"htmx:afterRequest",I);ce(t,"htmx:afterOnLoad",I)}}ie(o);w()}catch(e){fe(n,"htmx:onLoadError",le({error:e},I));throw e}};b.onerror=function(){lr(k,P);fe(n,"htmx:afterRequest",I);fe(n,"htmx:sendError",I);ie(s);w()};b.onabort=function(){lr(k,P);fe(n,"htmx:afterRequest",I);fe(n,"htmx:sendAbort",I);ie(s);w()};b.ontimeout=function(){lr(k,P);fe(n,"htmx:afterRequest",I);fe(n,"htmx:timeout",I);ie(s);w()};if(!ce(n,"htmx:beforeRequest",I)){ie(o);w();return l}var k=or(n);var P=sr(n);oe(["loadstart","loadend","progress","abort"],function(t){oe([b,b.upload],function(e){e.addEventListener(t,function(e){ce(n,"htmx:xhr:"+t,{lengthComputable:e.lengthComputable,loaded:e.loaded,total:e.total})})})});ce(n,"htmx:beforeSend",I);var Y=q?null:Er(b,n,T);b.send(Y);return l}function Pr(e,t){var r=t.xhr;var n=null;var i=null;if(O(r,/HX-Push:/i)){n=r.getResponseHeader("HX-Push");i="push"}else if(O(r,/HX-Push-Url:/i)){n=r.getResponseHeader("HX-Push-Url");i="push"}else if(O(r,/HX-Replace-Url:/i)){n=r.getResponseHeader("HX-Replace-Url");i="replace"}if(n){if(n==="false"){return{}}else{return{type:i,path:n}}}var a=t.pathInfo.finalRequestPath;var o=t.pathInfo.responsePath;var s=ne(e,"hx-push-url");var l=ne(e,"hx-replace-url");var u=ae(e).boosted;var f=null;var c=null;if(s){f="push";c=s}else if(l){f="replace";c=l}else if(u){f="push";c=o||a}if(c){if(c==="false"){return{}}if(c==="true"){c=o||a}if(t.pathInfo.anchor&&c.indexOf("#")===-1){c=c+"#"+t.pathInfo.anchor}return{type:f,path:c}}else{return{}}}function Mr(l,u){var f=u.xhr;var c=u.target;var e=u.etc;var t=u.requestConfig;var h=u.select;if(!ce(l,"htmx:beforeOnLoad",u))return;if(O(f,/HX-Trigger:/i)){_e(f,"HX-Trigger",l)}if(O(f,/HX-Location:/i)){er();var r=f.getResponseHeader("HX-Location");var v;if(r.indexOf("{")===0){v=E(r);r=v["path"];delete v["path"]}Nr("GET",r,v).then(function(){tr(r)});return}var n=O(f,/HX-Refresh:/i)&&"true"===f.getResponseHeader("HX-Refresh");if(O(f,/HX-Redirect:/i)){location.href=f.getResponseHeader("HX-Redirect");n&&location.reload();return}if(n){location.reload();return}if(O(f,/HX-Retarget:/i)){if(f.getResponseHeader("HX-Retarget")==="this"){u.target=l}else{u.target=ue(l,f.getResponseHeader("HX-Retarget"))}}var d=Pr(l,u);var i=f.status>=200&&f.status<400&&f.status!==204;var g=f.response;var a=f.status>=400;var p=Q.config.ignoreTitle;var o=le({shouldSwap:i,serverResponse:g,isError:a,ignoreTitle:p},u);if(!ce(c,"htmx:beforeSwap",o))return;c=o.target;g=o.serverResponse;a=o.isError;p=o.ignoreTitle;u.target=c;u.failed=a;u.successful=!a;if(o.shouldSwap){if(f.status===286){at(l)}R(l,function(e){g=e.transformResponse(g,f,l)});if(d.type){er()}var s=e.swapOverride;if(O(f,/HX-Reswap:/i)){s=f.getResponseHeader("HX-Reswap")}var v=wr(l,s);if(v.hasOwnProperty("ignoreTitle")){p=v.ignoreTitle}c.classList.add(Q.config.swappingClass);var m=null;var x=null;var y=function(){try{var e=document.activeElement;var t={};try{t={elt:e,start:e?e.selectionStart:null,end:e?e.selectionEnd:null}}catch(e){}var r;if(h){r=h}if(O(f,/HX-Reselect:/i)){r=f.getResponseHeader("HX-Reselect")}if(d.type){ce(re().body,"htmx:beforeHistoryUpdate",le({history:d},u));if(d.type==="push"){tr(d.path);ce(re().body,"htmx:pushedIntoHistory",{path:d.path})}else{rr(d.path);ce(re().body,"htmx:replacedInHistory",{path:d.path})}}var n=T(c);je(v.swapStyle,c,l,g,n,r);if(t.elt&&!se(t.elt)&&ee(t.elt,"id")){var i=document.getElementById(ee(t.elt,"id"));var a={preventScroll:v.focusScroll!==undefined?!v.focusScroll:!Q.config.defaultFocusScroll};if(i){if(t.start&&i.setSelectionRange){try{i.setSelectionRange(t.start,t.end)}catch(e){}}i.focus(a)}}c.classList.remove(Q.config.swappingClass);oe(n.elts,function(e){if(e.classList){e.classList.add(Q.config.settlingClass)}ce(e,"htmx:afterSwap",u)});if(O(f,/HX-Trigger-After-Swap:/i)){var o=l;if(!se(l)){o=re().body}_e(f,"HX-Trigger-After-Swap",o)}var s=function(){oe(n.tasks,function(e){e.call()});oe(n.elts,function(e){if(e.classList){e.classList.remove(Q.config.settlingClass)}ce(e,"htmx:afterSettle",u)});if(u.pathInfo.anchor){var e=re().getElementById(u.pathInfo.anchor);if(e){e.scrollIntoView({block:"start",behavior:"auto"})}}if(n.title&&!p){var t=C("title");if(t){t.innerHTML=n.title}else{window.document.title=n.title}}Cr(n.elts,v);if(O(f,/HX-Trigger-After-Settle:/i)){var r=l;if(!se(l)){r=re().body}_e(f,"HX-Trigger-After-Settle",r)}ie(m)};if(v.settleDelay>0){setTimeout(s,v.settleDelay)}else{s()}}catch(e){fe(l,"htmx:swapError",u);ie(x);throw e}};var b=Q.config.globalViewTransitions;if(v.hasOwnProperty("transition")){b=v.transition}if(b&&ce(l,"htmx:beforeTransition",u)&&typeof Promise!=="undefined"&&document.startViewTransition){var w=new Promise(function(e,t){m=e;x=t});var S=y;y=function(){document.startViewTransition(function(){S();return w})}}if(v.swapDelay>0){setTimeout(y,v.swapDelay)}else{y()}}if(a){fe(l,"htmx:responseError",le({error:"Response Status Error Code "+f.status+" from "+u.pathInfo.requestPath},u))}}var Xr={};function Dr(){return{init:function(e){return null},onEvent:function(e,t){return true},transformResponse:function(e,t,r){return e},isInlineSwap:function(e){return false},handleSwap:function(e,t,r,n){return false},encodeParameters:function(e,t,r){return null}}}function Ur(e,t){if(t.init){t.init(r)}Xr[e]=le(Dr(),t)}function Fr(e){delete Xr[e]}function Br(e,r,n){if(e==undefined){return r}if(r==undefined){r=[]}if(n==undefined){n=[]}var t=te(e,"hx-ext");if(t){oe(t.split(","),function(e){e=e.replace(/ /g,"");if(e.slice(0,7)=="ignore:"){n.push(e.slice(7));return}if(n.indexOf(e)<0){var t=Xr[e];if(t&&r.indexOf(t)<0){r.push(t)}}})}return Br(u(e),r,n)}var Vr=false;re().addEventListener("DOMContentLoaded",function(){Vr=true});function jr(e){if(Vr||re().readyState==="complete"){e()}else{re().addEventListener("DOMContentLoaded",e)}}function _r(){if(Q.config.includeIndicatorStyles!==false){re().head.insertAdjacentHTML("beforeend","<style> ."+Q.config.indicatorClass+"{opacity:0} ."+Q.config.requestClass+" ."+Q.config.indicatorClass+"{opacity:1; transition: opacity 200ms ease-in;} ."+Q.config.requestClass+"."+Q.config.indicatorClass+"{opacity:1; transition: opacity 200ms ease-in;} </style>")}}function zr(){var e=re().querySelector('meta[name="htmx-config"]');if(e){return E(e.content)}else{return null}}function $r(){var e=zr();if(e){Q.config=le(Q.config,e)}}jr(function(){$r();_r();var e=re().body;zt(e);var t=re().querySelectorAll("[hx-trigger='restored'],[data-hx-trigger='restored']");e.addEventListener("htmx:abort",function(e){var t=e.target;var r=ae(t);if(r&&r.xhr){r.xhr.abort()}});const r=window.onpopstate?window.onpopstate.bind(window):null;window.onpopstate=function(e){if(e.state&&e.state.htmx){ar();oe(t,function(e){ce(e,"htmx:restored",{document:re(),triggerEvent:ce})})}else{if(r){r(e)}}};setTimeout(function(){ce(e,"htmx:load",{});e=null},0)});return Q}()});1 var htmx=function(){"use strict";const Q={onLoad:null,process:null,on:null,off:null,trigger:null,ajax:null,find:null,findAll:null,closest:null,values:function(e,t){const n=dn(e,t||"post");return n.values},remove:null,addClass:null,removeClass:null,toggleClass:null,takeClass:null,swap:null,defineExtension:null,removeExtension:null,logAll:null,logNone:null,logger:null,config:{historyEnabled:true,historyCacheSize:10,refreshOnHistoryMiss:false,defaultSwapStyle:"innerHTML",defaultSwapDelay:0,defaultSettleDelay:20,includeIndicatorStyles:true,indicatorClass:"htmx-indicator",requestClass:"htmx-request",addedClass:"htmx-added",settlingClass:"htmx-settling",swappingClass:"htmx-swapping",allowEval:true,allowScriptTags:true,inlineScriptNonce:"",inlineStyleNonce:"",attributesToSettle:["class","style","width","height"],withCredentials:false,timeout:0,wsReconnectDelay:"full-jitter",wsBinaryType:"blob",disableSelector:"[hx-disable], [data-hx-disable]",scrollBehavior:"instant",defaultFocusScroll:false,getCacheBusterParam:false,globalViewTransitions:false,methodsThatUseUrlParams:["get","delete"],selfRequestsOnly:true,ignoreTitle:false,scrollIntoViewOnBoost:true,triggerSpecsCache:null,disableInheritance:false,responseHandling:[{code:"204",swap:false},{code:"[23]..",swap:true},{code:"[45]..",swap:false,error:true}],allowNestedOobSwaps:true,historyRestoreAsHxRequest:true,reportValidityOfForms:false},parseInterval:null,location:location,_:null,version:"2.0.10"};Q.onLoad=j;Q.process=Ft;Q.on=ye;Q.off=xe;Q.trigger=ae;Q.ajax=Nn;Q.find=f;Q.findAll=y;Q.closest=g;Q.remove=z;Q.addClass=w;Q.removeClass=b;Q.toggleClass=G;Q.takeClass=W;Q.swap=_e;Q.defineExtension=_n;Q.removeExtension=zn;Q.logAll=$;Q.logNone=_;Q.parseInterval=d;Q._=e;const n={addTriggerHandler:St,bodyContains:se,canAccessLocalStorage:U,findThisElement:we,filterValues:yn,swap:_e,hasAttribute:s,getAttributeValue:a,getClosestAttributeValue:ne,getClosestMatch:A,getExpressionVars:Rn,getHeaders:mn,getInputValues:dn,getInternalData:oe,getSwapSpecification:bn,getTriggerSpecs:st,getTarget:Se,makeFragment:P,mergeObjects:le,makeSettleInfo:Sn,oobSwap:He,querySelectorExt:ce,settleImmediately:Yt,shouldCancel:ht,triggerEvent:ae,triggerErrorEvent:fe,withExtensions:Vt};const de=["get","post","put","delete","patch"];const R=de.map(function(e){return"[hx-"+e+"], [data-hx-"+e+"]"}).join(", ");function d(e){if(e==undefined){return undefined}let t=NaN;if(e.slice(-2)=="ms"){t=parseFloat(e.slice(0,-2))}else if(e.slice(-1)=="s"){t=parseFloat(e.slice(0,-1))*1e3}else if(e.slice(-1)=="m"){t=parseFloat(e.slice(0,-1))*1e3*60}else{t=parseFloat(e)}return isNaN(t)?undefined:t}function ee(e,t){return e instanceof Element&&e.getAttribute(t)}function s(e,t){return!!e.hasAttribute&&(e.hasAttribute(t)||e.hasAttribute("data-"+t))}function a(e,t){return ee(e,t)||ee(e,"data-"+t)}function c(e){const t=e.parentElement;if(!t&&e.parentNode instanceof ShadowRoot)return e.parentNode;return t}function te(){return document}function q(e,t){return e.getRootNode?e.getRootNode({composed:t}):te()}function A(e,t){while(e&&!t(e)){e=c(e)}return e||null}function o(e,t,n){const r=a(t,n);const o=a(t,"hx-disinherit");var i=a(t,"hx-inherit");if(e!==t){if(Q.config.disableInheritance){if(i&&(i==="*"||i.split(" ").indexOf(n)>=0)){return r}else{return null}}if(o&&(o==="*"||o.split(" ").indexOf(n)>=0)){return"unset"}}return r}function ne(t,n){let r=null;A(t,function(e){return!!(r=o(t,ue(e),n))});if(r!=="unset"){return r}}function h(e,t){return e instanceof Element&&e.matches(t)}function N(e){const t=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i;const n=t.exec(e);if(n){return n[1].toLowerCase()}else{return""}}function I(e){if("parseHTMLUnsafe"in Document){return Document.parseHTMLUnsafe(e)}const t=new DOMParser;return t.parseFromString(e,"text/html")}function L(e,t){while(t.childNodes.length>0){e.append(t.childNodes[0])}}function r(e){const t=te().createElement("script");ie(e.attributes,function(e){t.setAttribute(e.name,e.value)});t.textContent=e.textContent;t.async=false;if(Q.config.inlineScriptNonce){t.nonce=Q.config.inlineScriptNonce}return t}function i(e){return e.matches("script")&&(e.type==="text/javascript"||e.type==="module"||e.type==="")}function D(e){Array.from(e.querySelectorAll("script")).forEach(e=>{if(i(e)){const t=r(e);const n=e.parentNode;try{n.insertBefore(t,e)}catch(e){H(e)}finally{e.remove()}}})}function P(e){const t=e.replace(/<head(\s[^>]*)?>[\s\S]*?<\/head>/i,"");const n=N(t);let r;if(n==="html"){r=new DocumentFragment;const i=I(e);L(r,i.body);r.title=i.title}else if(n==="body"){r=new DocumentFragment;const i=I(t);L(r,i.body);r.title=i.title}else{const i=I('<body><template class="internal-htmx-wrapper">'+t+"</template></body>");r=i.querySelector("template").content;r.title=i.title;var o=r.querySelector("title");if(o&&o.parentNode===r){o.remove();r.title=o.innerText}}if(r){if(Q.config.allowScriptTags){D(r)}else{r.querySelectorAll("script").forEach(e=>e.remove())}}return r}function re(e){if(e){e()}}function t(e,t){return Object.prototype.toString.call(e)==="[object "+t+"]"}function k(e){return typeof e==="function"}function M(e){return t(e,"Object")}function oe(e){const t="htmx-internal-data";let n=e[t];if(!n){n=e[t]={}}return n}function F(t){const n=[];if(t){for(let e=0;e<t.length;e++){n.push(t[e])}}return n}function ie(t,n){if(t){for(let e=0;e<t.length;e++){n(t[e])}}}function B(e){const t=e.getBoundingClientRect();const n=t.top;const r=t.bottom;return n<window.innerHeight&&r>=0}function se(e){return e.getRootNode({composed:true})===document}function X(e){return e.trim().split(/\s+/)}function le(e,t){for(const n in t){if(t.hasOwnProperty(n)){e[n]=t[n]}}return e}function v(e){try{return JSON.parse(e)}catch(e){H(e);return null}}function U(){const e="htmx:sessionStorageTest";try{sessionStorage.setItem(e,e);sessionStorage.removeItem(e);return true}catch(e){return false}}function V(e){try{const t=new URL(e,window.location.href);e=t.pathname+t.search}catch(e){}if(e!="/"){e=e.replace(/\/+$/,"")}return e}function e(e){return On(te().body,function(){return eval(e)})}function j(t){const e=Q.on("htmx:load",function(e){t(e.detail.elt)});return e}function $(){Q.logger=function(e,t,n){if(console){console.log(t,e,n)}}}function _(){Q.logger=null}function f(e,t){if(typeof e!=="string"){return e.querySelector(t)}else{return f(te(),e)}}function y(e,t){if(typeof e!=="string"){return e.querySelectorAll(t)}else{return y(te(),e)}}function x(){return window}function z(e,t){e=S(e);if(t){x().setTimeout(function(){z(e);e=null},t)}else{c(e).removeChild(e)}}function ue(e){return e instanceof Element?e:null}function J(e){return e instanceof HTMLElement?e:null}function K(e){return typeof e==="string"?e:null}function p(e){return e instanceof Element||e instanceof Document||e instanceof DocumentFragment?e:null}function w(e,t,n){e=ue(S(e));if(!e){return}if(n){x().setTimeout(function(){w(e,t);e=null},n)}else{e.classList&&e.classList.add(t)}}function b(e,t,n){let r=ue(S(e));if(!r){return}if(n){x().setTimeout(function(){b(r,t);r=null},n)}else{if(r.classList){r.classList.remove(t);if(r.classList.length===0){r.removeAttribute("class")}}}}function G(e,t){e=S(e);e.classList.toggle(t)}function W(e,t){e=S(e);ie(e.parentElement.children,function(e){b(e,t)});w(ue(e),t)}function g(e,t){e=ue(S(e));if(e){return e.closest(t)}return null}function l(e,t){return e.substring(0,t.length)===t}function Z(e,t){return e.substring(e.length-t.length)===t}function Y(e){const t=e.trim();if(l(t,"<")&&Z(t,"/>")){return t.substring(1,t.length-2)}else{return t}}function m(t,r,n){if(r.indexOf("global ")===0){return m(t,r.slice(7),true)}t=S(t);const o=[];{let t=0;let n=0;for(let e=0;e<r.length;e++){const l=r[e];if(l===","&&t===0){o.push(r.substring(n,e));n=e+1;continue}if(l==="<"){t++}else if(l==="/"&&e<r.length-1&&r[e+1]===">"){t--}}if(n<r.length){o.push(r.substring(n))}}const i=[];const s=[];while(o.length>0){const r=Y(o.shift());let e;if(r.indexOf("closest ")===0){e=g(ue(t),Y(r.slice(8)))}else if(r.indexOf("find ")===0){e=f(p(t),Y(r.slice(5)))}else if(r==="next"||r==="nextElementSibling"){e=ue(t).nextElementSibling}else if(r.indexOf("next ")===0){e=pe(t,Y(r.slice(5)),!!n)}else if(r==="previous"||r==="previousElementSibling"){e=ue(t).previousElementSibling}else if(r.indexOf("previous ")===0){e=ge(t,Y(r.slice(9)),!!n)}else if(r==="document"){e=document}else if(r==="window"){e=window}else if(r==="body"){e=document.body}else if(r==="root"){e=q(t,!!n)}else if(r==="host"){e=t.getRootNode().host}else{s.push(r)}if(e){i.push(e)}}if(s.length>0){const e=s.join(",");const u=p(q(t,!!n));i.push(...F(u.querySelectorAll(e)))}return i}var pe=function(t,e,n){const r=p(q(t,n)).querySelectorAll(e);for(let e=0;e<r.length;e++){const o=r[e];if(o.compareDocumentPosition(t)===Node.DOCUMENT_POSITION_PRECEDING){return o}}};var ge=function(t,e,n){const r=p(q(t,n)).querySelectorAll(e);for(let e=r.length-1;e>=0;e--){const o=r[e];if(o.compareDocumentPosition(t)===Node.DOCUMENT_POSITION_FOLLOWING){return o}}};function ce(e,t){if(typeof e!=="string"){return m(e,t)[0]}else{return m(te().body,e)[0]}}function S(e,t){if(typeof e==="string"){return f(p(t)||document,e)}else{return e}}function me(e,t,n,r){if(k(t)){return{target:te().body,event:K(e),listener:t,options:n}}else{return{target:S(e),event:K(t),listener:n,options:r}}}function ye(t,n,r,o){Gn(function(){const e=me(t,n,r,o);e.target.addEventListener(e.event,e.listener,e.options)});const e=k(n);return e?n:r}function xe(t,n,r){Gn(function(){const e=me(t,n,r);e.target.removeEventListener(e.event,e.listener)});return k(n)?n:r}const be=te().createElement("output");function ve(t,n){const e=ne(t,n);if(e){if(e==="this"){return[we(t,n)]}else{const r=m(t,e);const o=/(^|,)(\s*)inherit(\s*)($|,)/.test(e);if(o){const i=ue(A(t,function(e){return e!==t&&s(ue(e),n)}));if(i){r.push(...ve(i,n))}}if(r.length===0){H('The selector "'+e+'" on '+n+" returned no matches!");return[be]}else{return r}}}}function we(e,t){return ue(A(e,function(e){return a(ue(e),t)!=null}))}function Se(e){const t=ne(e,"hx-target");if(t){if(t==="this"){return we(e,"hx-target")}else{return ce(e,t)}}else{const n=oe(e);if(n.boosted){return te().body}else{return e}}}function Ee(e){return Q.config.attributesToSettle.includes(e)}function Ce(t,n){ie(Array.from(t.attributes),function(e){if(!n.hasAttribute(e.name)&&Ee(e.name)){t.removeAttribute(e.name)}});ie(n.attributes,function(e){if(Ee(e.name)){t.setAttribute(e.name,e.value)}})}function Oe(t,e){const n=Jn(e);for(let e=0;e<n.length;e++){const r=n[e];try{if(r.isInlineSwap(t)){return true}}catch(e){H(e)}}return t==="outerHTML"}function He(e,o,i,t){t=t||te();let n="#"+CSS.escape(ee(o,"id"));let s="outerHTML";if(e==="true"){}else if(e.indexOf(":")>0){s=e.substring(0,e.indexOf(":"));n=e.substring(e.indexOf(":")+1)}else{s=e}o.removeAttribute("hx-swap-oob");o.removeAttribute("data-hx-swap-oob");const r=m(t,n,false);if(r.length){ie(r,function(e){let t;const n=o.cloneNode(true);t=te().createDocumentFragment();t.appendChild(n);if(!Oe(s,e)){t=p(n)}const r={shouldSwap:true,target:e,fragment:t};if(!ae(e,"htmx:oobBeforeSwap",r))return;e=r.target;if(r.shouldSwap){Re(t);je(s,e,e,t,i);Te()}ie(i.elts,function(e){ae(e,"htmx:oobAfterSwap",r)})});o.parentNode.removeChild(o)}else{o.parentNode.removeChild(o);fe(te().body,"htmx:oobErrorNoTarget",{content:o,target:n})}return e}function Te(){const e=f("#--htmx-preserve-pantry--");if(e){for(const t of[...e.children]){const n=f("#"+t.id);n.parentNode.moveBefore(t,n);n.remove()}e.remove()}}function Re(e){ie(y(e,"[hx-preserve], [data-hx-preserve]"),function(e){const t=a(e,"id");const n=te().getElementById(t);if(n!=null){if(e.moveBefore){let e=f("#--htmx-preserve-pantry--");if(e==null){te().body.insertAdjacentHTML("afterend","<div id='--htmx-preserve-pantry--'></div>");e=f("#--htmx-preserve-pantry--")}e.moveBefore(n,null)}else{e.parentNode.replaceChild(n,e)}}})}function qe(i,e,s){ie(e.querySelectorAll("[id]"),function(t){const n=ee(t,"id");if(n&&n.length>0){const e=p(i);const r=e&&e.querySelector(CSS.escape(t.tagName)+"#"+CSS.escape(n));if(r&&r!==e){const o=t.cloneNode();Ce(t,r);s.tasks.push(function(){Ce(t,o)})}}})}function Ae(e){return function(){b(e,Q.config.addedClass);Ft(ue(e));Ne(p(e));ae(e,"htmx:load")}}function Ne(e){const t="[autofocus]";const n=J(h(e,t)?e:e.querySelector(t));if(n!=null){n.focus()}}function u(e,t,n,r){qe(e,n,r);while(n.childNodes.length>0){const o=n.firstChild;w(ue(o),Q.config.addedClass);e.insertBefore(o,t);if(o.nodeType!==Node.TEXT_NODE&&o.nodeType!==Node.COMMENT_NODE){r.tasks.push(Ae(o))}}}function Ie(e,t){let n=0;while(n<e.length){t=(t<<5)-t+e.charCodeAt(n++)|0}return t}function Le(t){let n=0;for(let e=0;e<t.attributes.length;e++){const r=t.attributes[e];if(r.value){n=Ie(r.name,n);n=Ie(r.value,n)}}return n}function De(t){const n=oe(t);if(n.onHandlers){for(let e=0;e<n.onHandlers.length;e++){const r=n.onHandlers[e];xe(t,r.event,r.listener)}delete n.onHandlers}}function Pe(e){const t=oe(e);if(t.timeout){clearTimeout(t.timeout)}if(t.listenerInfos){ie(t.listenerInfos,function(e){if(e.on){xe(e.on,e.trigger,e.listener)}})}De(e);ie(Object.keys(t),function(e){if(e!=="firstInitCompleted")delete t[e]})}function E(e){ae(e,"htmx:beforeCleanupElement");Pe(e);ie(e.children,function(e){E(e)})}function ke(t,e,n){if(t.tagName==="BODY"){return Ve(t,e,n)}let r;const o=t.previousSibling;const i=c(t);if(!i){return}u(i,t,e,n);if(o==null){r=i.firstChild}else{r=o.nextSibling}n.elts=n.elts.filter(function(e){return e!==t});while(r&&r!==t){if(r instanceof Element){n.elts.push(r)}r=r.nextSibling}E(t);t.remove()}function Me(e,t,n){return u(e,e.firstChild,t,n)}function Fe(e,t,n){return u(c(e),e,t,n)}function Be(e,t,n){return u(e,null,t,n)}function Xe(e,t,n){return u(c(e),e.nextSibling,t,n)}function Ue(e){E(e);const t=c(e);if(t){return t.removeChild(e)}}function Ve(e,t,n){const r=e.firstChild;u(e,r,t,n);if(r){while(r.nextSibling){E(r.nextSibling);e.removeChild(r.nextSibling)}E(r);e.removeChild(r)}}function je(t,e,n,r,o){switch(t){case"none":return;case"outerHTML":ke(n,r,o);return;case"afterbegin":Me(n,r,o);return;case"beforebegin":Fe(n,r,o);return;case"beforeend":Be(n,r,o);return;case"afterend":Xe(n,r,o);return;case"delete":Ue(n);return;default:var i=Jn(e);for(let e=0;e<i.length;e++){const s=i[e];try{const l=s.handleSwap(t,n,r,o);if(l){if(Array.isArray(l)){for(let e=0;e<l.length;e++){const u=l[e];if(u.nodeType!==Node.TEXT_NODE&&u.nodeType!==Node.COMMENT_NODE){o.tasks.push(Ae(u))}}}return}}catch(e){H(e)}}if(t==="innerHTML"){Ve(n,r,o)}else{je(Q.config.defaultSwapStyle,e,n,r,o)}}}function $e(e,n,r){var t=y(e,"[hx-swap-oob], [data-hx-swap-oob]");ie(t,function(e){if(Q.config.allowNestedOobSwaps||e.parentElement===null){const t=a(e,"hx-swap-oob");if(t!=null){He(t,e,n,r)}}else{e.removeAttribute("hx-swap-oob");e.removeAttribute("data-hx-swap-oob")}});return t.length>0}function _e(h,d,p,g){if(!g){g={}}let m=null;let n=null;let e=function(){re(g.beforeSwapCallback);h=S(h);const r=g.contextElement?q(g.contextElement,false):te();const e=document.activeElement;let t={};t={elt:e,start:e?e.selectionStart:null,end:e?e.selectionEnd:null};const o=Sn(h);if(p.swapStyle==="textContent"){h.textContent=d}else{let n=P(d);o.title=g.title||n.title;if(g.historyRequest){n=n.querySelector("[hx-history-elt],[data-hx-history-elt]")||n}if(g.selectOOB){const i=g.selectOOB.split(",");for(let t=0;t<i.length;t++){const s=i[t].split(":",2);let e=s[0].trim();if(e.indexOf("#")===0){e=e.substring(1)}const l=s[1]||"true";const u=n.querySelector("#"+e);if(u){He(l,u,o,r)}}}$e(n,o,r);ie(y(n,"template"),function(e){if(e.content&&$e(e.content,o,r)){e.remove()}});if(g.select){const c=te().createDocumentFragment();ie(n.querySelectorAll(g.select),function(e){c.appendChild(e)});n=c}Re(n);je(p.swapStyle,g.contextElement,h,n,o);Te()}if(t.elt&&!se(t.elt)&&ee(t.elt,"id")){const f=document.getElementById(ee(t.elt,"id"));const a={preventScroll:p.focusScroll!==undefined?!p.focusScroll:!Q.config.defaultFocusScroll};if(f){if(t.start&&f.setSelectionRange){try{f.setSelectionRange(t.start,t.end)}catch(e){}}f.focus(a)}}b(h,Q.config.swappingClass);ie(o.elts,function(e){if(e.classList){w(e,Q.config.settlingClass)}ae(e,"htmx:afterSwap",g.eventInfo)});re(g.afterSwapCallback);if(!p.ignoreTitle){Xn(o.title)}const n=function(){ie(o.tasks,function(e){e.call()});ie(o.elts,function(e){if(e.classList){b(e,Q.config.settlingClass)}ae(e,"htmx:afterSettle",g.eventInfo)});if(g.anchor){const e=ue(S("#"+g.anchor));if(e){e.scrollIntoView({block:"start",behavior:"auto"})}}En(o.elts,p);re(g.afterSettleCallback);re(m)};if(p.settleDelay>0){x().setTimeout(n,p.settleDelay)}else{n()}};let t=Q.config.globalViewTransitions;if(p.hasOwnProperty("transition")){t=p.transition}const r=g.contextElement||te();if(t&&ae(r,"htmx:beforeTransition",g.eventInfo)&&typeof Promise!=="undefined"&&document.startViewTransition){const o=new Promise(function(e,t){m=e;n=t});const i=e;e=function(){document.startViewTransition(function(){i();return o})}}try{if(p?.swapDelay&&p.swapDelay>0){x().setTimeout(e,p.swapDelay)}else{e()}}catch(e){fe(r,"htmx:swapError",g.eventInfo);re(n);throw e}}function ze(e,t,n){const r=e.getResponseHeader(t);if(r.indexOf("{")===0){const o=v(r);for(const i in o){if(o.hasOwnProperty(i)){let e=o[i];if(M(e)){n=e.target!==undefined?e.target:n}else{e={value:e}}ae(n,i,e)}}}else{const s=r.split(",");for(let e=0;e<s.length;e++){ae(n,s[e].trim(),[])}}}const Je=/\s/;const C=/[\s,]/;const Ke=/[_$a-zA-Z]/;const Ge=/[_$a-zA-Z0-9]/;const We=['"',"'","/"];const Ze=/[^\s]/;const Ye=/[{(]/;const Qe=/[})]/;function et(e){const t=[];let n=0;while(n<e.length){if(Ke.exec(e.charAt(n))){var r=n;while(Ge.exec(e.charAt(n+1))){n++}t.push(e.substring(r,n+1))}else if(We.indexOf(e.charAt(n))!==-1){const o=e.charAt(n);var r=n;n++;while(n<e.length&&e.charAt(n)!==o){if(e.charAt(n)==="\\"){n++}n++}t.push(e.substring(r,n+1))}else{const i=e.charAt(n);t.push(i)}n++}return t}function tt(e,t,n){return Ke.exec(e.charAt(0))&&e!=="true"&&e!=="false"&&e!=="this"&&e!==n&&t!=="."}function nt(r,o,i){if(o[0]==="["){o.shift();let e=1;let t=" return (function("+i+"){ return (";let n=null;while(o.length>0){const s=o[0];if(s==="]"){e--;if(e===0){if(n===null){t=t+"true"}o.shift();t+=")})";try{const l=On(r,function(){return Function(t)()},function(){return true});l.source=t;return l}catch(e){fe(te().body,"htmx:syntax:error",{error:e,source:t});return null}}}else if(s==="["){e++}if(tt(s,n,i)){t+="(("+i+"."+s+") ? ("+i+"."+s+") : (window."+s+"))"}else{t=t+s}n=o.shift()}}}function O(e,t){let n="";while(e.length>0&&!t.test(e[0])){n+=e.shift()}return n}function rt(e){let t;if(e.length>0&&Ye.test(e[0])){e.shift();t=O(e,Qe).trim();e.shift()}else{t=O(e,C)}return t}const ot="input, textarea, select";function it(e,t,n){const r=[];const o=et(t);do{O(o,Ze);const l=o.length;const u=O(o,/[,\[\s]/);if(u!==""){if(u==="every"){const c={trigger:"every"};O(o,Ze);c.pollInterval=d(O(o,/[,\[\s]/));O(o,Ze);var i=nt(e,o,"event");if(i){c.eventFilter=i}r.push(c)}else{const f={trigger:u};var i=nt(e,o,"event");if(i){f.eventFilter=i}O(o,Ze);while(o.length>0&&o[0]!==","){const a=o.shift();if(a==="changed"){f.changed=true}else if(a==="once"){f.once=true}else if(a==="consume"){f.consume=true}else if(a==="delay"&&o[0]===":"){o.shift();f.delay=d(O(o,C))}else if(a==="from"&&o[0]===":"){o.shift();if(Ye.test(o[0])){var s=rt(o)}else{var s=O(o,C);if(s==="closest"||s==="find"||s==="next"||s==="previous"){o.shift();const h=rt(o);if(h.length>0){s+=" "+h}}}f.from=s}else if(a==="target"&&o[0]===":"){o.shift();f.target=rt(o)}else if(a==="throttle"&&o[0]===":"){o.shift();f.throttle=d(O(o,C))}else if(a==="queue"&&o[0]===":"){o.shift();f.queue=O(o,C)}else if(a==="root"&&o[0]===":"){o.shift();f[a]=rt(o)}else if(a==="threshold"&&o[0]===":"){o.shift();f[a]=O(o,C)}else{fe(e,"htmx:syntax:error",{token:o.shift()})}O(o,Ze)}r.push(f)}}if(o.length===l){fe(e,"htmx:syntax:error",{token:o.shift()})}O(o,Ze)}while(o[0]===","&&o.shift());if(n){n[t]=r}return r}function st(e){const t=a(e,"hx-trigger");let n=[];if(t){const r=Q.config.triggerSpecsCache;n=r&&r[t]||it(e,t,r)}if(n.length>0){return n}else if(h(e,"form")){return[{trigger:"submit"}]}else if(h(e,'input[type="button"], input[type="submit"]')){return[{trigger:"click"}]}else if(h(e,ot)){return[{trigger:"change"}]}else{return[{trigger:"click"}]}}function lt(e){oe(e).cancelled=true}function ut(e,t,n){const r=oe(e);r.timeout=x().setTimeout(function(){if(se(e)&&r.cancelled!==true){if(!pt(n,e,Xt("hx:poll:trigger",{triggerSpec:n,target:e}))){t(e)}ut(e,t,n)}},n.pollInterval)}function ct(e){return location.hostname===e.hostname&&ee(e,"href")&&ee(e,"href").indexOf("#")!==0}function ft(e){return g(e,Q.config.disableSelector)}function at(t,n,e){if(t instanceof HTMLAnchorElement&&ct(t)&&(t.target===""||t.target==="_self")||t.tagName==="FORM"&&String(ee(t,"method")).toLowerCase()!=="dialog"){n.boosted=true;let r,o;if(t.tagName==="A"){r="get";o=ee(t,"href")}else{const i=ee(t,"method");r=i?i.toLowerCase():"get";o=ee(t,"action");if(o==null||o===""){o=location.href}if(r==="get"&&o.includes("?")){o=o.replace(/\?[^#]+/,"")}}e.forEach(function(e){gt(t,function(e,t){const n=ue(e);if(ft(n)){E(n);return}he(r,o,n,t)},n,e,true)})}}function ht(e,t){if(e.type==="submit"&&t.tagName==="FORM"){return true}else if(e.type==="click"){const n=t.closest('input[type="submit"], button');if(n&&n.form&&n.type==="submit"){return true}const r=t.closest("a");const o=/^#.+/;if(r&&r.href&&!o.test(r.getAttribute("href"))){return true}}return false}function dt(e,t){return oe(e).boosted&&e instanceof HTMLAnchorElement&&t.type==="click"&&(t.ctrlKey||t.metaKey)}function pt(e,t,n){const r=e.eventFilter;if(r){try{return r.call(t,n)!==true}catch(e){const o=r.source;fe(te().body,"htmx:eventFilter:error",{error:e,source:o});return true}}return false}function gt(l,u,e,c,f){const a=oe(l);let t;if(c.from){t=m(l,c.from)}else{t=[l]}if(c.changed){if(!("lastValue"in a)){a.lastValue=new WeakMap}t.forEach(function(e){if(!a.lastValue.has(c)){a.lastValue.set(c,new WeakMap)}a.lastValue.get(c).set(e,e.value)})}ie(t,function(i){const s=function(e){if(!se(l)){i.removeEventListener(c.trigger,s);return}if(dt(l,e)){return}if(f||ht(e,i)){e.preventDefault()}if(pt(c,l,e)){return}const t=oe(e);t.triggerSpec=c;if(t.handledFor==null){t.handledFor=[]}if(t.handledFor.indexOf(l)<0){t.handledFor.push(l);if(c.consume){e.stopPropagation()}if(c.target&&e.target){if(!h(ue(e.target),c.target)){return}}if(c.once){if(a.triggeredOnce){return}else{a.triggeredOnce=true}}if(c.changed){const n=e.target;const r=n.value;const o=a.lastValue.get(c);if(o.has(n)&&o.get(n)===r){return}o.set(n,r)}if(a.delayed){clearTimeout(a.delayed)}if(a.throttle){return}if(c.throttle>0){if(!a.throttle){ae(l,"htmx:trigger");u(l,e);a.throttle=x().setTimeout(function(){a.throttle=null},c.throttle)}}else if(c.delay>0){a.delayed=x().setTimeout(function(){ae(l,"htmx:trigger");u(l,e)},c.delay)}else{ae(l,"htmx:trigger");u(l,e)}}};if(e.listenerInfos==null){e.listenerInfos=[]}e.listenerInfos.push({trigger:c.trigger,listener:s,on:i});i.addEventListener(c.trigger,s)})}let mt=false;let yt=null;function xt(){if(!yt){yt=function(){mt=true};window.addEventListener("scroll",yt);window.addEventListener("resize",yt);setInterval(function(){if(mt){mt=false;ie(te().querySelectorAll("[hx-trigger*='revealed'],[data-hx-trigger*='revealed']"),function(e){bt(e)})}},200)}}function bt(e){if(!s(e,"data-hx-revealed")&&B(e)){e.setAttribute("data-hx-revealed","true");const t=oe(e);if(t.initHash){ae(e,"revealed")}else{e.addEventListener("htmx:afterProcessNode",function(){ae(e,"revealed")},{once:true})}}}function vt(e,t,n,r){const o=function(){if(!n.loaded){n.loaded=true;ae(e,"htmx:trigger");t(e)}};if(r>0){x().setTimeout(o,r)}else{o()}}function wt(t,n,e){let i=false;ie(de,function(r){if(s(t,"hx-"+r)){const o=a(t,"hx-"+r);i=true;n.path=o;n.verb=r;e.forEach(function(e){St(t,e,n,function(e,t){const n=ue(e);if(ft(n)){E(n);return}he(r,o,n,t)})})}});return i}function St(r,e,t,n){if(e.trigger==="revealed"){xt();gt(r,n,t,e);bt(ue(r))}else if(e.trigger==="intersect"){const o={};if(e.root){o.root=ce(r,e.root)}if(e.threshold){o.threshold=parseFloat(e.threshold)}const i=new IntersectionObserver(function(t){for(let e=0;e<t.length;e++){const n=t[e];if(n.isIntersecting){ae(r,"intersect");break}}},o);i.observe(ue(r));gt(ue(r),n,t,e)}else if(!t.firstInitCompleted&&e.trigger==="load"){if(!pt(e,r,Xt("load",{elt:r}))){vt(ue(r),n,t,e.delay)}}else if(e.pollInterval>0){t.polling=true;ut(ue(r),n,e)}else{gt(r,n,t,e)}}function Et(e){const t=ue(e);if(!t){return false}const n=t.attributes;for(let e=0;e<n.length;e++){const r=n[e].name;if(l(r,"hx-on:")||l(r,"data-hx-on:")||l(r,"hx-on-")||l(r,"data-hx-on-")){return true}}return false}const Ct=(new XPathEvaluator).createExpression('.//*[@*[ starts-with(name(), "hx-on:") or starts-with(name(), "data-hx-on:") or'+' starts-with(name(), "hx-on-") or starts-with(name(), "data-hx-on-") ]]');function Ot(e,t){if(Et(e)){t.push(ue(e))}const n=Ct.evaluate(e);let r=null;while(r=n.iterateNext())t.push(ue(r))}function Ht(e){const t=[];if(e instanceof DocumentFragment){for(const n of e.childNodes){Ot(n,t)}}else{Ot(e,t)}return t}function Tt(e){if(e.querySelectorAll){const n=", [hx-boost] a, [data-hx-boost] a, a[hx-boost], a[data-hx-boost]";const r=[];for(const i in jn){const s=jn[i];if(s.getSelectors){var t=s.getSelectors();if(t){r.push(t)}}}const o=e.querySelectorAll(R+n+", form, [type='submit'],"+" [hx-ext], [data-hx-ext], [hx-trigger], [data-hx-trigger]"+r.flat().map(e=>", "+e).join(""));return o}else{return[]}}function Rt(e){const t=At(e.target);const n=It(e);if(n){n.lastButtonClicked=t}}function qt(e){const t=It(e);if(t){t.lastButtonClicked=null}}function At(e){return g(ue(e),"button, input[type='submit']")}function Nt(e){return e.form||g(e,"form")}function It(e){const t=At(e.target);if(!t){return}const n=Nt(t);if(!n){return}return oe(n)}function Lt(e){e.addEventListener("click",Rt);e.addEventListener("focusin",Rt);e.addEventListener("focusout",qt)}function Dt(t,e,n){const r=oe(t);if(!Array.isArray(r.onHandlers)){r.onHandlers=[]}let o;const i=function(e){On(t,function(){if(ft(t)){return}if(!o){o=new Function("event",n)}o.call(t,e)})};t.addEventListener(e,i);r.onHandlers.push({event:e,listener:i})}function Pt(t){De(t);for(let e=0;e<t.attributes.length;e++){const n=t.attributes[e].name;const r=t.attributes[e].value;if(l(n,"hx-on")||l(n,"data-hx-on")){const o=n.indexOf("-on")+3;const i=n.slice(o,o+1);if(i==="-"||i===":"){let e=n.slice(o+1);if(l(e,":")){e="htmx"+e}else if(l(e,"-")){e="htmx:"+e.slice(1)}else if(l(e,"htmx-")){e="htmx:"+e.slice(5)}Dt(t,e,r)}}}}function kt(t){ae(t,"htmx:beforeProcessNode");const n=oe(t);const e=st(t);const r=wt(t,n,e);if(!r){if(ne(t,"hx-boost")==="true"){at(t,n,e)}else if(s(t,"hx-trigger")){e.forEach(function(e){St(t,e,n,function(){})})}}if(t.tagName==="FORM"||ee(t,"type")==="submit"&&s(t,"form")){Lt(t)}n.firstInitCompleted=true;ae(t,"htmx:afterProcessNode")}function Mt(e){if(!(e instanceof Element)){return false}const t=oe(e);const n=Le(e);if(t.initHash!==n){Pe(e);t.initHash=n;return true}return false}function Ft(e){e=S(e);if(ft(e)){E(e);return}const t=[];if(Mt(e)){t.push(e)}ie(Tt(e),function(e){if(ft(e)){E(e);return}if(Mt(e)){t.push(e)}});ie(Ht(e),Pt);ie(t,kt)}function Bt(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()}function Xt(e,t){return new CustomEvent(e,{bubbles:true,cancelable:true,composed:true,detail:t})}function fe(e,t,n){ae(e,t,le({error:t},n))}function Ut(e){return e==="htmx:afterProcessNode"}function Vt(e,t,n){ie(Jn(e,[],n),function(e){try{t(e)}catch(e){H(e)}})}function H(e){console.error(e)}function ae(e,t,n){e=S(e);if(n==null){n={}}n.elt=e;const r=Xt(t,n);if(Q.logger&&!Ut(t)){Q.logger(e,t,n)}if(n.error){H(n.error+(n.target?", "+n.target:""));ae(e,"htmx:error",{errorInfo:n})}let o=e.dispatchEvent(r);const i=Bt(t);if(o&&i!==t){const s=Xt(i,r.detail);o=o&&e.dispatchEvent(s)}Vt(ue(e),function(e){o=o&&(e.onEvent(t,r)!==false&&!r.defaultPrevented)});return o}let jt;function $t(e){jt=e;if(U()){sessionStorage.setItem("htmx-current-path-for-history",e)}}$t(location.pathname+location.search);function _t(){const e=te().querySelector("[hx-history-elt],[data-hx-history-elt]");return e||te().body}function zt(t,e){if(!U()){return}const n=Kt(e);const r=te().title;const o=window.scrollY;if(Q.config.historyCacheSize<=0){sessionStorage.removeItem("htmx-history-cache");return}t=V(t);const i=v(sessionStorage.getItem("htmx-history-cache"))||[];for(let e=0;e<i.length;e++){if(i[e].url===t){i.splice(e,1);break}}const s={url:t,content:n,title:r,scroll:o};ae(te().body,"htmx:historyItemCreated",{item:s,cache:i});i.push(s);while(i.length>Q.config.historyCacheSize){i.shift()}while(i.length>0){try{sessionStorage.setItem("htmx-history-cache",JSON.stringify(i));break}catch(e){fe(te().body,"htmx:historyCacheError",{cause:e,cache:i});i.shift()}}}function Jt(t){if(!U()){return null}t=V(t);const n=v(sessionStorage.getItem("htmx-history-cache"))||[];for(let e=0;e<n.length;e++){if(n[e].url===t){return n[e]}}return null}function Kt(e){const t=Q.config.requestClass;const n=e.cloneNode(true);ie(y(n,"."+t),function(e){b(e,t)});ie(y(n,"[data-disabled-by-htmx]"),function(e){e.removeAttribute("disabled")});return n.innerHTML}function Gt(){const e=_t();let t=jt;if(U()){t=sessionStorage.getItem("htmx-current-path-for-history")}t=t||location.pathname+location.search;const n=te().querySelector('[hx-history="false" i],[data-hx-history="false" i]');if(!n){ae(te().body,"htmx:beforeHistorySave",{path:t,historyElt:e});zt(t,e)}if(Q.config.historyEnabled)history.replaceState({htmx:true},te().title,location.href)}function Wt(e){if(Q.config.getCacheBusterParam){e=e.replace(/org\.htmx\.cache-buster=[^&]*&?/,"");if(Z(e,"&")||Z(e,"?")){e=e.slice(0,-1)}}if(Q.config.historyEnabled){history.pushState({htmx:true},"",e)}$t(e)}function Zt(e){if(Q.config.historyEnabled)history.replaceState({htmx:true},"",e);$t(e)}function Yt(e){ie(e,function(e){e.call(undefined)})}function Qt(e){const t=new XMLHttpRequest;const n={swapStyle:"innerHTML",swapDelay:0,settleDelay:0};const r={path:e,xhr:t,historyElt:_t(),swapSpec:n};t.open("GET",e,true);if(Q.config.historyRestoreAsHxRequest){t.setRequestHeader("HX-Request","true")}t.setRequestHeader("HX-History-Restore-Request","true");t.setRequestHeader("HX-Current-URL",location.href);t.onload=function(){if(this.status>=200&&this.status<400){r.response=this.response;ae(te().body,"htmx:historyCacheMissLoad",r);_e(r.historyElt,r.response,n,{contextElement:r.historyElt,historyRequest:true});$t(r.path);ae(te().body,"htmx:historyRestore",{path:e,cacheMiss:true,serverResponse:r.response})}else{fe(te().body,"htmx:historyCacheMissLoadError",r)}};if(ae(te().body,"htmx:historyCacheMiss",r)){t.send()}}function en(e){Gt();e=e||location.pathname+location.search;const t=Jt(e);if(t){const n={swapStyle:"innerHTML",swapDelay:0,settleDelay:0,scroll:t.scroll};const r={path:e,item:t,historyElt:_t(),swapSpec:n};if(ae(te().body,"htmx:historyCacheHit",r)){_e(r.historyElt,t.content,n,{contextElement:r.historyElt,title:t.title});$t(r.path);ae(te().body,"htmx:historyRestore",r)}}else{if(Q.config.refreshOnHistoryMiss){Q.location.reload(true)}else{Qt(e)}}}function tn(e){let t=ve(e,"hx-indicator");if(t==null){t=[e]}ie(t,function(e){const t=oe(e);t.requestCount=(t.requestCount||0)+1;w(e,Q.config.requestClass)});return t}function nn(e){let t=ve(e,"hx-disabled-elt");if(t==null){t=[]}ie(t,function(e){const t=oe(e);t.requestCount=(t.requestCount||0)+1;if(!e.hasAttribute("disabled")){e.setAttribute("disabled","");e.setAttribute("data-disabled-by-htmx","")}});return t}function rn(e,t){ie(e.concat(t),function(e){const t=oe(e);t.requestCount=(t.requestCount||1)-1});ie(e,function(e){const t=oe(e);if(t.requestCount===0){b(e,Q.config.requestClass)}});ie(t,function(e){const t=oe(e);if(t.requestCount===0&&e.hasAttribute("data-disabled-by-htmx")){e.removeAttribute("disabled");e.removeAttribute("data-disabled-by-htmx")}})}function on(t,n){for(let e=0;e<t.length;e++){const r=t[e];if(r.isSameNode(n)){return true}}return false}function sn(e){const t=e;if(t.name===""||t.name==null||t.disabled||g(t,"fieldset[disabled]")){return false}if(t.type==="button"||t.type==="submit"||t.tagName==="image"||t.tagName==="reset"||t.tagName==="file"){return false}if(t.type==="checkbox"||t.type==="radio"){return t.checked}return true}function ln(t,e,n){if(t!=null&&e!=null){if(Array.isArray(e)){e.forEach(function(e){n.append(t,e)})}else{n.append(t,e)}}}function un(t,n,r){if(t!=null&&n!=null){let e=r.getAll(t);if(Array.isArray(n)){e=e.filter(e=>n.indexOf(e)<0)}else{e=e.filter(e=>e!==n)}r.delete(t);ie(e,e=>r.append(t,e))}}function cn(e){if(e instanceof HTMLSelectElement&&e.multiple){return F(e.querySelectorAll("option:checked")).map(function(e){return e.value})}if(e instanceof HTMLInputElement&&e.files){return F(e.files)}return e.value}function fn(t,n,r,e,o){if(e==null||on(t,e)){return}else{t.push(e)}if(sn(e)){const i=ee(e,"name");ln(i,cn(e),n);if(o){an(e,r)}}if(e instanceof HTMLFormElement){ie(e.elements,function(e){if(t.indexOf(e)>=0){un(e.name,cn(e),n)}else{t.push(e)}if(o){an(e,r)}});new FormData(e).forEach(function(e,t){if(e instanceof File&&e.name===""){return}ln(t,e,n)})}}function an(e,t){const n=e;if(n.willValidate){ae(n,"htmx:validation:validate");if(!n.checkValidity()){if(ae(n,"htmx:validation:failed",{message:n.validationMessage,validity:n.validity})&&!t.length&&Q.config.reportValidityOfForms){n.reportValidity()}t.push({elt:n,message:n.validationMessage,validity:n.validity})}}}function hn(n,e){for(const t of e.keys()){n.delete(t)}e.forEach(function(e,t){n.append(t,e)});return n}function dn(e,t){const n=[];const r=new FormData;const o=new FormData;const i=[];const s=oe(e);if(s.lastButtonClicked&&!se(s.lastButtonClicked)){s.lastButtonClicked=null}let l=e instanceof HTMLFormElement&&e.noValidate!==true||a(e,"hx-validate")==="true";if(s.lastButtonClicked){l=l&&s.lastButtonClicked.formNoValidate!==true}if(t!=="get"){fn(n,o,i,Nt(e),l)}fn(n,r,i,e,l);if(s.lastButtonClicked||e.tagName==="BUTTON"||e.tagName==="INPUT"&&ee(e,"type")==="submit"){const c=s.lastButtonClicked||e;const f=ee(c,"name");ln(f,c.value,o)}const u=ve(e,"hx-include");ie(u,function(e){fn(n,r,i,ue(e),l);if(!h(e,"form")){ie(p(e).querySelectorAll(ot),function(e){fn(n,r,i,e,l)})}});hn(r,o);return{errors:i,formData:r,values:kn(r)}}function pn(e,t,n){if(e!==""){e+="&"}if(String(n)==="[object Object]"){n=JSON.stringify(n)}const r=encodeURIComponent(n);e+=encodeURIComponent(t)+"="+r;return e}function gn(e){e=Dn(e);let n="";e.forEach(function(e,t){n=pn(n,t,e)});return n}function mn(e,t,n){const r={"HX-Request":"true","HX-Trigger":ee(e,"id"),"HX-Trigger-Name":ee(e,"name"),"HX-Target":a(t,"id"),"HX-Current-URL":location.href};Cn(e,"hx-headers",false,r);if(n!==undefined){r["HX-Prompt"]=n}if(oe(e).boosted){r["HX-Boosted"]="true"}return r}function yn(n,e){const t=ne(e,"hx-params");if(t){if(t==="none"){return new FormData}else if(t==="*"){return n}else if(t.indexOf("not ")===0){ie(t.slice(4).split(","),function(e){e=e.trim();n.delete(e)});return n}else{const r=new FormData;ie(t.split(","),function(t){t=t.trim();if(n.has(t)){n.getAll(t).forEach(function(e){r.append(t,e)})}});return r}}else{return n}}function xn(e){return!!ee(e,"href")&&ee(e,"href").indexOf("#")>=0}function bn(e,t){const n=t||ne(e,"hx-swap");const r={swapStyle:oe(e).boosted?"innerHTML":Q.config.defaultSwapStyle,swapDelay:Q.config.defaultSwapDelay,settleDelay:Q.config.defaultSettleDelay};if(Q.config.scrollIntoViewOnBoost&&oe(e).boosted&&!xn(e)){r.show="top"}if(n){const s=X(n);if(s.length>0){for(let e=0;e<s.length;e++){const l=s[e];if(l.indexOf("swap:")===0){r.swapDelay=d(l.slice(5))}else if(l.indexOf("settle:")===0){r.settleDelay=d(l.slice(7))}else if(l.indexOf("transition:")===0){r.transition=l.slice(11)==="true"}else if(l.indexOf("ignoreTitle:")===0){r.ignoreTitle=l.slice(12)==="true"}else if(l.indexOf("scroll:")===0){const u=l.slice(7);var o=u.split(":");const c=o.pop();var i=o.length>0?o.join(":"):null;r.scroll=c;r.scrollTarget=i}else if(l.indexOf("show:")===0){const f=l.slice(5);var o=f.split(":");const a=o.pop();var i=o.length>0?o.join(":"):null;r.show=a;r.showTarget=i}else if(l.indexOf("focus-scroll:")===0){const h=l.slice("focus-scroll:".length);r.focusScroll=h=="true"}else if(e==0){r.swapStyle=l}else{H("Unknown modifier in hx-swap: "+l)}}}}return r}function vn(e){return ne(e,"hx-encoding")==="multipart/form-data"||h(e,"form")&&ee(e,"enctype")==="multipart/form-data"}function wn(t,n,r){let o=null;Vt(n,function(e){if(o==null){o=e.encodeParameters(t,r,n)}});if(o!=null){return o}else{if(vn(n)){return hn(new FormData,Dn(r))}else{return gn(r)}}}function Sn(e){return{tasks:[],elts:[e]}}function En(e,t){const n=e[0];const r=e[e.length-1];if(t.scroll){var o=null;if(t.scrollTarget){o=ue(ce(n,t.scrollTarget))}if(t.scroll==="top"&&(n||o)){o=o||n;o.scrollTop=0}if(t.scroll==="bottom"&&(r||o)){o=o||r;o.scrollTop=o.scrollHeight}if(typeof t.scroll==="number"){x().setTimeout(function(){window.scrollTo(0,t.scroll)},0)}}if(t.show){var o=null;if(t.showTarget){let e=t.showTarget;if(t.showTarget==="window"){e="body"}o=ue(ce(n,e))}if(t.show==="top"&&(n||o)){o=o||n;o.scrollIntoView({block:"start",behavior:Q.config.scrollBehavior})}if(t.show==="bottom"&&(r||o)){o=o||r;o.scrollIntoView({block:"end",behavior:Q.config.scrollBehavior})}}}function Cn(r,e,o,i,s){if(i==null){i={}}if(r==null){return i}const l=a(r,e);if(l){let e=l.trim();let t=o;if(e==="unset"){return null}if(e.indexOf("javascript:")===0){e=e.slice(11);t=true}else if(e.indexOf("js:")===0){e=e.slice(3);t=true}if(e.indexOf("{")!==0){e="{"+e+"}"}let n;if(t){n=On(r,function(){if(s){return Function("event","return ("+e+")").call(r,s)}else{return Function("return ("+e+")").call(r)}},{})}else{n=v(e)}for(const u in n){if(n.hasOwnProperty(u)){if(i[u]==null){i[u]=n[u]}}}}return Cn(ue(c(r)),e,o,i,s)}function On(e,t,n){if(Q.config.allowEval){return t()}else{fe(e,"htmx:evalDisallowedError");return n}}function Hn(e,t,n){return Cn(e,"hx-vars",true,n,t)}function Tn(e,t,n){return Cn(e,"hx-vals",false,n,t)}function Rn(e,t){return le(Hn(e,t),Tn(e,t))}function qn(t,n,r){if(r!==null){try{t.setRequestHeader(n,r)}catch(e){t.setRequestHeader(n,encodeURIComponent(r));t.setRequestHeader(n+"-URI-AutoEncoded","true")}}}function An(t){if(t.responseURL){try{const e=new URL(t.responseURL);return e.pathname+e.search}catch(e){fe(te().body,"htmx:badResponseUrl",{url:t.responseURL})}}}function T(e,t){return t.test(e.getAllResponseHeaders())}function Nn(t,n,r){t=t.toLowerCase();if(r){if(r instanceof Element||typeof r==="string"){return he(t,n,null,null,{targetOverride:S(r)||be,returnPromise:true})}else{let e=S(r.target);if(r.target&&!e||r.source&&!e&&!S(r.source)){e=be}return he(t,n,S(r.source),r.event,{handler:r.handler,headers:r.headers,values:r.values,targetOverride:e,swapOverride:r.swap,select:r.select,returnPromise:true,push:r.push,replace:r.replace,selectOOB:r.selectOOB})}}else{return he(t,n,null,null,{returnPromise:true})}}function In(e){const t=[];while(e){t.push(e);e=e.parentElement}return t}function Ln(e,t,n){const r=new URL(t,location.protocol!=="about:"?location.href:window.origin);const o=location.protocol!=="about:"?location.origin:window.origin;const i=o===r.origin;if(Q.config.selfRequestsOnly){if(!i){return false}}return ae(e,"htmx:validateUrl",le({url:r,sameHost:i},n))}function Dn(e){if(e instanceof FormData)return e;const t=new FormData;for(const n in e){if(e.hasOwnProperty(n)){if(e[n]&&typeof e[n].forEach==="function"){e[n].forEach(function(e){t.append(n,e)})}else if(typeof e[n]==="object"&&!(e[n]instanceof Blob)){t.append(n,JSON.stringify(e[n]))}else{t.append(n,e[n])}}}return t}function Pn(r,o,e){return new Proxy(e,{get:function(t,e){if(typeof e==="number")return t[e];if(e==="length")return t.length;if(e==="push"){return function(e){t.push(e);r.append(o,e)}}if(typeof t[e]==="function"){return function(){t[e].apply(t,arguments);r.delete(o);t.forEach(function(e){r.append(o,e)})}}if(t[e]&&t[e].length===1){return t[e][0]}else{return t[e]}},set:function(e,t,n){e[t]=n;r.delete(o);e.forEach(function(e){r.append(o,e)});return true}})}function kn(o){return new Proxy(o,{get:function(e,t){if(typeof t==="symbol"){const r=Reflect.get(e,t);if(typeof r==="function"){return function(){return r.apply(o,arguments)}}else{return r}}if(t==="toJSON"){return()=>Object.fromEntries(o)}if(t in e){if(typeof e[t]==="function"){return function(){return o[t].apply(o,arguments)}}}const n=o.getAll(t);if(n.length===0){return undefined}else if(n.length===1){return n[0]}else{return Pn(e,t,n)}},set:function(t,n,e){if(typeof n!=="string"){return false}t.delete(n);if(e&&typeof e.forEach==="function"){e.forEach(function(e){t.append(n,e)})}else if(typeof e==="object"&&!(e instanceof Blob)){t.append(n,JSON.stringify(e))}else{t.append(n,e)}return true},deleteProperty:function(e,t){if(typeof t==="string"){e.delete(t)}return true},ownKeys:function(e){return Reflect.ownKeys(Object.fromEntries(e))},getOwnPropertyDescriptor:function(e,t){return Reflect.getOwnPropertyDescriptor(Object.fromEntries(e),t)}})}function he(t,n,r,o,i,k){let s=null;let l=null;i=i!=null?i:{};if(i.returnPromise&&typeof Promise!=="undefined"){var e=new Promise(function(e,t){s=e;l=t})}if(r==null){r=te().body}const M=i.handler||Vn;const F=i.select||null;if(!se(r)){re(s);return e}const u=i.targetOverride||ue(Se(r));if(u==null||u==be){fe(r,"htmx:targetError",{target:ne(r,"hx-target")});re(l);return e}let c=oe(r);const f=c.lastButtonClicked;if(f){const A=ee(f,"formaction");if(A!=null){n=A}const N=ee(f,"formmethod");if(N!=null){if(de.includes(N.toLowerCase())){t=N}else{re(s);return e}}}const a=ne(r,"hx-confirm");if(k===undefined){const K=function(e){return he(t,n,r,o,i,!!e)};const G={target:u,elt:r,path:n,verb:t,triggeringEvent:o,etc:i,issueRequest:K,question:a};if(ae(r,"htmx:confirm",G)===false){re(s);return e}}let h=r;let d=ne(r,"hx-sync");let p=null;let B=false;if(d){const I=d.split(":");const L=I[0].trim();if(L==="this"){h=we(r,"hx-sync")}else{h=ue(ce(r,L))}d=(I[1]||"drop").trim();c=oe(h);if(d==="drop"&&c.xhr&&c.abortable!==true){re(s);return e}else if(d==="abort"){if(c.xhr){re(s);return e}else{B=true}}else if(d==="replace"){ae(h,"htmx:abort")}else if(d.indexOf("queue")===0){const W=d.split(" ");p=(W[1]||"last").trim()}}if(c.xhr){if(c.abortable){ae(h,"htmx:abort")}else{if(p==null){if(o){const D=oe(o);if(D&&D.triggerSpec&&D.triggerSpec.queue){p=D.triggerSpec.queue}}if(p==null){p="last"}}if(c.queuedRequests==null){c.queuedRequests=[]}if(p==="first"&&c.queuedRequests.length===0){c.queuedRequests.push(function(){he(t,n,r,o,i)})}else if(p==="all"){c.queuedRequests.push(function(){he(t,n,r,o,i)})}else if(p==="last"){c.queuedRequests=[];c.queuedRequests.push(function(){he(t,n,r,o,i)})}re(s);return e}}const g=new XMLHttpRequest;c.xhr=g;c.abortable=B;const m=function(){c.xhr=null;c.abortable=false;if(c.queuedRequests!=null&&c.queuedRequests.length>0){const e=c.queuedRequests.shift();e()}};const X=ne(r,"hx-prompt");if(X){var y=prompt(X);if(y===null||!ae(r,"htmx:prompt",{prompt:y,target:u})){re(s);m();return e}}if(a&&!k){if(!confirm(a)){re(s);m();return e}}let x=mn(r,u,y);if(t!=="get"&&!vn(r)){x["Content-Type"]="application/x-www-form-urlencoded"}if(i.headers){x=le(x,i.headers)}const U=dn(r,t);let b=U.errors;const V=U.formData;if(i.values){hn(V,Dn(i.values))}const j=Dn(Rn(r,o));const v=hn(V,j);let w=yn(v,r);if(Q.config.getCacheBusterParam&&t==="get"){w.set("org.htmx.cache-buster",ee(u,"id")||"true")}if(n==null||n===""){n=location.href}const S=Cn(r,"hx-request");const $=oe(r).boosted;let E=Q.config.methodsThatUseUrlParams.indexOf(t)>=0;const C={boosted:$,useUrlParams:E,formData:w,parameters:kn(w),unfilteredFormData:v,unfilteredParameters:kn(v),headers:x,elt:r,target:u,verb:t,errors:b,withCredentials:i.credentials||S.credentials||Q.config.withCredentials,timeout:i.timeout||S.timeout||Q.config.timeout,path:n,triggeringEvent:o};if(!ae(r,"htmx:configRequest",C)){re(s);m();return e}n=C.path;t=C.verb;x=C.headers;w=Dn(C.parameters);b=C.errors;E=C.useUrlParams;if(b&&b.length>0){ae(r,"htmx:validation:halted",C);re(s);m();return e}const _=n.split("#");const z=_[0];const O=_[1];let H=n;if(E){H=z;const Z=!w.keys().next().done;if(Z){if(H.indexOf("?")<0){H+="?"}else{H+="&"}H+=gn(w);if(O){H+="#"+O}}}if(!Ln(r,H,C)){fe(r,"htmx:invalidPath",C);re(l);m();return e}g.open(t.toUpperCase(),H,true);g.overrideMimeType("text/html");g.withCredentials=C.withCredentials;g.timeout=C.timeout;if(S.noHeaders){}else{for(const P in x){if(x.hasOwnProperty(P)){const Y=x[P];qn(g,P,Y)}}}const T={xhr:g,target:u,requestConfig:C,etc:i,boosted:$,select:F,pathInfo:{requestPath:n,finalRequestPath:H,responsePath:null,anchor:O}};g.onload=function(){try{const t=In(r);T.pathInfo.responsePath=An(g);M(r,T);if(T.keepIndicators!==true){rn(R,q)}ae(r,"htmx:afterRequest",T);ae(r,"htmx:afterOnLoad",T);if(!se(r)){let e=null;while(t.length>0&&e==null){const n=t.shift();if(se(n)){e=n}}if(e){ae(e,"htmx:afterRequest",T);ae(e,"htmx:afterOnLoad",T)}}re(s)}catch(e){fe(r,"htmx:onLoadError",le({error:e},T));throw e}finally{m()}};g.onerror=function(){rn(R,q);fe(r,"htmx:afterRequest",T);fe(r,"htmx:sendError",T);re(l);m()};g.onabort=function(){rn(R,q);fe(r,"htmx:afterRequest",T);fe(r,"htmx:sendAbort",T);re(l);m()};g.ontimeout=function(){rn(R,q);fe(r,"htmx:afterRequest",T);fe(r,"htmx:timeout",T);re(l);m()};if(!ae(r,"htmx:beforeRequest",T)){re(s);m();return e}var R=tn(r);var q=nn(r);ie(["loadstart","loadend","progress","abort"],function(t){ie([g,g.upload],function(e){e.addEventListener(t,function(e){ae(r,"htmx:xhr:"+t,{lengthComputable:e.lengthComputable,loaded:e.loaded,total:e.total})})})});ae(r,"htmx:beforeSend",T);const J=E?null:wn(g,r,w);g.send(J);return e}function Mn(e,t){const n=t.xhr;let r=null;let o=null;if(T(n,/HX-Push:/i)){r=n.getResponseHeader("HX-Push");o="push"}else if(T(n,/HX-Push-Url:/i)){r=n.getResponseHeader("HX-Push-Url");o="push"}else if(T(n,/HX-Replace-Url:/i)){r=n.getResponseHeader("HX-Replace-Url");o="replace"}if(r){if(r==="false"){return{}}else{return{type:o,path:r}}}const i=t.pathInfo.finalRequestPath;const s=t.pathInfo.responsePath;let l=t.etc.push||ne(e,"hx-push-url");let u=t.etc.replace||ne(e,"hx-replace-url");if(l==="false")l=null;if(u==="false")u=null;const c=oe(e).boosted;let f=null;let a=null;if(l){f="push";a=l}else if(u){f="replace";a=u}else if(c){f="push";a=s||i}if(a){if(a==="true"){a=s||i}if(t.pathInfo.anchor&&a.indexOf("#")===-1){a=a+"#"+t.pathInfo.anchor}return{type:f,path:a}}else{return{}}}function Fn(e,t){var n=new RegExp(e.code);return n.test(t.toString(10))}function Bn(e){for(var t=0;t<Q.config.responseHandling.length;t++){var n=Q.config.responseHandling[t];if(Fn(n,e.status)){return n}}return{swap:false}}function Xn(e){if(e){const t=f("title");if(t){t.textContent=e}else{window.document.title=e}}}function Un(e,t){if(t==="this"){return e}const n=ue(ce(e,t));if(n==null){fe(e,"htmx:targetError",{target:t});throw new Error(`Invalid re-target ${t}`)}return n}function Vn(t,e){const n=e.xhr;let r=e.target;const o=e.etc;const i=e.select;if(!ae(t,"htmx:beforeOnLoad",e))return;if(T(n,/HX-Trigger:/i)){ze(n,"HX-Trigger",t)}if(T(n,/HX-Location:/i)){let e=n.getResponseHeader("HX-Location");var s={};if(e.indexOf("{")===0){s=v(e);e=s.path;delete s.path}s.push=s.push??"true";Nn("get",e,s);return}const l=T(n,/HX-Refresh:/i)&&n.getResponseHeader("HX-Refresh")==="true";if(T(n,/HX-Redirect:/i)){e.keepIndicators=true;Q.location.href=n.getResponseHeader("HX-Redirect");l&&Q.location.reload();return}if(l){e.keepIndicators=true;Q.location.reload();return}const u=Mn(t,e);const c=Bn(n);const f=c.swap;let a=!!c.error;let h=Q.config.ignoreTitle||c.ignoreTitle;let d=c.select;if(c.target){e.target=Un(t,c.target)}var p=o.swapOverride;if(p==null&&c.swapOverride){p=c.swapOverride}if(T(n,/HX-Retarget:/i)){e.target=Un(t,n.getResponseHeader("HX-Retarget"))}if(T(n,/HX-Reswap:/i)){p=n.getResponseHeader("HX-Reswap")}var g=n.response;var m=le({shouldSwap:f,serverResponse:g,isError:a,ignoreTitle:h,selectOverride:d,swapOverride:p},e);if(c.event&&!ae(r,c.event,m))return;if(!ae(r,"htmx:beforeSwap",m))return;r=m.target;g=m.serverResponse;a=m.isError;h=m.ignoreTitle;d=m.selectOverride;p=m.swapOverride;e.target=r;e.failed=a;e.successful=!a;if(m.shouldSwap){if(n.status===286){lt(t)}Vt(t,function(e){g=e.transformResponse(g,n,t)});if(u.type){Gt()}var y=bn(t,p);if(!y.hasOwnProperty("ignoreTitle")){y.ignoreTitle=h}w(r,Q.config.swappingClass);if(i){d=i}if(T(n,/HX-Reselect:/i)){d=n.getResponseHeader("HX-Reselect")}const x=o.selectOOB||ne(t,"hx-select-oob");const b=ne(t,"hx-select");_e(r,g,y,{select:d==="unset"?null:d||b,selectOOB:x,eventInfo:e,anchor:e.pathInfo.anchor,contextElement:t,afterSwapCallback:function(){if(T(n,/HX-Trigger-After-Swap:/i)){let e=t;if(!se(t)){e=te().body}ze(n,"HX-Trigger-After-Swap",e)}},afterSettleCallback:function(){if(T(n,/HX-Trigger-After-Settle:/i)){let e=t;if(!se(t)){e=te().body}ze(n,"HX-Trigger-After-Settle",e)}},beforeSwapCallback:function(){if(u.type){ae(te().body,"htmx:beforeHistoryUpdate",le({history:u},e));if(u.type==="push"){Wt(u.path);ae(te().body,"htmx:pushedIntoHistory",{path:u.path})}else{Zt(u.path);ae(te().body,"htmx:replacedInHistory",{path:u.path})}}}})}if(a){fe(t,"htmx:responseError",le({error:"Response Status Error Code "+n.status+" from "+e.pathInfo.requestPath},e))}}const jn={};function $n(){return{init:function(e){return null},getSelectors:function(){return null},onEvent:function(e,t){return true},transformResponse:function(e,t,n){return e},isInlineSwap:function(e){return false},handleSwap:function(e,t,n,r){return false},encodeParameters:function(e,t,n){return null}}}function _n(e,t){if(t.init){t.init(n)}jn[e]=le($n(),t)}function zn(e){delete jn[e]}function Jn(e,n,r){if(n==undefined){n=[]}if(e==undefined){return n}if(r==undefined){r=[]}const t=a(e,"hx-ext");if(t){ie(t.split(","),function(e){e=e.replace(/ /g,"");if(e.slice(0,7)=="ignore:"){r.push(e.slice(7));return}if(r.indexOf(e)<0){const t=jn[e];if(t&&n.indexOf(t)<0){n.push(t)}}})}return Jn(ue(c(e)),n,r)}var Kn=false;te().addEventListener("DOMContentLoaded",function(){Kn=true});function Gn(e){if(Kn||te().readyState==="complete"){e()}else{te().addEventListener("DOMContentLoaded",e)}}function Wn(){if(Q.config.includeIndicatorStyles!==false){const e=Q.config.inlineStyleNonce?` nonce="${Q.config.inlineStyleNonce}"`:"";const t=Q.config.indicatorClass;const n=Q.config.requestClass;te().head.insertAdjacentHTML("beforeend",`<style${e}>`+`.${t}{opacity:0;visibility: hidden} `+`.${n} .${t}, .${n}.${t}{opacity:1;visibility: visible;transition: opacity 200ms ease-in}`+"</style>")}}function Zn(){const e=te().querySelector('meta[name="htmx-config"]');if(e){return v(e.content)}else{return null}}function Yn(){const e=Zn();if(e){Q.config=le(Q.config,e)}}Gn(function(){Yn();Wn();let e=te().body;Ft(e);const t=te().querySelectorAll("[hx-trigger='restored'],[data-hx-trigger='restored']");e.addEventListener("htmx:abort",function(e){const t=e.detail.elt||e.target;const n=oe(t);if(n&&n.xhr){n.xhr.abort()}});const n=window.onpopstate?window.onpopstate.bind(window):null;window.onpopstate=function(e){if(e.state&&e.state.htmx){en();ie(t,function(e){ae(e,"htmx:restored",{document:te(),triggerEvent:ae})})}else{if(n){n(e)}}};x().setTimeout(function(){ae(e,"htmx:load",{});e=null},0)});return Q}(); -
alpaca-bot/tags/0.5.0/readme.txt
r3113345 r3690657 2 2 Contributors: carmelosantana 3 3 Donate link: https://www.patreon.com/carmelosantana 4 Tags: ai, large language model, embedding, chatbot, ollama5 Requires at least: 6. 46 Tested up to: 6.5.57 Stable tag: 0. 4.178 Requires PHP: 8. 14 Tags: ai, large language model, chatbot, ollama, agent 5 Requires at least: 6.9 6 Tested up to: 7.1 7 Stable tag: 0.5.0 8 Requires PHP: 8.4 9 9 License: GPLv2 or later 10 10 License URI: https://www.gnu.org/licenses/gpl-2.0.html 11 11 12 A privately hosted WordPress AI chatbot. Chat with your own hosted LLMs and automate workflows with agents.12 A privately hosted WordPress AI chatbot. Chat with your own models, give them tools, and keep every conversation in your own database. 13 13 14 14 == Description == 15 15 16 Easily draft a post or page from any conversation. Dynamically create new content on the fly or with remote resources collected via `agents`. **Alpaca Bot** offers a familiar chat interface on both desktop and mobile. You can expect a seamless chat experience on any device! 17 18 An [Ollama](https://github.com/ollama/ollama) instance is required. [Ollama](https://github.com/ollama/ollama) makes it incredibly easy to self-host large language models locally or in the cloud. 19 20 ### Features 21 22 - Chose to store conversation history **privately** in your `wp_` database or not at all. 23 - Use `[alpacabot_agent]` to execute tasks on your behalf, generate dynamic content and more. 24 - Chat with dozens of pre-trained LLMs or [train your own](https://github.com/ollama/ollama/blob/main/docs/api.md#generate-embeddings). 25 - Switch conversational model on the fly. 26 - Create your own custom [system messages](https://github.com/ollama/ollama/blob/main/docs/modelfile.md#system) for highly predictable or formatted responses. 27 28 ### Usage 29 30 #### Text Completion 31 32 You have two options to communicate with your AI models; 33 34 1. Click **Alpaca Bot** found in the admin menu, below Dashboard and above Posts. 35 2. **Use the shortcode** `[alpacabot]` to generate a response within any post or page. 36 37 #### Agents 38 39 Use the `[alpacabot_agent]` shortcode to execute tasks on your behalf. Agents are a powerful way to empower your AI models to perform tasks on your behalf. 40 41 For example, you can use the `[alpacabot_agent]` shortcode to retrieve content from a remote source. `[alpacabot_agent]`s can interact directly with your models and help summarize a webpage or rewrite content. 42 43 ##### Example 44 45 Basic webpage summarization: 46 47 `[alpacabot_agent name=summarize model=tinyllama url=https://example.com/]` 48 49 ### Shortcodes 50 51 #### `[alpacabot]` - Chat with Alpaca Bot 52 53 *Chat with Alpaca Bot from any post or page.* 54 55 ##### Attributes 56 57 - `model` - The model to use for the text generation. *(optional)* 58 - `system` - Specifies the [system message](https://github.com/ollama/ollama/blob/main/docs/modelfile.md#system) that will be set in the template. *(optional)* 59 60 #### `[alpacabot_agent]` - Execute tasks on your behalf 61 62 *Execute tasks via Agents.* 63 64 ##### Attributes 65 66 The following are core attributes that are supported by all agents. 67 68 - `name` - The agent to execute. 69 70 Agent's communicating with [Ollama](https:/github.com/ollama/ollama) support `[alpacabot]` attributes. 71 72 #### Caching 73 74 Requests can be cached by setting the `cache` attribute. `cache` supports short and long term options. 75 76 By default responses are cached to the current post or page. 77 78 ##### Transient 79 80 Numeric values are treated as seconds and will cache the response for the specified duration. 81 82 - `cache=60` - Cache the response for 60 seconds. 83 - `cache=3600` - Cache the response for 1 hour. 84 85 ##### Post Meta 86 87 This is useful for caching responses permanently and associating them with a specific post or page. 88 89 - `cache=postmeta` - Cache to current post or page. 90 91 ##### Option 92 93 Use WordPress option storage to cache permanently but not associated with a specific post or page. 94 95 This can be useful for sharing responses across multiple pages. 96 97 - `cache=option` - Cache to WordPress options. 98 99 ##### Disable 100 101 The following values can disable caching. 102 103 - `cache=0` - Disable caching. 104 - `cache=disable` - Disable caching. 105 - `cache=false` - Disable caching. 106 107 ### Core Agents 108 109 The following are core agents that are provided by the **Alpaca Bot** plugin. 110 111 #### `get` 112 113 Retrieve content from a remote source. 114 115 ##### Attributes 116 117 - `url` - The URL to retrieve content from. 118 119 #### `summarize` 120 121 Summarize remote content. 122 123 ##### Attributes 124 125 - `url` - The URL to summarize. 126 - `length` - Describe the length of the summary. 127 - `content` - The type of content we want to summarize. 128 129 ### Support 130 131 If you need help or have questions, please join our [Discord](https://discord.gg/vWQTHphkVt) community. 132 133 Premium support and video calls are available to our [Patreon](https://www.patreon.com/carmelosantana) subscribers. We can help setup your [Ollama](https://github.com/ollama/ollama) instance, troubleshoot issues, demonstrate shortcode functionality and more. 134 135 Patreon's also receive; 136 137 - Access to our hosted [Ollama](https:/github.com/ollama/ollama) instances. 138 - Priority feature requests. 139 - Early access to new features and releases. 140 - Video and community support. 141 142 Please consider [becoming a Patreon](https://www.patreon.com/carmelosantana) today! 143 144 ### Made Possible By 16 **Alpaca Bot** is a chat screen inside WordPress admin, talking to a model you host. Conversations stay on your site, in your own database, and only their author can open them. It runs against [Ollama](https://github.com/ollama/ollama) out of the box, or any OpenAI-compatible endpoint. 17 18 = Features = 19 20 - A chat screen in wp-admin: replies stream in as they are written, with a copy button on every message and code block, "Edit and resend" on your own, and an image attached from the media library for a model that can see. 21 - Your conversations, stored **privately** on your site (or not at all: the Privacy tab decides) and listed in the screen's history. 22 - Switch models per conversation; where the site allows it, your pick is remembered as your default. 23 - A system prompt, per-model overrides (temperature, context window, keep-alive) and a receipt under every reply: model, tokens, time. 24 - Monthly usage caps, per site and per user, with the meter behind them. 25 - A REST API under `alpaca-bot/v1` ([docs/api.md](https://github.com/carmelosantana/alpaca-bot/blob/main/docs/api.md)) and a WP-CLI command. 26 27 = Requirements = 28 29 - PHP 8.4+, WordPress 6.9+, an Ollama instance (or any provider php-agents supports) 30 31 = Setup = 32 33 1. Install [Ollama](https://github.com/ollama/ollama) on your localhost or server. 34 2. In your WordPress admin, open `Alpaca Bot > Settings` and, on the Provider tab, enter the endpoint's base URL. For Ollama it ends in `/v1`: `http://localhost:11434/v1`. 35 3. Click `Save Changes`. The Models tab then lists what the provider serves; pick a default. 36 37 ⭐️ **[Become a Patreon](https://www.patreon.com/carmelosantana)** and support [Alpaca Bot](https://carmelosantana.com/alpaca-bot) development. ⭐️ 38 39 = Usage = 40 41 **The chat screen** 42 43 Click **Alpaca Bot** in the admin menu, below Dashboard and above Posts. The screen is open to every user who can edit posts (filter `alpaca_bot/admin/menu_capability` to change that). 44 45 - The **model** select in the header picks the model for this conversation; where the site allows it, your pick is saved as your default. The **history** select opens one of your earlier conversations, and **New chat** starts a fresh one. 46 - Type in the box at the foot of the screen. **Enter** sends, **Shift+Enter** adds a line, **Escape** clears the box. 47 - The image button attaches a picture from the media library to your next message, for a model that can see. The largest image the screen takes is set by the site's PHP `post_max_size`, not its upload limit: the image travels inside the message, not as an upload. 48 - Replies stream in as they are written. Every message has a **Copy** button, your own have **Edit and resend**, and a code block has its own copy button. Under a reply is its receipt: the model, the tokens it used and how long it took. 49 - The **Help** tab at the top right of the screen repeats this, and documents the shortcodes. 50 51 **Settings** 52 53 `Alpaca Bot > Settings` (administrators) is one page in six tabs: **Provider** (the endpoint, its key, the timeout), **Models** (the default, temperature, context window, keep-alive, and per-model overrides), **Chat** (system prompt, welcome text, what users may change), **Privacy** (whether conversations and the usage log are stored, and for how long), **Limits** (monthly token caps for the site and per user) and **Tools** (what the model may do besides answer — read the next section before you leave those as they come). Every field is also readable and writable over the REST API (`GET`/`PUT /settings`). 54 55 **Tools, and what they let the model reach** 56 57 `Settings > Tools` switches the model's tools on and off. Three ship, **all three on by default**: `web_fetch` reads one public web page as text, `summarize` condenses text through the model, and `draft_post` writes a draft. Read this section before you leave `web_fetch` on, and before you open the chat to a role. 58 59 **`web_fetch` makes the web server send a request, and hands the reply back.** Every URL is checked twice before the fetch — WordPress's own `wp_http_validate_url()`, then the plugin's own check over every address the name resolves to, on the first URL and on every redirect — and http(s) only, ports 80/443/8080 only, no private, loopback, link-local or other special-purpose address. What no check of that shape can cover is a name whose answer *changes* between the check and the connection: each is a separate DNS lookup, so a host under someone else's control, with a short TTL, can answer the checks with a public address and the connection with `127.0.0.1` or a cloud metadata address. The response body then comes back as text. Closing that means pinning the resolved address into the transport, which is a compatibility project and is planned for a later 0.x release. 60 61 Who can reach it, today, with no model involved: **anyone who can edit posts** — a Contributor included, since core grants Contributors `edit_posts` — can put `[alpacabot_agent name="get" url="…"]` in their own draft and preview it. So treat `web_fetch` as a capability you are granting your authors, not as something only the model uses. 62 63 **An egress policy is the supported mitigation**, and it is the one that holds for every plugin on the site at once: stop the web server's host from opening outbound connections to your private ranges and to `169.254.169.254`, at the network or the host firewall. On a cloud instance, require IMDSv2. If you cannot do that and do not need the tool, leave `web_fetch` off — the chat, the drafts and the summaries all work without it. 64 65 **Opening a route to a role opens the tools to that role too.** `alpaca_bot/capability/chat` (and `chat/stream`) can name any capability, `read` and `exist` included, and that is deliberate — it is how a site builds a subscriber-facing or public chat. But the toolkits a turn may call are chosen by the `toolkits.enabled` setting alone: there is no second capability check between a role that may chat and the tools that are switched on. So a role you admit only to converse gets `web_fetch` with it. Only `draft_post` checks a capability of its own (`edit_posts`/`edit_pages`) and refuses a role that lacks it. Until a later 0.x release adds a floor of its own, use the `alpaca_bot/toolkits` filter to take `web_fetch` away from the users you are opening the chat to: 66 67 add_filter( 'alpaca_bot/toolkits', function ( array $toolkits, int $user_id ): array { 68 if ( ! user_can( $user_id, 'edit_posts' ) ) { 69 unset( $toolkits['web_fetch'] ); 70 } 71 return $toolkits; 72 }, 10, 2 ); 73 74 **REST API and WP-CLI** 75 76 Everything the screen does is a route under `alpaca-bot/v1`: a turn (`POST /chat`, then its stream as server-sent events), conversations, models, settings and usage. [docs/api.md](https://github.com/carmelosantana/alpaca-bot/blob/main/docs/api.md) is the reference, with authentication, streaming and error examples. From the command line, `wp alpaca-bot chat|models|usage|settings` does the same. 77 78 = Shortcodes = 79 80 Both 0.4 shortcodes are back on the new pipeline. Both are for logged-in users who can edit posts (`edit_posts`); anyone else sees a notice. 81 82 **`[alpacabot prompt="…"]`** 83 84 Puts the model's answer to the prompt in a post or page. 85 86 * **`prompt`** -- The message sent to the model. Without it, the shortcode is the chat screen (below). 87 * **`model`** -- the viewing editor's model -- The model, where the site lets users change it (Settings › Chat); it must be one the provider lists. Without it, the answer runs on the model the editor who first views the page would chat on (their own preference where the site lets users change it, else the site's default), and the cache does not record which. 88 * **`system`** -- the site's system prompt -- The system prompt for this answer. 89 * **`temperature`** -- the model's setting -- The temperature for this answer, 0 to 2. 90 * **`format`** -- `markdown` -- `markdown` renders the answer (raw HTML stripped, links kept); `text` shows it as plain, escaped text. 91 * **`cache`** -- `1h` -- How long the answer is kept: a number with a unit (`45s`, `30m`, `1h`, `2d`), a year at most. `off` generates on every view. Anything else keeps the default. 92 93 **Generating an answer costs provider tokens** and counts against the monthly cap of the user viewing the page, so it is cached (a transient, per shortcode, per post and per `cache` duration) and served from the cache until it expires. Two identical shortcodes on two pages are two answers; changing the site's system prompt starts a new answer, changing its default model does not (the model is part of the answer's identity only when the shortcode names one). When a turn fails, the page shows why in the words the chat uses (the cap, a model the provider does not list, or a fixed "could not complete" message: the provider's own error, which quotes its endpoint, goes to the debug log under `WP_DEBUG`), and nothing is cached. 94 95 **The block editor and the REST API never generate.** `content.rendered` carries the cached answer, or a notice when there is none; an answer is generated only when the page is viewed on the site. So a client listing a hundred posts over the API spends nothing, and the editor's preview shows what the cache holds. 96 97 **A generation counts against the same per-minute limit as the chat.** Thirty a minute per user, shared with the chat screen, the REST routes and the abilities, and moved everywhere at once by the `alpaca_bot/rate_limit` filter (bucket `chat`). A cached answer costs nothing; a page carrying more shortcodes than the minute allows shows the rest as a "Too many requests" notice, caches nothing for them, and fills them in on a view after the minute turns over. 98 99 **Anyone who can write a post can write a prompt.** A Contributor can put a prompt, and a `system` prompt, in a draft; once it is published, the first user with `edit_posts` to view the page generates the answer, the tokens count against that viewer's cap, and the answer is on the page for everyone without anyone having read it first. The markdown is sanitised (no scripts, no raw HTML), but links and images the model writes reach the public page. Review a page after its answer appears. A per-site capability setting for this belongs to the admin-wide panel of a later 0.x release. 100 101 **A visitor never triggers a generation.** A visitor, or a logged-in user who cannot edit posts, sees a notice in place of the answer. A site that wants visitors to see the answer returns `true` from the `alpaca_bot/shortcode/allow_guests` filter (`(bool $allow, int $postId, string $tag)`); they then see the cached answer and nothing else. When the cache has expired, visitors see the notice again until someone who can edit posts opens the page. That is the point: a page nobody with the capability opens spends nothing, whatever the model costs. 102 103 add_filter('alpaca_bot/shortcode/allow_guests', '__return_true'); 104 105 **`[alpacabot]`** 106 107 With no `prompt`, the chat screen on a page, for logged-in users who can edit posts, with the same bundle and stylesheet as in wp-admin (a front-end design of its own is a later 0.x release). A visitor sees a login notice and loads nothing. The REST API and the block editor show a notice in its place, as for a prompt. The screen's markup carries the viewing user's REST nonce, as it does in wp-admin; it is useless without their cookies, but a full-page cache set to cache pages for logged-in users would store one editor's page and serve it to another, so leave a page carrying the shell out of such a cache. 108 109 **`[alpacabot_agent name="get|summarize" url="…" length="…"]` (deprecated)** 110 111 The 0.4 form still works, under the same rules and cache: `get` shows the page's readable text, `summarize` fetches it and asks the model for a summary (`length` is free text, "2 sentences"; `model` and `cache` as above). The fetch is the chat's `web_fetch` tool itself, so it runs only while that tool is on under Settings › Tools, and through the same address guard: a private, local or non-http(s) address is refused. It logs a deprecation notice once per request under `WP_DEBUG` and goes away in a later 0.x release. Put the text to summarize in a `prompt` instead, or open the URL in the chat, where the fetch and summarize tools read it for you: `[alpacabot prompt="Summarize https://…"]` would **not** work, since a shortcode's turn runs no tools and the model cannot open the URL. 112 113 = Support = 114 115 Questions and bug reports go to the [WordPress.org support forum](https://wordpress.org/support/plugin/alpaca-bot/). Say which plugin, WordPress and PHP versions you run. 116 117 For premium support, [book a call](https://carmelosantana.com/alpaca-bot): video calls, help setting up your [Ollama](https://github.com/ollama/ollama) instance or provider, troubleshooting, and onsite setup assistance. 118 119 If the plugin has been useful, [star Alpaca Bot on GitHub](https://github.com/carmelosantana/alpaca-bot); a star helps other site owners find it. 120 121 = Made Possible By = 145 122 146 123 - Emma Delaney's [How to Create Your Own ChatGPT in HTML CSS and JavaScript](https://emma-delaney.medium.com/how-to-create-your-own-chatgpt-in-html-css-and-javascript-78e32b70b4be) 147 - Google [Material Design Icons](https://material.io/resources/icons/?style=baseline) - Apache-2.0 license 148 - [Hint.css](https://github.com/chinchang/hint.css) A CSS only tooltip library - MIT license 149 - [TextRank](https://github.com/DavidBelicza/PHP-Science-TextRank) Automatic text summarization for PHP - MIT license 124 - [Lucide](https://lucide.dev) Beautiful & consistent icons - ISC license 125 - [htmx](https://htmx.org/) High power tools for HTML - 0BSD license 126 - [league/commonmark](https://commonmark.thephpleague.com/) Markdown parser for PHP - BSD-3-Clause license 127 - [php-agents](https://github.com/carmelosantana/php-agents) Provider-agnostic AI agents for PHP - MIT license 150 128 - [Ollama](https://github.com/ollama/ollama) Get up and running with large language models locally - MIT license 151 - [Parsedown](https://github.com/erusev/parsedown) A better Markdown parser - MIT license 152 153 == Installation == 154 155 ### Setup 156 157 1. Install [Ollama](https://github.com/ollama/ollama) on your localhost or server. 158 2. Add your [Ollama](https://github.com/ollama/ollama) API URL to the settings page by navigating to `Alpaca Bot > Settings` in your WordPress admin dashboard. 159 3. Enter your [Ollama](https://github.com/ollama/ollama) API URL. 160 4. Click `Save Changes`. 161 162 **[Become a Patreon](https://www.patreon.com/carmelosantana)** and support [Alpaca Bot](https://alpaca.bot/) development. ⭐️ 163 164 == Screenshots == 165 166 1. Main chat interface with model list, chat history and prompt input. 167 2. Chat interface with a conversation history. 168 3. Drafting a post from generated responses. 169 4. Override system message for custom responses. 170 5. Custom assistant settings. 171 6. Shortcode examples. 129 130 == Installation == 131 132 1. Check the site runs PHP 8.4 or newer and WordPress 6.9 or newer. Alpaca Bot loads nothing below PHP 8.4. 133 2. Have a model server ready: [Ollama](https://github.com/ollama/ollama) on your own host, or any OpenAI-compatible endpoint. On WordPress 7.0 and later you can instead use a provider plugin through core's AI client. 134 3. Install the plugin from your admin, or upload the zip under Plugins > Add New > Upload Plugin, and activate it. 135 4. Open `Alpaca Bot > Settings`. On the Provider tab enter the endpoint's base URL -- for Ollama it ends in `/v1`, as in `http://localhost:11434/v1` -- and save. 136 5. The Models tab now lists what the provider serves. Pick a default model. 137 6. Read the Tools part of the description before you leave the Tools tab as it comes, and before you open the chat to a role. 138 139 == Frequently Asked Questions == 140 141 = Do I need my own AI server? = 142 143 Yes. Alpaca Bot does not ship a model and sends nothing to a service of ours. Point it at an [Ollama](https://github.com/ollama/ollama) instance, or at any OpenAI-compatible endpoint, on the Provider tab. On WordPress 7.0 and later there is a second option: **WordPress AI provider** routes every turn through the AI client built into core, to whichever AI provider plugin the site has configured under Settings › Connectors. That path does not stream, because the WordPress client does not. 144 145 = What leaves my site? = 146 147 Whatever you type, and the recent messages of the conversation, go to the endpoint you configured, and nothing else. Conversations and usage receipts are rows in your own database. Turn conversation storage off entirely on the Privacy tab; a receipt is still written for every reply, because that is what the monthly caps count, and it never holds message text. 148 149 = Who can use it? = 150 151 The chat screen is open to anyone who can edit posts, which includes Contributors. The `alpaca_bot/admin/menu_capability` filter changes that. Settings is administrators only. Read **Tools, and what they let the model reach**, under Usage, before you open the chat to a role: a role admitted to chat gets the enabled tools with it. 152 153 = How do I stop it running up a bill? = 154 155 Three brakes, and they are independent. **Limits** sets a monthly token cap for the whole site and another per user, counted from the receipts and enforced on the server. A shared per-minute rate limit (thirty requests a user, moved by the `alpaca_bot/rate_limit` filter) covers the chat screen, the REST routes, the abilities and the shortcodes together. And **Tools** decides what the model may do besides answer. Shortcode answers are cached, and never generated for a visitor or for the REST API. 156 157 = I upgraded from 0.4. Where did my settings go? = 158 159 Into one option, moved automatically on the first request after the upgrade. Two things do not survive the move: 0.4's API username and password were sent as HTTP Basic and 0.5 sends a Bearer token instead, so the Provider tab starts with an empty **API key** for you to fill in. Your 0.4 conversations are kept, and become private to their author, which is what 0.5 enforces everywhere. 160 161 = The model answers with the text of a tool call instead of an answer. = 162 163 Some small models advertise tool support and then write the call out as prose. On the **Models** tab, set that model's **Tools** override to off; it beats whatever the provider claims. A model too small to use tools well is usually too small for the tools to be worth it. 164 165 There is a price as well as a symptom. All three tools are on by default, and their schemas go with every turn: measured on this plugin, about 790 extra prompt tokens each time, against 36 with tools off. On a large model that is noise in the bill; on a small one it is most of the prompt, which is why the answer degrades. Turning off the tools you do not use, under **Tools**, costs nothing and is worth doing before you tune anything else. 166 167 == Screenshots == 168 169 1. The chat screen: two turns, each reply streamed as the model writes it, and under each the receipt -- the model, the tokens it spent and how long it took. 170 2. Settings > Models: the default model, temperature, context window and keep-alive, with the per-model overrides table under them. 171 3. A turn that used the draft_post tool. The reply confirms the draft, and the receipt ends with the number of tools the turn ran. 172 173 == Changelog == 174 175 Releases before 0.5.0 are on the [releases page](https://github.com/carmelosantana/alpaca-bot/releases). 176 177 = 0.5.0 = 178 179 A ground-up rewrite. The 0.4 code is gone rather than refactored, so the list below is what an upgrading site notices, not a summary of every commit. 180 181 **Breaking** 182 183 - **PHP 8.4 and WordPress 6.9 are required.** The 0.4 listing asks for PHP 8.1 and WordPress 6.4. On PHP below 8.4 the plugin file loads nothing but an admin notice saying so. 184 - **The 0.4 classes are gone.** `AlpacaBot\Agents`, `AlpacaBot\Api\*`, `AlpacaBot\Define`, `AlpacaBot\Help`, `AlpacaBot\Log\Post` and `AlpacaBot\Utils\*` were deleted, and with them the `alpaca_bot_*` hooks they applied. What 0.5 fires is in [docs/hooks.md](https://github.com/carmelosantana/alpaca-bot/blob/main/docs/hooks.md), generated from the call sites. 185 - **The REST routes changed.** The namespace is still `alpaca-bot/v1`, but 0.4's `htmx/*` and `wp/*` fragment endpoints are gone. 0.5 serves `/chat`, `/chat/{id}/stream`, `/conversations`, `/conversations/{id}`, `/models`, `/settings`, `/settings/schema`, `/usage` and a `/view/*` group; [docs/api.md](https://github.com/carmelosantana/alpaca-bot/blob/main/docs/api.md) is the reference. 186 - **Settings moved into a single option** and are migrated automatically on the first request after the upgrade. 0.4's API username and password are not carried over — they went out as HTTP Basic, and 0.5's key goes out as a Bearer token, so an empty field you must fill is better than a populated one that cannot authenticate. 0.4's "Limit chat history" becomes **Messages sent to the model**. 187 - **Existing conversations become private.** 0.4 stored them as published posts; the migration flips each to private and gives it an author, because 0.5 lets only a conversation's own author open it. A large history is moved a hundred rows per request rather than in one. 188 - **`[alpacabot]` no longer reads the shortcode's content as the prompt.** 0.4 sent the text between the tags; 0.5 reads a `prompt` attribute, and with no `prompt` it renders the chat screen on the page. An enclosing `[alpacabot]…[/alpacabot]` left over from 0.4 therefore renders a chat screen, not an answer. 189 - **A shortcode never generates for a visitor.** Generating costs tokens, so it needs a logged-in viewer who can edit posts. Anyone else sees a notice, or the answer an editor already cached where the site returns true from the `alpaca_bot/shortcode/allow_guests` filter. The REST API and the block editor never generate either, whoever is asking. 190 - **The shortcode `cache` attribute changed, and so did its default.** This is the one that costs money. In 0.4 a bare `[alpacabot]` cached its answer permanently — in the post's meta inside the loop, in an option outside it — so a page generated once and never again. In 0.5 the default is a one-hour transient: the same page regenerates every hour, at the provider's price, the next time a viewer who may generate opens it. Write `cache="365d"` for the old behaviour, which is the longest 0.5 accepts. The spellings changed with it: 0.4 read `postmeta`, `option`, a number of seconds, and `0`, `disable` or `false` to switch caching off, while 0.5 caches in a transient only, for a duration written as `45s`, `30m`, `1h` or `2d`. `off` is now the only word that disables it, and 0.4's five other spellings — `postmeta`, `option`, `0`, `disable` and `false` — all fall through to that one-hour default. 191 - **`[alpacabot_agent]` is deprecated.** It still fetches its URL and still asks the model for a `summarize`, but it logs a deprecation notice and goes away in a later 0.x release. Its fetch is now the `web_fetch` tool, so it does nothing while that tool is off under Settings › Tools, and it refuses a private, local or non-http(s) address. 192 193 **Added** 194 195 - A rewritten chat screen in wp-admin. Replies stream in over server-sent events as the model writes them, with a copy button on every message and code block, "Edit and resend" on your own, a thinking model's reasoning in a fold of its own, and an image attached from the media library for a model that can see. 196 - A receipt under every reply: the model, the tokens it spent, how long it took, and how many tools it ran. 197 - Conversations stored as private posts owned by their author, listed in the screen's history, with the transcript sent to the model bounded by a setting. 198 - A usage meter with monthly token caps for the site and per user, enforced on the server, and a daily cleanup that keeps receipts for as long as the Privacy tab says. 199 - A Settings API page in six tabs — Provider, Models, Chat, Privacy, Limits, Tools — with per-model overrides for temperature, context window, keep-alive, system prompt and tool support. 200 - Tools the model can call: `web_fetch` reads one public web page as text under a two-stage address guard, `summarize` condenses text through the model, and `draft_post` writes a draft it never publishes. All three are on by default and switchable per site. 201 - Three WordPress abilities — `alpaca-bot/chat`, `alpaca-bot/summarize` and `alpaca-bot/draft-post` — so other plugins and the MCP adapter can call the same code the screen does. 202 - A REST API under `alpaca-bot/v1` covering everything the screen does, and `wp alpaca-bot chat|models|usage|settings` on the command line. 203 - A per-minute rate limit shared by the chat screen, the REST routes, the abilities and the shortcodes, under one `alpaca_bot/rate_limit` filter. 204 - Both 0.4 shortcodes, back on the new pipeline: `[alpacabot]` for an answer in a page or the chat screen on it, and the `[alpacabot_agent]` shim above. 205 - The plugin's own dependencies are namespace-prefixed, so php-agents or CommonMark installed by another plugin cannot collide with the copies shipped here. 206 207 == Upgrade Notice == 208 209 = 0.5.0 = 210 211 A rewrite needing PHP 8.4 and WordPress 6.9; back up first. Settings and conversations migrate; your API username and password do not, so re-enter the key on the Provider tab or chat fails. [alpacabot] now takes a prompt attribute and never generates for visitors; [alpacabot_agent] is deprecated. -
alpaca-bot/trunk/alpaca-bot.php
r3113345 r3690657 3 3 Plugin Name: Alpaca Bot 4 4 Plugin URI: https://github.com/carmelosantana/alpaca-bot 5 Description: A privately hosted WordPress AI chatbot. 6 Version: 0. 4.175 Description: A privately hosted WordPress AI chatbot. Chat with your own models, ground answers in your site, and keep control of cost. 6 Version: 0.5.0 7 7 Author: Carmelo Santana 8 8 Author URI: https://carmelosantana.com/ 9 License: GNU General Public License v2 or later 10 License URI: http://www.gnu.org/licenses/gpl-2.0.html 11 Requires at least: 6.4 9 License: GPL-2.0-or-later 10 License URI: https://www.gnu.org/licenses/gpl-2.0.html 11 Text Domain: alpaca-bot 12 Requires at least: 6.9 13 Requires PHP: 8.4 12 14 */ 13 15 14 if (!defined('ABSPATH')) exit; // Exit if accessed directly 16 declare(strict_types=1); 15 17 16 // Defines 17 define('ALPACA_BOT', 'alpaca-bot'); 18 define('ALPACA_BOT_TITLE', 'Alpaca Bot'); 19 define('ALPACA_BOT_DIR_URL', plugin_dir_url(__FILE__)); 20 define('ALPACA_BOT_DIR_PATH', plugin_dir_path(__FILE__)); 18 if (!defined('ABSPATH')) { 19 exit; 20 } 21 21 22 // Composer 23 if (!file_exists($composer = plugin_dir_path(__FILE__) . 'vendor/autoload.php')) { 24 // display error message when activating plugin 25 trigger_error( 26 sprintf( 27 /* translators: %s: plugin name */ 28 esc_html__('Error locating %s autoloader. Please run <code>composer install</code>.', 'alpaca-bot'), 29 esc_html__('Alpaca Bot', 'alpaca-bot') 30 ), 31 E_USER_ERROR 32 ); 22 if (PHP_VERSION_ID < 80400) { 23 add_action('admin_notices', static function (): void { 24 echo '<div class="notice notice-error"><p>' . esc_html__('Alpaca Bot 0.5 requires PHP 8.4 or newer. The plugin is inactive.', 'alpaca-bot') . '</p></div>'; 25 }); 26 return; 33 27 } 34 require $composer;35 28 36 add_action('plugins_loaded', function () { 37 new \AlpacaBot\AlpacaBot(); 38 }, 9); 29 define('ALPACA_BOT_FILE', __FILE__); 30 define('ALPACA_BOT_DIR', plugin_dir_path(__FILE__)); 31 define('ALPACA_BOT_URL', plugin_dir_url(__FILE__)); 32 33 // The plugin's own classes: a PSR-4 loader for AlpacaBot\ over src/, registered here rather 34 // than by requiring vendor/autoload.php. Composer's autoloader is dev/test only (tests/Pest.php 35 // loads it): at runtime it would register every third-party namespace unprefixed (php-agents, 36 // commonmark, symfony, psr) next to the strauss-prefixed copies and eagerly require the vendor 37 // polyfill bootstraps and function files, on every request, for every other plugin on the site 38 // to collide with. That is the conflict vendor-prefixed/ exists to prevent. 39 spl_autoload_register(static function (string $class): void { 40 if (!str_starts_with($class, 'AlpacaBot\\') || str_starts_with($class, 'AlpacaBot\\Vendor\\')) { 41 return; 42 } 43 $file = ALPACA_BOT_DIR . 'src/' . strtr(substr($class, strlen('AlpacaBot\\')), '\\', '/') . '.php'; 44 if (is_file($file)) { 45 require $file; 46 } 47 }); 48 49 // Third-party code, prefixed under AlpacaBot\Vendor\ by strauss (composer install builds it on 50 // a dev checkout; the release zip ships it). This is the only autoloader file the runtime loads. 51 $alpaca_bot_prefixed = ALPACA_BOT_DIR . 'vendor-prefixed/autoload.php'; 52 if (!is_readable($alpaca_bot_prefixed)) { 53 add_action('admin_notices', static function (): void { 54 echo '<div class="notice notice-error"><p>' . esc_html__('Alpaca Bot: vendor-prefixed/ is missing. Run composer install (dev checkout) or reinstall the release zip.', 'alpaca-bot') . '</p></div>'; 55 }); 56 return; 57 } 58 require_once $alpaca_bot_prefixed; 59 60 \AlpacaBot\Plugin::boot(); 61 register_deactivation_hook(__FILE__, [\AlpacaBot\Plugin::class, 'deactivate']); -
alpaca-bot/trunk/assets/css/alpaca-bot.css
r3075126 r3690657 1 :root { 2 /* Colors */ 3 --chat-container-bg: #FFFFFF; 4 --chat-textarea-bg: #F7F7F8; 5 --console: #1EFF00; 6 --lighter-gray: #D9D9E3; 7 8 /* WordPress colors */ 9 --wp-blue: #0073aa; 10 --wp-menu-blue: #2271b1; 11 --wp-medium-blue: #00a0d2; 12 --wp-ultra-dark-gray: #191e23; 13 --wp-dark-gray: #23282d; 14 --wp-base-gray: #32373c; 15 --wp-dark-silver-gray: #82878c; 16 --wp-silver-gray: #a0a5aa; 17 --wp-light-silver-gray: #b4b9be; 18 --wp-accent-red: #dc3232; 19 --wp-accent-orange: #f56e28; 20 --wp-accent-yellow: #ffb900; 21 --wp-accent-green: #46B450; 22 --wp-accent-purple: #826eb4; 23 24 /* Size */ 25 --max-container-width: 800px; 26 } 27 28 /* Basic animation */ 29 .fadeIn { 30 visibility: visible; 31 opacity: 1; 32 transition: opacity 0.33s ease-in-out; 33 } 34 35 .fadeOut { 36 visibility: hidden; 37 opacity: 0; 38 transition: visibility 0s 2.6s, opacity 2.6s ease-in-out; 39 } 40 41 .keyframesFadeOut { 42 animation: fadeOut 2.6s; 43 } 44 45 @keyframes fadeOut { 46 0% { 47 opacity: 1; 48 } 49 50 100% { 51 opacity: 0; 52 } 53 } 54 55 /* https://stackoverflow.com/a/17260048/1007492 */ 56 .clipOut { 57 clip: rect(auto, auto, 0, auto); 58 transition-property: clip; 59 transition-duration: 0.46s; 60 transition-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1.275); 61 } 62 63 .maxHeightOut { 64 max-height: 0; 65 transition: max-height 0.26s ease-out; 66 overflow: hidden; 67 } 68 69 /* https://jsfiddle.net/dotnetCarpenter/PhyQc/9/ */ 70 .scaleY { 71 -webkit-transform: scaleY(0); 72 -o-transform: scaleY(0); 73 -ms-transform: scaleY(0); 74 transform: scaleY(0); 75 76 -webkit-transform-origin: top; 77 -o-transform-origin: top; 78 -ms-transform-origin: top; 79 transform-origin: top; 80 81 -webkit-transition: -webkit-transform 0.26s ease-out; 82 -o-transition: -o-transform 0.26s ease; 83 -ms-transition: -ms-transform 0.26s ease; 84 transition: transform 0.26s ease; 85 } 86 87 /* https://stackoverflow.com/a/30531678/1007492 */ 88 .shrinkOut { 89 margin: 0; 90 opacity: 0; 91 padding: 0; 92 /* fade out, then shrink */ 93 transition: opacity .25s, 94 font-size .5s .25s, 95 margin .5s .25s, 96 visibility 0s 2s, 97 padding .5s .25s; 98 } 99 100 /* Custom admin menu icons */ 101 #toplevel_page_alpaca-bot .wp-menu-image>img { 102 width: 20px; 103 height: 20px; 104 filter: invert(100%); 105 } 106 107 /* Primary wrap */ 108 #ab-chat-container { 109 min-height: 61vh; 110 } 111 112 /* Welcome message */ 113 #ab-hello p { 114 color: #646970; 115 font-size: 1.5rem; 116 font-style: normal; 117 margin: 0; 118 text-align: center; 119 } 120 121 #ab-hello img { 122 padding: 2em; 123 display: block; 124 margin: 0 auto; 125 width: 128px; 126 height: 128px; 127 border-radius: 50%; 128 } 129 130 /* Loading indicator */ 131 #indicator { 132 padding: 2em; 133 display: block; 134 margin: 1em auto; 135 width: 28px; 136 height: 28px; 137 } 138 139 /* Toolbar (model select, chat history select) */ 140 .ab-toolbar { 141 min-height: 40px; 142 margin: 20px 0 30px 0; 143 } 144 145 .ab-toolbar select { 146 font-size: 1.1em; 147 width: 240px; 148 height: 35px; 149 border: 1px solid var(--wp-light-silver-gray); 150 border-radius: 5px; 151 vertical-align: top; 152 } 153 154 .ab-toolbar p { 155 display: block; 156 margin: 0.75em 0 0 0.5em; 157 font-size: .95em; 158 color: var(--wp-base-gray); 159 } 160 161 .ab-toolbar #set_default_model:hover { 162 color: var(--wp-blue); 163 cursor: pointer; 164 } 165 166 .ab-toolbar .ab-tags { 167 float: left; 168 } 169 170 .ab-toolbar .ab-chat-logs, 171 #set_default_model { 172 float: right; 173 } 174 175 .ab-toolbar p, 176 .ab-toolbar select { 177 display: inline-block; 178 } 179 180 .ab-toolbar p { 181 margin-right: .5em; 182 } 183 184 #ab-response { 185 max-width: var(--max-container-width); 186 margin: 0 auto; 187 } 188 189 .toplevel_page_alpaca-bot #wpfooter #footer-left { 190 color: var(--wp-silver-gray); 191 font-size: .75rem; 192 } 193 194 .htmx-indicator { 195 display: none; 196 } 197 198 .htmx-request .htmx-indicator, 199 .htmx-request.htmx-indicator { 200 display: inline; 201 } 202 203 .ab-chat-message { 204 margin: .6em 0; 205 } 206 207 .ab-chat-message-response, 208 .ab-chat-message-response div, 209 .ab-chat-message-response p { 210 line-height: 1.31rem; 211 } 212 213 .ab-chat-message-response p { 214 margin: .7rem 0; 215 } 216 217 .ab-chat-message .notice { 218 margin: 1em 0; 219 } 220 221 .ab-chat-message-response img { 222 display: block; 223 margin: 0 auto; 224 border-radius: 4px; 225 width: 200px; 226 } 227 228 /* gravatar column should stretch to the bottom, forcing all elements to line up against */ 229 .ab-chat-message-gravatar { 230 float: left; 231 height: 100%; 232 margin-right: 1em; 233 } 234 235 .ab-chat-message-gravatar img { 236 width: 38px; 237 height: 38px; 238 border-radius: 50%; 239 } 240 241 .ab-chat-message-parts { 242 margin-left: 38px; 1 /* 2 * Alpaca Bot chat shell (0.5). Every selector here is emitted by src/View/Chat/*, 3 * src/View/Icon.php, or resources/ts/{chat,dom,highlight}.ts; the markdown elements are 4 * Markdown::allowedTags(). The accent comes from core's --wp-admin-theme-color and its 5 * derivatives, set on <body> for every admin colour scheme, so the screen follows whichever 6 * one the user picked; the Default scheme's values stand behind them as fallbacks so a missing 7 * variable cannot blank a control -- which is also what makes the file usable off wp-admin, 8 * where none of those variables exist. The surfaces, text and borders are core's fixed greys, 9 * which do not change between schemes. 10 * 11 * Two places load this, and one of them is not wp-admin: the admin chat screen 12 * (Admin\Assets::enqueue()) and a front-end page carrying `[alpacabot]` with no prompt 13 * (Admin\Assets::enqueueFront()). Everything below is shared but the height arithmetic on 14 * .ab-wrap, which subtracts wp-admin's chrome from the viewport, and one narrow-screen rule on 15 * `.wrap.ab-wrap` that serves it; the front end has no #wpfooter and the shell there is a block 16 * inside a page rather than the whole screen, so .ab-wrap--front (near the foot of this file) 17 * replaces the height, and has no .wrap for the other rule to match. View\Chat\Shell puts that 18 * modifier on, and leaves core's .wrap off, for a shell it was told is not on the admin screen. 19 */ 20 21 .ab-wrap { 22 /* The fallbacks are core's Default scheme; without one a missing variable would blank the send button. */ 23 --ab-accent: var(--wp-admin-theme-color, #2271b1); 24 --ab-accent-dark: var(--wp-admin-theme-color-darker-10, #135e96); 25 --ab-accent-rgb: var(--wp-admin-theme-color--rgb, 34, 113, 177); 26 --ab-focus-width: var(--wp-admin-border-width-focus, 2px); 27 --ab-surface: #f0f0f1; 28 --ab-panel: #fff; 29 --ab-text: #1d2327; 30 --ab-muted: #646970; 31 --ab-border: #c3c4c7; 32 --ab-code-bg: #1d2327; 33 --ab-code-text: #f0f0f1; 34 --ab-max: 800px; 35 --ab-admin-bar: 32px; 36 /* #wpbody-content's padding-bottom, where core parks #wpfooter. */ 37 --ab-footer: 65px; 38 /* What sits between the admin bar and the wrap's top edge besides the margin moved inside below: nothing, until narrow screens put the Help tab's row there (#screen-meta-links, which core prints only for a screen with help tabs or screen options; here that is the tabs HelpTabs registers). */ 39 --ab-cleared: 0px; 243 40 display: flex; 244 41 flex-direction: column; 245 } 246 247 /* .ab-chat-message-tools needs to make space for gravatar on left 38px */ 248 .ab-chat-message-tools { 249 color: var(--wp-light-silver-gray); 250 margin: 1em 0; 251 justify-content: space-between; 252 transition: opacity 0.3s ease-in; 253 transition: opacity 0.1s ease-out; 254 } 255 256 /* increase opacity on tools when hovering over parent message */ 257 .ab-chat-message:hover .ab-chat-message-tools { 258 color: var(--wp-dark-gray); 259 } 260 261 /* transition tool span changes */ 262 .ab-chat-message-tools span.tools { 263 font-size: 1.25rem; 264 color: var(--wp-dark-silver-gray); 265 cursor: pointer; 266 transition: color 0.3s ease-in-out; 267 margin-right: .3em; 268 } 269 270 .ab-chat-message-tools span:hover { 271 color: var(--wp-dark-gray); 272 } 273 274 .ab-chat-message-tools span.rotate-push-pin { 275 transform: rotate(33deg); 276 } 277 278 .ab-chat-message-username { 279 font-size: 1.1em; 280 font-weight: bold; 281 line-height: 1.3em; 282 text-transform: capitalize; 283 } 284 285 .ab-chat-message-username .model { 286 color: var(--wp-silver-gray); 287 font-family: monospace; 288 font-size: .82em; 289 font-weight: normal; 290 text-transform: none; 291 margin-left: .33em; 292 } 293 294 .alpaca-bot-options p.description { 295 margin: .6em .3em; 296 } 297 298 .alpaca-bot-options p.description.inline { 299 display: inline; 300 } 301 302 .alpaca-bot-options p.description span { 303 vertical-align: middle; 304 margin-right: .1em; 305 position: relative; 306 display: inline-block; 307 } 308 309 .alpaca-bot-options p.description span.label-success { 310 color: #46B450; 311 } 312 313 .alpaca-bot-options p.description span.label-error { 314 color: #dc3232; 315 } 316 317 .alpaca-bot-options pre.console, 318 .toplevel_page_alpaca-bot .console { 319 background-color: var(--wp-ultra-dark-gray); 320 padding: 1em; 321 border-radius: 5px; 322 font-family: monospace; 323 font-weight: bold; 324 color: limegreen; 325 text-shadow: 0px 0px .8em var(--console); 326 cursor: pointer; 327 } 328 329 /* 330 Typing container styling 331 https://emma-delaney.medium.com/how-to-create-your-own-chatgpt-in-html-css-and-javascript-78e32b70b4be 332 */ 333 .typing-container { 334 position: -webkit-sticky; 335 position: sticky; 336 bottom: 1em; 337 width: calc(100% - 20px); 338 display: flex; 339 justify-content: center; 340 z-index: 10; 341 margin-top: 1em; 342 } 343 344 .typing-container .typing-content { 345 display: flex; 346 max-width: var(--max-container-width); 347 width: 100%; 348 align-items: flex-end; 349 } 350 351 .typing-container .typing-textarea { 352 width: 100%; 353 display: flex; 354 position: relative; 355 } 356 357 .typing-textarea textarea { 358 resize: none; 359 height: 42px; 360 width: 100%; 361 border: none; 362 padding: 10px 35px 5px 40px; 363 color: var(--wp-base-gray); 364 font-size: 1rem; 365 border-radius: 4px; 366 max-height: 250px; 367 overflow-y: auto; 368 background: var(--chat-textarea-bg); 369 outline: 1px solid var(--lighter-gray); 370 line-height: 1.3rem; 371 } 372 373 .typing-textarea textarea::placeholder { 374 color: var(--wp-dark-silver-gray); 375 } 376 377 /* clear all button styles in .typing-textarea */ 378 .typing-textarea button { 379 background: none; 380 border: none; 381 padding: 0; 382 margin: 0; 383 } 384 385 .typing-content button, 386 .typing-content span { 387 width: 43px; 388 height: 43px; 389 display: flex; 390 font-size: 1.4rem; 42 box-sizing: border-box; 43 height: calc(100vh - var(--ab-admin-bar) - var(--ab-cleared) - var(--ab-footer)); 44 /* .wrap's own 10px top margin, moved inside so the height above is the whole space; the narrow-screen block takes it back. */ 45 margin-top: 0; 46 padding-top: 10px; 47 color: var(--ab-text); 48 } 49 50 /* ---- header: title, "New chat", model + history selects -------------------------------- */ 51 .ab-header { 52 display: flex; 53 flex-wrap: wrap; 391 54 align-items: center; 392 justify-content: center; 393 color: var(--wp-silver-gray); 394 cursor: pointer; 395 } 396 397 .typing-textarea button, 398 .typing-textarea span { 399 position: absolute; 400 bottom: 0px; 401 color: var(--wp-light-silver-gray); 402 } 403 404 .typing-textarea button#submit { 405 right: 0; 406 407 } 408 409 .typing-textarea button#upload { 410 left: 0; 411 } 412 413 .typing-textarea button#upload_remove { 414 display: none; 415 } 416 417 .typing-textarea textarea:valid~button#submit, 418 .typing-textarea textarea:valid~span { 419 color: var(--wp-dark-silver-gray); 420 } 421 422 /* on hover and when disabled */ 423 .typing-textarea button:hover, 424 .typing-textarea span:hover { 425 color: var(--wp-blue); 426 } 427 428 /* if span has disabled="" */ 429 .typing-textarea button[disabled], 430 .typing-textarea span[disabled] { 431 color: var(--lighter-gray); 432 cursor: not-allowed; 433 } 434 435 #ab-hello { 55 gap: 8px 12px; 56 margin-bottom: 8px; 57 } 58 .ab-header__controls { display: flex; flex-wrap: wrap; gap: 8px; margin-left: auto; } 59 60 /* Core's notice mover (common.js) inserts page notices after this rule; keep them on their own row. */ 61 .ab-header .wp-header-end, .ab-header > .notice { flex-basis: 100%; margin: 0; } 62 .ab-select { width: 240px; max-width: 100%; } 63 .ab-select:focus-visible { 64 border-color: var(--ab-accent); 65 box-shadow: 0 0 0 1px var(--ab-accent); 66 outline: var(--ab-focus-width) solid transparent; 67 } 68 69 /* ---- transcript ------------------------------------------------------------------------ */ 70 #ab-chat { display: flex; flex: 1; flex-direction: column; min-height: 0; } 71 .ab-status .notice { max-width: var(--ab-max); margin: 8px auto; } 72 .ab-messages { flex: 1; min-height: 0; overflow-y: auto; padding: 4px 4px 12px; } 73 .ab-welcome { 436 74 display: flex; 437 75 flex-direction: column; … … 439 77 justify-content: center; 440 78 height: 100%; 441 width: 100%; 442 } 443 444 .alpaca-bot-options .accordion-btn { 445 background-color: var(--wp-dark-gray); 446 color: var(--lighter-gray); 79 text-align: center; 80 } 81 .ab-welcome__avatar { width: 128px; height: 128px; margin: 2em auto; border-radius: 50%; } 82 .ab-welcome__text { margin: 0; color: var(--ab-muted); font-size: 1.5rem; } 83 .ab-msg { 84 display: grid; 85 grid-template-columns: 36px 1fr; 86 gap: 12px; 87 max-width: var(--ab-max); 88 margin: 0 auto 20px; 89 } 90 .ab-msg__avatar { width: 36px; height: 36px; border-radius: 50%; } 91 /* Wrap anywhere on the whole body, so a long model id in the name or receipt cannot widen the column. */ 92 .ab-msg__body { min-width: 0; overflow-wrap: anywhere; } 93 .ab-msg__meta { 94 display: flex; 95 align-items: center; 96 gap: 8px; 97 min-height: 24px; 98 margin-bottom: 4px; 99 } 100 .ab-msg__name { font-weight: 600; } 101 102 /* The assistant's name is its model id. */ 103 .ab-msg--assistant .ab-msg__name { font-family: Consolas, Monaco, monospace; font-size: 13px; } 104 .ab-msg__actions { display: flex; gap: 2px; opacity: 0; transition: opacity 0.15s ease-out; } 105 .ab-msg:hover .ab-msg__actions, .ab-msg:focus-within .ab-msg__actions { opacity: 1; } 106 107 @media (hover: none) { 108 .ab-msg__actions { opacity: 1; } 109 } 110 111 .ab-msg__images { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 8px; } 112 .ab-msg__image { max-width: 200px; max-height: 200px; border: 1px solid var(--ab-border); border-radius: 4px; } 113 /* An image the store let go (MessageBubble's evicted marker): a dashed, muted note in the images row, not a broken image. */ 114 .ab-msg__evicted { display: inline-flex; align-items: center; padding: 8px 12px; border: 1px dashed var(--ab-border); border-radius: 4px; color: var(--ab-muted); font-size: 12px; } 115 .ab-receipt { margin-top: 4px; color: var(--ab-muted); font-size: 12px; } 116 117 /* ---- message content: the markdown allowlist, the highlighter, the stream ----------- */ 118 .ab-msg__content { font-size: 14px; line-height: 1.5; } 119 .ab-msg__content > :first-child { margin-top: 0; } 120 .ab-msg__content > :last-child { margin-bottom: 0; } 121 .ab-msg__content p, .ab-msg__content ul, .ab-msg__content ol, .ab-msg__content blockquote, .ab-msg__content pre, .ab-msg__content table { 122 margin: 0 0 0.75em; 123 } 124 .ab-msg__content :is(h1, h2, h3, h4, h5, h6) { margin: 1em 0 0.5em; padding: 0; font-weight: 600; line-height: 1.3; } 125 .ab-msg__content h1 { font-size: 1.4em; } 126 .ab-msg__content h2 { font-size: 1.25em; } 127 .ab-msg__content h3 { font-size: 1.1em; } 128 .ab-msg__content :is(h4, h5, h6) { font-size: 1em; } 129 .ab-msg__content ul, .ab-msg__content ol { padding-left: 1.5em; } 130 .ab-msg__content ul { list-style: disc; } 131 .ab-msg__content ol { list-style: decimal; } 132 .ab-msg__content blockquote { padding-left: 12px; border-left: 4px solid var(--ab-border); color: var(--ab-muted); } 133 .ab-msg__content hr { margin: 1em 0; border: 0; border-top: 1px solid var(--ab-border); } 134 .ab-msg__content img { max-width: 100%; height: auto; border-radius: 4px; } 135 .ab-msg__content table { display: block; max-width: 100%; overflow-x: auto; border-collapse: collapse; } 136 .ab-msg__content th, .ab-msg__content td { padding: 4px 8px; border: 1px solid var(--ab-border); text-align: left; } 137 .ab-msg__content th { background: var(--ab-surface); } 138 .ab-msg__content code { 139 padding: 2px 4px; 140 margin: 0; 141 background: rgba(0, 0, 0, 0.06); 142 border-radius: 3px; 143 font-size: 13px; 144 } 145 .ab-msg__content pre { 146 position: relative; 147 padding: 12px 44px 12px 12px; 148 background: var(--ab-code-bg); 149 color: var(--ab-code-text); 150 overflow: auto; 151 border-radius: 4px; 152 font-size: 13px; 153 line-height: 1.5; 154 } 155 .ab-msg__content pre code { display: block; padding: 0; background: none; color: inherit; } 156 pre > .ab-code__copy { position: absolute; top: 6px; right: 6px; color: var(--ab-border); } 157 pre > .ab-code__copy:hover { color: var(--ab-code-text); background: rgba(255, 255, 255, 0.12); } 158 pre > .ab-code__copy:focus-visible { outline-color: var(--ab-code-text); } 159 160 /* Highlighter tokens (resources/ts/highlight.ts) on the dark block, from core's palette. */ 161 .tok-cmt { color: #a7aaad; font-style: italic; } 162 .tok-str { color: #68de7c; } 163 .tok-kw { color: #72aee6; } 164 .tok-num { color: #f2d675; } 165 .tok-fn { color: #ff8085; } 166 167 /* Streamed deltas are raw text until the server's rendering replaces the bubble; a reply the 168 stream left partial (chat.ts settle()) keeps them as they are, without the caret. */ 169 [data-streaming="1"] .ab-msg__content, 170 [data-partial="1"] .ab-msg__content { white-space: pre-wrap; } 171 [data-streaming="1"] .ab-msg__content::after { 172 content: ""; 173 display: inline-block; 174 width: 2px; 175 height: 1em; 176 margin-left: 2px; 177 vertical-align: -0.15em; 178 background: currentColor; 179 animation: ab-blink 1s steps(2, start) infinite; 180 } 181 182 @keyframes ab-blink { 183 to { visibility: hidden; } 184 } 185 186 .ab-msg__reasoning { margin-bottom: 8px; color: var(--ab-muted); font-size: 13px; } 187 .ab-msg__reasoning summary { cursor: pointer; } 188 .ab-msg__reasoning-text { max-height: 12em; margin-top: 4px; overflow-y: auto; } 189 190 /* ---- composer -------------------------------------------------------------------------- */ 191 192 /* Sticky is for iOS, where 100vh overshoots the visible viewport: the row stays in view as the page scrolls. */ 193 .ab-composer { position: sticky; bottom: 0; padding-top: 8px; } 194 .ab-composer__row { 195 display: flex; 196 align-items: flex-end; 197 gap: 6px; 198 max-width: var(--ab-max); 199 margin: 0 auto; 200 padding: 4px; 201 background: var(--ab-panel); 202 border: 1px solid var(--ab-border); 203 border-radius: 4px; 204 } 205 .ab-composer__row:focus-within { border-color: var(--ab-accent); box-shadow: 0 0 0 1px var(--ab-accent); } 206 .ab-composer textarea { 207 flex: 1; 208 box-sizing: border-box; 209 min-height: 36px; 210 max-height: 250px; 211 margin: 0; 212 padding: 8px; 213 border: 0; 214 background: transparent; 215 box-shadow: none; 216 color: var(--ab-text); 217 font-size: 14px; 218 line-height: 1.4; 219 resize: none; 220 } 221 222 /* The row's ring is the focus indicator; core's own textarea ring would double it. */ 223 .ab-composer textarea:focus { outline: 0; box-shadow: none; } 224 .ab-composer__buttons { display: flex; align-items: center; gap: 4px; } 225 .ab-composer__preview { height: 40px; width: auto; border-radius: 4px; } 226 227 /* ---- buttons and icons ----------------------------------------------------------------- */ 228 .ab-icon { width: 1.25em; height: 1.25em; vertical-align: -0.25em; } 229 .ab-btn, .ab-msg__action { 230 position: relative; 231 display: inline-flex; 232 align-items: center; 233 justify-content: center; 234 width: 36px; 235 height: 36px; 236 margin: 0; 237 padding: 0; 238 border: 0; 239 border-radius: 4px; 240 background: none; 241 color: var(--ab-muted); 242 font-size: 16px; 243 line-height: 1; 447 244 cursor: pointer; 448 padding: 18px; 449 width: 100%; 450 border: none; 451 text-align: left; 452 outline: none; 453 font-size: 15px; 454 transition: 0.4s; 455 display: flex; 456 align-items: center; 457 border-bottom: 1px solid var(--wp-ultra-dark-gray); 458 } 459 460 .alpaca-bot-options .accordion-btn code { 461 margin-right: .5em; 462 } 463 464 .alpaca-bot-options .panel code { 465 padding: 0; 466 } 467 468 .ab-accordian .active, 469 .alpaca-bot-options .accordion-btn:hover { 470 background-color: var(--wp-blue); 471 color: var(--chat-container-bg); 472 border-bottom: 1px solid var(--wp-medium-blue); 473 } 474 475 .alpaca-bot-options .accordion-btn:after { 476 content: '\002B'; 477 color: var(--wp-light-silver-gray); 478 font-weight: bold; 479 margin-left: auto; 480 } 481 482 .ab-accordian .active:after { 483 content: "\2212"; 484 } 485 486 .alpaca-bot-options .panel { 487 padding: 0 18px; 488 background-color: var(--chat-textarea-bg); 489 max-height: 0; 490 overflow: hidden; 491 transition: max-height 0.2s ease-out; 492 } 493 494 .alpaca-bot-options .panel ul a { 495 text-decoration: none; 496 } 497 498 .alpaca-bot-shortcode-processed { 499 font-size: .8em; 500 background-color: var(--wp-ultra-dark-gray); 501 margin: .8em 0; 502 padding: .4em .6em; 503 border-radius: 5px; 504 font-family: monospace; 505 font-weight: bold; 506 color: var(--console); 507 text-shadow: 0px 0px .7em var(--console); 508 cursor: pointer; 509 } 510 511 /* The container <div> - needed to position the dropdown content */ 512 .ab-dropdown { 513 position: relative; 514 display: inline-block; 515 } 516 517 /* Dropdown Content (Hidden by Default) */ 518 .ab-dropdown-content { 519 display: none; 245 } 246 .ab-btn[hidden] { display: none; } 247 .ab-msg__action { width: 28px; height: 28px; font-size: 14px; } 248 .ab-btn--icon:hover, .ab-msg__action:hover { color: var(--ab-accent); background: rgba(var(--ab-accent-rgb), 0.1); } 249 .ab-btn:focus-visible, .ab-msg__action:focus-visible, .ab-msg__reasoning summary:focus-visible { 250 outline: var(--ab-focus-width) solid var(--ab-accent); 251 outline-offset: 2px; 252 } 253 254 /* Send (Kanboard #566): resting, hover, focus and disabled each read differently. */ 255 .ab-btn--send { background: var(--ab-accent); color: #fff; } 256 .ab-btn--send:hover { background: var(--ab-accent-dark); } 257 .ab-btn--send:focus-visible { background: var(--ab-accent-dark); box-shadow: 0 0 0 2px var(--ab-panel); } 258 .ab-btn--send:disabled { background: var(--ab-border); color: var(--ab-panel); cursor: not-allowed; } 259 260 /* Tooltips: the aria-label of an icon-only button, on hover, for sighted mouse users. */ 261 .ab-btn--icon[aria-label]:hover::after, .ab-btn--send[aria-label]:hover::after, .ab-msg__action[aria-label]:hover::after { 262 content: attr(aria-label); 520 263 position: absolute; 521 background-color: var(--chat-textarea-bg); 522 min-width: 260px; 523 box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.15); 524 z-index: 1; 525 border-radius: 4px; 526 } 527 528 /* Links inside the dropdown */ 529 .ab-dropdown-content a { 530 padding: 12px 16px; 531 text-decoration: none; 532 display: block; 533 } 534 535 .ab-dropdown-content a strong { 536 color: var(--wp-dark-gray); 537 } 538 539 .ab-dropdown-content a p { 540 color: var(--wp-dark-silver-gray); 541 font-size: .9em; 542 margin: .2em 0; 543 } 544 545 /* Change color of dropdown links on hover */ 546 .ab-dropdown-content a:hover { 547 color: var(--wp-dark-gray); 548 background-color: var(--chat-container-bg); 549 border-radius: 4px; 550 } 551 552 /* Show the dropdown menu on hover */ 553 .ab-dropdown:hover .ab-dropdown-content { 554 display: block; 555 } 556 557 /* reduce the size of google icons in span tags inside of dropdown-content */ 558 .ab-dropdown-content span { 559 float: left; 560 font-size: 1.33em; 561 margin-right: .5em; 562 } 563 564 /* reduce p padding */ 565 .ab-dropdown-content p { 566 margin: .5em 0; 567 } 568 569 .page-title-action span { 570 font-size: 1.2em; 571 margin-left: .2em; 572 width: .9em; 573 vertical-align: middle; 574 } 575 576 /* reduce text size for hint.css tooltop */ 577 [class*=hint--]:after { 578 font-size: .8rem !important; 579 } 580 581 /* Responsive Media Query */ 582 @media screen and (max-width: 781px) { 583 .typing-container { 584 position: fixed; 585 bottom: 10px; 586 width: calc(100% - 20px); 587 } 588 589 .ab-toolbar { 590 display: flex; 591 flex-direction: column; 592 justify-content: center; 593 width: 100%; 594 margin-bottom: 1em; 595 } 596 597 .ab-toolbar div { 598 margin: 0.5em 0; 599 } 600 601 .ab-toolbar code, 602 .ab-toolbar select { 603 float: right; 604 } 605 606 #set_default_model { 607 display: none; 608 } 609 610 .ab-chat-message-username { 611 font-size: 1.15em; 612 line-height: 1.4em; 613 } 614 615 .ab-chat-message-username, 616 .ab-chat-message-username .model { 617 margin-bottom: 0; 618 } 619 620 .ab-chat-message-parts, 621 .ab-chat-message-tools { 622 margin-left: 0; 623 } 624 625 .ab-chat-message-response { 626 font-size: 1.25em; 627 line-height: 1.4em; 628 margin-top: 0; 629 } 630 } 631 632 @media screen and (max-width: 360px) { 633 .ab-toolbar select { 634 margin-top: 0em; 635 width: 100%; 636 } 637 } 638 639 @media screen and (max-width: 255px) { 640 .ab-toolbar { 641 margin-top: 0em; 642 } 643 644 #ab-chat-container .page-title-action { 645 width: 100%; 646 } 647 } 264 bottom: calc(100% + 6px); 265 left: 50%; 266 transform: translateX(-50%); 267 z-index: 10; 268 padding: 4px 8px; 269 border-radius: 3px; 270 background: var(--ab-text); 271 color: var(--ab-panel); 272 font-size: 12px; 273 line-height: 1.4; 274 white-space: nowrap; 275 pointer-events: none; 276 } 277 278 /* A turn's actions sit at the top of its bubble, and the first bubble at the scroller's edge, so the 279 tooltip goes below the button, as 0.4's tooltips did. */ 280 .ab-msg__action[aria-label]:hover::after { top: calc(100% + 6px); bottom: auto; } 281 282 /* Inside a scrolling <pre> a tooltip above the button would be clipped; put it to the left. */ 283 pre > .ab-code__copy[aria-label]:hover::after { 284 top: 50%; 285 right: calc(100% + 6px); 286 bottom: auto; 287 left: auto; 288 transform: translateY(-50%); 289 } 290 291 /* ---- the same shell on a front-end page -------------------------------------------------- */ 292 293 /* 294 * One rule, because one rule is all .ab-wrap assumes that a `[alpacabot]` page does not have: 295 * that the shell owns the viewport, less wp-admin's admin bar and #wpfooter. On a page the shell 296 * is a block in the middle of the content, and neither the subtraction nor the intent survives 297 * -- a shell sized to the screen pushes everything after it out of reach, and #wpfooter is not 298 * on the page to subtract. A bounded box instead. This replaces the height outright rather than 299 * zeroing --ab-footer, so the narrow-screen block below, which retunes those variables for 300 * wp-admin, has nothing to say here either, nor does its `.wrap.ab-wrap` rule, since this shell 301 * has no .wrap. Everything else in this file works on both: the 302 * variables all carry fallbacks for the admin colour scheme that is not there, `.ab-status 303 * .notice` is what dom.ts writes on either surface, `.wp-header-end` is Header's own <hr>, and 304 * `.ab-header > .notice` is the one rule that only wp-admin can trigger -- core's notice mover 305 * -- which costs a front-end page a selector that matches nothing. What this file does *not* 306 * carry is core's own admin chrome: `.page-title-action` is styled by wp-admin's stylesheet, so 307 * "New chat" is a plain link on a front-end shell. 308 */ 309 .ab-wrap--front { 310 height: min(70vh, 640px); 311 } 312 313 /* ---- narrow screens (core's own admin breakpoint) --------------------------------------- */ 314 315 @media screen and (max-width: 782px) { 316 /* 317 * Core's narrow layout: a taller admin bar, 100px under #wpbody-content in place of the footer, and the 318 * Screen Options / Help tabs on a row of their own above the title: core's `.wrap { clear: both }` at this 319 * breakpoint (wp-admin/css/common.css) drops the wrap under the floated #screen-meta-links, 40px of 320 * buttons plus the 20px bottom margin core gives it here, so 60px of the viewport goes to that row. 321 */ 322 .ab-wrap { --ab-admin-bar: 46px; --ab-footer: 100px; --ab-cleared: 60px; } 323 /* 324 * The clearance sets the wrap's border edge under the float and swallows its top margin (CSS 2.1 9.5.2), 325 * which is why core's own h1 sits flush with its wrap here; the padding standing in for that margin is 326 * inside the border edge, survives the clearance, and is 10px core does not have, so it goes with the 327 * margin. On `.wrap.ab-wrap` because it is core's .wrap that clears: the front shell has no .wrap and no 328 * #screen-meta-links to clear, and keeps its padding. 329 */ 330 .wrap.ab-wrap { padding-top: 0; } 331 .ab-header__controls { flex-basis: 100%; flex-direction: column; margin-left: 0; } 332 .ab-select { width: 100%; } 333 .ab-msg { grid-template-columns: 32px 1fr; gap: 8px; } 334 .ab-msg__avatar { width: 32px; height: 32px; } 335 336 /* 16px keeps iOS from zooming the page when the box takes focus, as core does for its inputs. */ 337 .ab-composer textarea { font-size: 16px; } 338 } 339 340 @media (prefers-reduced-motion: reduce) { 341 .ab-msg__actions { transition: none; } 342 [data-streaming="1"] .ab-msg__content::after { animation: none; } 343 } -
alpaca-bot/trunk/assets/js/htmx.min.js
r3075126 r3690657 1 (function(e,t){if(typeof define==="function"&&define.amd){define([],t)}else if(typeof module==="object"&&module.exports){module.exports=t()}else{e.htmx=e.htmx||t()}})(typeof self!=="undefined"?self:this,function(){return function(){"use strict";var Q={onLoad:B,process:zt,on:de,off:ge,trigger:ce,ajax:Nr,find:C,findAll:f,closest:v,values:function(e,t){var r=dr(e,t||"post");return r.values},remove:_,addClass:z,removeClass:n,toggleClass:$,takeClass:W,defineExtension:Ur,removeExtension:Fr,logAll:V,logNone:j,logger:null,config:{historyEnabled:true,historyCacheSize:10,refreshOnHistoryMiss:false,defaultSwapStyle:"innerHTML",defaultSwapDelay:0,defaultSettleDelay:20,includeIndicatorStyles:true,indicatorClass:"htmx-indicator",requestClass:"htmx-request",addedClass:"htmx-added",settlingClass:"htmx-settling",swappingClass:"htmx-swapping",allowEval:true,allowScriptTags:true,inlineScriptNonce:"",attributesToSettle:["class","style","width","height"],withCredentials:false,timeout:0,wsReconnectDelay:"full-jitter",wsBinaryType:"blob",disableSelector:"[hx-disable], [data-hx-disable]",useTemplateFragments:false,scrollBehavior:"smooth",defaultFocusScroll:false,getCacheBusterParam:false,globalViewTransitions:false,methodsThatUseUrlParams:["get"],selfRequestsOnly:false,ignoreTitle:false,scrollIntoViewOnBoost:true,triggerSpecsCache:null},parseInterval:d,_:t,createEventSource:function(e){return new EventSource(e,{withCredentials:true})},createWebSocket:function(e){var t=new WebSocket(e,[]);t.binaryType=Q.config.wsBinaryType;return t},version:"1.9.11"};var r={addTriggerHandler:Lt,bodyContains:se,canAccessLocalStorage:U,findThisElement:xe,filterValues:yr,hasAttribute:o,getAttributeValue:te,getClosestAttributeValue:ne,getClosestMatch:c,getExpressionVars:Hr,getHeaders:xr,getInputValues:dr,getInternalData:ae,getSwapSpecification:wr,getTriggerSpecs:it,getTarget:ye,makeFragment:l,mergeObjects:le,makeSettleInfo:T,oobSwap:Ee,querySelectorExt:ue,selectAndSwap:je,settleImmediately:nr,shouldCancel:ut,triggerEvent:ce,triggerErrorEvent:fe,withExtensions:R};var w=["get","post","put","delete","patch"];var i=w.map(function(e){return"[hx-"+e+"], [data-hx-"+e+"]"}).join(", ");var S=e("head"),q=e("title"),H=e("svg",true);function e(e,t=false){return new RegExp(`<${e}(\\s[^>]*>|>)([\\s\\S]*?)<\\/${e}>`,t?"gim":"im")}function d(e){if(e==undefined){return undefined}let t=NaN;if(e.slice(-2)=="ms"){t=parseFloat(e.slice(0,-2))}else if(e.slice(-1)=="s"){t=parseFloat(e.slice(0,-1))*1e3}else if(e.slice(-1)=="m"){t=parseFloat(e.slice(0,-1))*1e3*60}else{t=parseFloat(e)}return isNaN(t)?undefined:t}function ee(e,t){return e.getAttribute&&e.getAttribute(t)}function o(e,t){return e.hasAttribute&&(e.hasAttribute(t)||e.hasAttribute("data-"+t))}function te(e,t){return ee(e,t)||ee(e,"data-"+t)}function u(e){return e.parentElement}function re(){return document}function c(e,t){while(e&&!t(e)){e=u(e)}return e?e:null}function L(e,t,r){var n=te(t,r);var i=te(t,"hx-disinherit");if(e!==t&&i&&(i==="*"||i.split(" ").indexOf(r)>=0)){return"unset"}else{return n}}function ne(t,r){var n=null;c(t,function(e){return n=L(t,e,r)});if(n!=="unset"){return n}}function h(e,t){var r=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.oMatchesSelector;return r&&r.call(e,t)}function A(e){var t=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i;var r=t.exec(e);if(r){return r[1].toLowerCase()}else{return""}}function s(e,t){var r=new DOMParser;var n=r.parseFromString(e,"text/html");var i=n.body;while(t>0){t--;i=i.firstChild}if(i==null){i=re().createDocumentFragment()}return i}function N(e){return/<body/.test(e)}function l(e){var t=!N(e);var r=A(e);var n=e;if(r==="head"){n=n.replace(S,"")}if(Q.config.useTemplateFragments&&t){var i=s("<body><template>"+n+"</template></body>",0);var a=i.querySelector("template").content;if(Q.config.allowScriptTags){oe(a.querySelectorAll("script"),function(e){if(Q.config.inlineScriptNonce){e.nonce=Q.config.inlineScriptNonce}e.htmxExecuted=navigator.userAgent.indexOf("Firefox")===-1})}else{oe(a.querySelectorAll("script"),function(e){_(e)})}return a}switch(r){case"thead":case"tbody":case"tfoot":case"colgroup":case"caption":return s("<table>"+n+"</table>",1);case"col":return s("<table><colgroup>"+n+"</colgroup></table>",2);case"tr":return s("<table><tbody>"+n+"</tbody></table>",2);case"td":case"th":return s("<table><tbody><tr>"+n+"</tr></tbody></table>",3);case"script":case"style":return s("<div>"+n+"</div>",1);default:return s(n,0)}}function ie(e){if(e){e()}}function I(e,t){return Object.prototype.toString.call(e)==="[object "+t+"]"}function k(e){return I(e,"Function")}function P(e){return I(e,"Object")}function ae(e){var t="htmx-internal-data";var r=e[t];if(!r){r=e[t]={}}return r}function M(e){var t=[];if(e){for(var r=0;r<e.length;r++){t.push(e[r])}}return t}function oe(e,t){if(e){for(var r=0;r<e.length;r++){t(e[r])}}}function X(e){var t=e.getBoundingClientRect();var r=t.top;var n=t.bottom;return r<window.innerHeight&&n>=0}function se(e){if(e.getRootNode&&e.getRootNode()instanceof window.ShadowRoot){return re().body.contains(e.getRootNode().host)}else{return re().body.contains(e)}}function D(e){return e.trim().split(/\s+/)}function le(e,t){for(var r in t){if(t.hasOwnProperty(r)){e[r]=t[r]}}return e}function E(e){try{return JSON.parse(e)}catch(e){b(e);return null}}function U(){var e="htmx:localStorageTest";try{localStorage.setItem(e,e);localStorage.removeItem(e);return true}catch(e){return false}}function F(t){try{var e=new URL(t);if(e){t=e.pathname+e.search}if(!/^\/$/.test(t)){t=t.replace(/\/+$/,"")}return t}catch(e){return t}}function t(e){return Tr(re().body,function(){return eval(e)})}function B(t){var e=Q.on("htmx:load",function(e){t(e.detail.elt)});return e}function V(){Q.logger=function(e,t,r){if(console){console.log(t,e,r)}}}function j(){Q.logger=null}function C(e,t){if(t){return e.querySelector(t)}else{return C(re(),e)}}function f(e,t){if(t){return e.querySelectorAll(t)}else{return f(re(),e)}}function _(e,t){e=p(e);if(t){setTimeout(function(){_(e);e=null},t)}else{e.parentElement.removeChild(e)}}function z(e,t,r){e=p(e);if(r){setTimeout(function(){z(e,t);e=null},r)}else{e.classList&&e.classList.add(t)}}function n(e,t,r){e=p(e);if(r){setTimeout(function(){n(e,t);e=null},r)}else{if(e.classList){e.classList.remove(t);if(e.classList.length===0){e.removeAttribute("class")}}}}function $(e,t){e=p(e);e.classList.toggle(t)}function W(e,t){e=p(e);oe(e.parentElement.children,function(e){n(e,t)});z(e,t)}function v(e,t){e=p(e);if(e.closest){return e.closest(t)}else{do{if(e==null||h(e,t)){return e}}while(e=e&&u(e));return null}}function g(e,t){return e.substring(0,t.length)===t}function G(e,t){return e.substring(e.length-t.length)===t}function J(e){var t=e.trim();if(g(t,"<")&&G(t,"/>")){return t.substring(1,t.length-2)}else{return t}}function Z(e,t){if(t.indexOf("closest ")===0){return[v(e,J(t.substr(8)))]}else if(t.indexOf("find ")===0){return[C(e,J(t.substr(5)))]}else if(t==="next"){return[e.nextElementSibling]}else if(t.indexOf("next ")===0){return[K(e,J(t.substr(5)))]}else if(t==="previous"){return[e.previousElementSibling]}else if(t.indexOf("previous ")===0){return[Y(e,J(t.substr(9)))]}else if(t==="document"){return[document]}else if(t==="window"){return[window]}else if(t==="body"){return[document.body]}else{return re().querySelectorAll(J(t))}}var K=function(e,t){var r=re().querySelectorAll(t);for(var n=0;n<r.length;n++){var i=r[n];if(i.compareDocumentPosition(e)===Node.DOCUMENT_POSITION_PRECEDING){return i}}};var Y=function(e,t){var r=re().querySelectorAll(t);for(var n=r.length-1;n>=0;n--){var i=r[n];if(i.compareDocumentPosition(e)===Node.DOCUMENT_POSITION_FOLLOWING){return i}}};function ue(e,t){if(t){return Z(e,t)[0]}else{return Z(re().body,e)[0]}}function p(e){if(I(e,"String")){return C(e)}else{return e}}function ve(e,t,r){if(k(t)){return{target:re().body,event:e,listener:t}}else{return{target:p(e),event:t,listener:r}}}function de(t,r,n){jr(function(){var e=ve(t,r,n);e.target.addEventListener(e.event,e.listener)});var e=k(r);return e?r:n}function ge(t,r,n){jr(function(){var e=ve(t,r,n);e.target.removeEventListener(e.event,e.listener)});return k(r)?r:n}var pe=re().createElement("output");function me(e,t){var r=ne(e,t);if(r){if(r==="this"){return[xe(e,t)]}else{var n=Z(e,r);if(n.length===0){b('The selector "'+r+'" on '+t+" returned no matches!");return[pe]}else{return n}}}}function xe(e,t){return c(e,function(e){return te(e,t)!=null})}function ye(e){var t=ne(e,"hx-target");if(t){if(t==="this"){return xe(e,"hx-target")}else{return ue(e,t)}}else{var r=ae(e);if(r.boosted){return re().body}else{return e}}}function be(e){var t=Q.config.attributesToSettle;for(var r=0;r<t.length;r++){if(e===t[r]){return true}}return false}function we(t,r){oe(t.attributes,function(e){if(!r.hasAttribute(e.name)&&be(e.name)){t.removeAttribute(e.name)}});oe(r.attributes,function(e){if(be(e.name)){t.setAttribute(e.name,e.value)}})}function Se(e,t){var r=Br(t);for(var n=0;n<r.length;n++){var i=r[n];try{if(i.isInlineSwap(e)){return true}}catch(e){b(e)}}return e==="outerHTML"}function Ee(e,i,a){var t="#"+ee(i,"id");var o="outerHTML";if(e==="true"){}else if(e.indexOf(":")>0){o=e.substr(0,e.indexOf(":"));t=e.substr(e.indexOf(":")+1,e.length)}else{o=e}var r=re().querySelectorAll(t);if(r){oe(r,function(e){var t;var r=i.cloneNode(true);t=re().createDocumentFragment();t.appendChild(r);if(!Se(o,e)){t=r}var n={shouldSwap:true,target:e,fragment:t};if(!ce(e,"htmx:oobBeforeSwap",n))return;e=n.target;if(n["shouldSwap"]){Be(o,e,e,t,a)}oe(a.elts,function(e){ce(e,"htmx:oobAfterSwap",n)})});i.parentNode.removeChild(i)}else{i.parentNode.removeChild(i);fe(re().body,"htmx:oobErrorNoTarget",{content:i})}return e}function Ce(e,t,r){var n=ne(e,"hx-select-oob");if(n){var i=n.split(",");for(var a=0;a<i.length;a++){var o=i[a].split(":",2);var s=o[0].trim();if(s.indexOf("#")===0){s=s.substring(1)}var l=o[1]||"true";var u=t.querySelector("#"+s);if(u){Ee(l,u,r)}}}oe(f(t,"[hx-swap-oob], [data-hx-swap-oob]"),function(e){var t=te(e,"hx-swap-oob");if(t!=null){Ee(t,e,r)}})}function Re(e){oe(f(e,"[hx-preserve], [data-hx-preserve]"),function(e){var t=te(e,"id");var r=re().getElementById(t);if(r!=null){e.parentNode.replaceChild(r,e)}})}function Te(o,e,s){oe(e.querySelectorAll("[id]"),function(e){var t=ee(e,"id");if(t&&t.length>0){var r=t.replace("'","\\'");var n=e.tagName.replace(":","\\:");var i=o.querySelector(n+"[id='"+r+"']");if(i&&i!==o){var a=e.cloneNode();we(e,i);s.tasks.push(function(){we(e,a)})}}})}function Oe(e){return function(){n(e,Q.config.addedClass);zt(e);Nt(e);qe(e);ce(e,"htmx:load")}}function qe(e){var t="[autofocus]";var r=h(e,t)?e:e.querySelector(t);if(r!=null){r.focus()}}function a(e,t,r,n){Te(e,r,n);while(r.childNodes.length>0){var i=r.firstChild;z(i,Q.config.addedClass);e.insertBefore(i,t);if(i.nodeType!==Node.TEXT_NODE&&i.nodeType!==Node.COMMENT_NODE){n.tasks.push(Oe(i))}}}function He(e,t){var r=0;while(r<e.length){t=(t<<5)-t+e.charCodeAt(r++)|0}return t}function Le(e){var t=0;if(e.attributes){for(var r=0;r<e.attributes.length;r++){var n=e.attributes[r];if(n.value){t=He(n.name,t);t=He(n.value,t)}}}return t}function Ae(e){var t=ae(e);if(t.onHandlers){for(var r=0;r<t.onHandlers.length;r++){const n=t.onHandlers[r];e.removeEventListener(n.event,n.listener)}delete t.onHandlers}}function Ne(e){var t=ae(e);if(t.timeout){clearTimeout(t.timeout)}if(t.webSocket){t.webSocket.close()}if(t.sseEventSource){t.sseEventSource.close()}if(t.listenerInfos){oe(t.listenerInfos,function(e){if(e.on){e.on.removeEventListener(e.trigger,e.listener)}})}Ae(e);oe(Object.keys(t),function(e){delete t[e]})}function m(e){ce(e,"htmx:beforeCleanupElement");Ne(e);if(e.children){oe(e.children,function(e){m(e)})}}function Ie(t,e,r){if(t.tagName==="BODY"){return Ue(t,e,r)}else{var n;var i=t.previousSibling;a(u(t),t,e,r);if(i==null){n=u(t).firstChild}else{n=i.nextSibling}r.elts=r.elts.filter(function(e){return e!=t});while(n&&n!==t){if(n.nodeType===Node.ELEMENT_NODE){r.elts.push(n)}n=n.nextElementSibling}m(t);u(t).removeChild(t)}}function ke(e,t,r){return a(e,e.firstChild,t,r)}function Pe(e,t,r){return a(u(e),e,t,r)}function Me(e,t,r){return a(e,null,t,r)}function Xe(e,t,r){return a(u(e),e.nextSibling,t,r)}function De(e,t,r){m(e);return u(e).removeChild(e)}function Ue(e,t,r){var n=e.firstChild;a(e,n,t,r);if(n){while(n.nextSibling){m(n.nextSibling);e.removeChild(n.nextSibling)}m(n);e.removeChild(n)}}function Fe(e,t,r){var n=r||ne(e,"hx-select");if(n){var i=re().createDocumentFragment();oe(t.querySelectorAll(n),function(e){i.appendChild(e)});t=i}return t}function Be(e,t,r,n,i){switch(e){case"none":return;case"outerHTML":Ie(r,n,i);return;case"afterbegin":ke(r,n,i);return;case"beforebegin":Pe(r,n,i);return;case"beforeend":Me(r,n,i);return;case"afterend":Xe(r,n,i);return;case"delete":De(r,n,i);return;default:var a=Br(t);for(var o=0;o<a.length;o++){var s=a[o];try{var l=s.handleSwap(e,r,n,i);if(l){if(typeof l.length!=="undefined"){for(var u=0;u<l.length;u++){var f=l[u];if(f.nodeType!==Node.TEXT_NODE&&f.nodeType!==Node.COMMENT_NODE){i.tasks.push(Oe(f))}}}return}}catch(e){b(e)}}if(e==="innerHTML"){Ue(r,n,i)}else{Be(Q.config.defaultSwapStyle,t,r,n,i)}}}function Ve(e){if(e.indexOf("<title")>-1){var t=e.replace(H,"");var r=t.match(q);if(r){return r[2]}}}function je(e,t,r,n,i,a){i.title=Ve(n);var o=l(n);if(o){Ce(r,o,i);o=Fe(r,o,a);Re(o);return Be(e,r,t,o,i)}}function _e(e,t,r){var n=e.getResponseHeader(t);if(n.indexOf("{")===0){var i=E(n);for(var a in i){if(i.hasOwnProperty(a)){var o=i[a];if(!P(o)){o={value:o}}ce(r,a,o)}}}else{var s=n.split(",");for(var l=0;l<s.length;l++){ce(r,s[l].trim(),[])}}}var ze=/\s/;var x=/[\s,]/;var $e=/[_$a-zA-Z]/;var We=/[_$a-zA-Z0-9]/;var Ge=['"',"'","/"];var Je=/[^\s]/;var Ze=/[{(]/;var Ke=/[})]/;function Ye(e){var t=[];var r=0;while(r<e.length){if($e.exec(e.charAt(r))){var n=r;while(We.exec(e.charAt(r+1))){r++}t.push(e.substr(n,r-n+1))}else if(Ge.indexOf(e.charAt(r))!==-1){var i=e.charAt(r);var n=r;r++;while(r<e.length&&e.charAt(r)!==i){if(e.charAt(r)==="\\"){r++}r++}t.push(e.substr(n,r-n+1))}else{var a=e.charAt(r);t.push(a)}r++}return t}function Qe(e,t,r){return $e.exec(e.charAt(0))&&e!=="true"&&e!=="false"&&e!=="this"&&e!==r&&t!=="."}function et(e,t,r){if(t[0]==="["){t.shift();var n=1;var i=" return (function("+r+"){ return (";var a=null;while(t.length>0){var o=t[0];if(o==="]"){n--;if(n===0){if(a===null){i=i+"true"}t.shift();i+=")})";try{var s=Tr(e,function(){return Function(i)()},function(){return true});s.source=i;return s}catch(e){fe(re().body,"htmx:syntax:error",{error:e,source:i});return null}}}else if(o==="["){n++}if(Qe(o,a,r)){i+="(("+r+"."+o+") ? ("+r+"."+o+") : (window."+o+"))"}else{i=i+o}a=t.shift()}}}function y(e,t){var r="";while(e.length>0&&!t.test(e[0])){r+=e.shift()}return r}function tt(e){var t;if(e.length>0&&Ze.test(e[0])){e.shift();t=y(e,Ke).trim();e.shift()}else{t=y(e,x)}return t}var rt="input, textarea, select";function nt(e,t,r){var n=[];var i=Ye(t);do{y(i,Je);var a=i.length;var o=y(i,/[,\[\s]/);if(o!==""){if(o==="every"){var s={trigger:"every"};y(i,Je);s.pollInterval=d(y(i,/[,\[\s]/));y(i,Je);var l=et(e,i,"event");if(l){s.eventFilter=l}n.push(s)}else if(o.indexOf("sse:")===0){n.push({trigger:"sse",sseEvent:o.substr(4)})}else{var u={trigger:o};var l=et(e,i,"event");if(l){u.eventFilter=l}while(i.length>0&&i[0]!==","){y(i,Je);var f=i.shift();if(f==="changed"){u.changed=true}else if(f==="once"){u.once=true}else if(f==="consume"){u.consume=true}else if(f==="delay"&&i[0]===":"){i.shift();u.delay=d(y(i,x))}else if(f==="from"&&i[0]===":"){i.shift();if(Ze.test(i[0])){var c=tt(i)}else{var c=y(i,x);if(c==="closest"||c==="find"||c==="next"||c==="previous"){i.shift();var h=tt(i);if(h.length>0){c+=" "+h}}}u.from=c}else if(f==="target"&&i[0]===":"){i.shift();u.target=tt(i)}else if(f==="throttle"&&i[0]===":"){i.shift();u.throttle=d(y(i,x))}else if(f==="queue"&&i[0]===":"){i.shift();u.queue=y(i,x)}else if(f==="root"&&i[0]===":"){i.shift();u[f]=tt(i)}else if(f==="threshold"&&i[0]===":"){i.shift();u[f]=y(i,x)}else{fe(e,"htmx:syntax:error",{token:i.shift()})}}n.push(u)}}if(i.length===a){fe(e,"htmx:syntax:error",{token:i.shift()})}y(i,Je)}while(i[0]===","&&i.shift());if(r){r[t]=n}return n}function it(e){var t=te(e,"hx-trigger");var r=[];if(t){var n=Q.config.triggerSpecsCache;r=n&&n[t]||nt(e,t,n)}if(r.length>0){return r}else if(h(e,"form")){return[{trigger:"submit"}]}else if(h(e,'input[type="button"], input[type="submit"]')){return[{trigger:"click"}]}else if(h(e,rt)){return[{trigger:"change"}]}else{return[{trigger:"click"}]}}function at(e){ae(e).cancelled=true}function ot(e,t,r){var n=ae(e);n.timeout=setTimeout(function(){if(se(e)&&n.cancelled!==true){if(!ct(r,e,Wt("hx:poll:trigger",{triggerSpec:r,target:e}))){t(e)}ot(e,t,r)}},r.pollInterval)}function st(e){return location.hostname===e.hostname&&ee(e,"href")&&ee(e,"href").indexOf("#")!==0}function lt(t,r,e){if(t.tagName==="A"&&st(t)&&(t.target===""||t.target==="_self")||t.tagName==="FORM"){r.boosted=true;var n,i;if(t.tagName==="A"){n="get";i=ee(t,"href")}else{var a=ee(t,"method");n=a?a.toLowerCase():"get";if(n==="get"){}i=ee(t,"action")}e.forEach(function(e){ht(t,function(e,t){if(v(e,Q.config.disableSelector)){m(e);return}he(n,i,e,t)},r,e,true)})}}function ut(e,t){if(e.type==="submit"||e.type==="click"){if(t.tagName==="FORM"){return true}if(h(t,'input[type="submit"], button')&&v(t,"form")!==null){return true}if(t.tagName==="A"&&t.href&&(t.getAttribute("href")==="#"||t.getAttribute("href").indexOf("#")!==0)){return true}}return false}function ft(e,t){return ae(e).boosted&&e.tagName==="A"&&t.type==="click"&&(t.ctrlKey||t.metaKey)}function ct(e,t,r){var n=e.eventFilter;if(n){try{return n.call(t,r)!==true}catch(e){fe(re().body,"htmx:eventFilter:error",{error:e,source:n.source});return true}}return false}function ht(a,o,e,s,l){var u=ae(a);var t;if(s.from){t=Z(a,s.from)}else{t=[a]}if(s.changed){t.forEach(function(e){var t=ae(e);t.lastValue=e.value})}oe(t,function(n){var i=function(e){if(!se(a)){n.removeEventListener(s.trigger,i);return}if(ft(a,e)){return}if(l||ut(e,a)){e.preventDefault()}if(ct(s,a,e)){return}var t=ae(e);t.triggerSpec=s;if(t.handledFor==null){t.handledFor=[]}if(t.handledFor.indexOf(a)<0){t.handledFor.push(a);if(s.consume){e.stopPropagation()}if(s.target&&e.target){if(!h(e.target,s.target)){return}}if(s.once){if(u.triggeredOnce){return}else{u.triggeredOnce=true}}if(s.changed){var r=ae(n);if(r.lastValue===n.value){return}r.lastValue=n.value}if(u.delayed){clearTimeout(u.delayed)}if(u.throttle){return}if(s.throttle>0){if(!u.throttle){o(a,e);u.throttle=setTimeout(function(){u.throttle=null},s.throttle)}}else if(s.delay>0){u.delayed=setTimeout(function(){o(a,e)},s.delay)}else{ce(a,"htmx:trigger");o(a,e)}}};if(e.listenerInfos==null){e.listenerInfos=[]}e.listenerInfos.push({trigger:s.trigger,listener:i,on:n});n.addEventListener(s.trigger,i)})}var vt=false;var dt=null;function gt(){if(!dt){dt=function(){vt=true};window.addEventListener("scroll",dt);setInterval(function(){if(vt){vt=false;oe(re().querySelectorAll("[hx-trigger='revealed'],[data-hx-trigger='revealed']"),function(e){pt(e)})}},200)}}function pt(t){if(!o(t,"data-hx-revealed")&&X(t)){t.setAttribute("data-hx-revealed","true");var e=ae(t);if(e.initHash){ce(t,"revealed")}else{t.addEventListener("htmx:afterProcessNode",function(e){ce(t,"revealed")},{once:true})}}}function mt(e,t,r){var n=D(r);for(var i=0;i<n.length;i++){var a=n[i].split(/:(.+)/);if(a[0]==="connect"){xt(e,a[1],0)}if(a[0]==="send"){bt(e)}}}function xt(s,r,n){if(!se(s)){return}if(r.indexOf("/")==0){var e=location.hostname+(location.port?":"+location.port:"");if(location.protocol=="https:"){r="wss://"+e+r}else if(location.protocol=="http:"){r="ws://"+e+r}}var t=Q.createWebSocket(r);t.onerror=function(e){fe(s,"htmx:wsError",{error:e,socket:t});yt(s)};t.onclose=function(e){if([1006,1012,1013].indexOf(e.code)>=0){var t=wt(n);setTimeout(function(){xt(s,r,n+1)},t)}};t.onopen=function(e){n=0};ae(s).webSocket=t;t.addEventListener("message",function(e){if(yt(s)){return}var t=e.data;R(s,function(e){t=e.transformResponse(t,null,s)});var r=T(s);var n=l(t);var i=M(n.children);for(var a=0;a<i.length;a++){var o=i[a];Ee(te(o,"hx-swap-oob")||"true",o,r)}nr(r.tasks)})}function yt(e){if(!se(e)){ae(e).webSocket.close();return true}}function bt(u){var f=c(u,function(e){return ae(e).webSocket!=null});if(f){u.addEventListener(it(u)[0].trigger,function(e){var t=ae(f).webSocket;var r=xr(u,f);var n=dr(u,"post");var i=n.errors;var a=n.values;var o=Hr(u);var s=le(a,o);var l=yr(s,u);l["HEADERS"]=r;if(i&&i.length>0){ce(u,"htmx:validation:halted",i);return}t.send(JSON.stringify(l));if(ut(e,u)){e.preventDefault()}})}else{fe(u,"htmx:noWebSocketSourceError")}}function wt(e){var t=Q.config.wsReconnectDelay;if(typeof t==="function"){return t(e)}if(t==="full-jitter"){var r=Math.min(e,6);var n=1e3*Math.pow(2,r);return n*Math.random()}b('htmx.config.wsReconnectDelay must either be a function or the string "full-jitter"')}function St(e,t,r){var n=D(r);for(var i=0;i<n.length;i++){var a=n[i].split(/:(.+)/);if(a[0]==="connect"){Et(e,a[1])}if(a[0]==="swap"){Ct(e,a[1])}}}function Et(t,e){var r=Q.createEventSource(e);r.onerror=function(e){fe(t,"htmx:sseError",{error:e,source:r});Tt(t)};ae(t).sseEventSource=r}function Ct(a,o){var s=c(a,Ot);if(s){var l=ae(s).sseEventSource;var u=function(e){if(Tt(s)){return}if(!se(a)){l.removeEventListener(o,u);return}var t=e.data;R(a,function(e){t=e.transformResponse(t,null,a)});var r=wr(a);var n=ye(a);var i=T(a);je(r.swapStyle,n,a,t,i);nr(i.tasks);ce(a,"htmx:sseMessage",e)};ae(a).sseListener=u;l.addEventListener(o,u)}else{fe(a,"htmx:noSSESourceError")}}function Rt(e,t,r){var n=c(e,Ot);if(n){var i=ae(n).sseEventSource;var a=function(){if(!Tt(n)){if(se(e)){t(e)}else{i.removeEventListener(r,a)}}};ae(e).sseListener=a;i.addEventListener(r,a)}else{fe(e,"htmx:noSSESourceError")}}function Tt(e){if(!se(e)){ae(e).sseEventSource.close();return true}}function Ot(e){return ae(e).sseEventSource!=null}function qt(e,t,r,n){var i=function(){if(!r.loaded){r.loaded=true;t(e)}};if(n>0){setTimeout(i,n)}else{i()}}function Ht(t,i,e){var a=false;oe(w,function(r){if(o(t,"hx-"+r)){var n=te(t,"hx-"+r);a=true;i.path=n;i.verb=r;e.forEach(function(e){Lt(t,e,i,function(e,t){if(v(e,Q.config.disableSelector)){m(e);return}he(r,n,e,t)})})}});return a}function Lt(n,e,t,r){if(e.sseEvent){Rt(n,r,e.sseEvent)}else if(e.trigger==="revealed"){gt();ht(n,r,t,e);pt(n)}else if(e.trigger==="intersect"){var i={};if(e.root){i.root=ue(n,e.root)}if(e.threshold){i.threshold=parseFloat(e.threshold)}var a=new IntersectionObserver(function(e){for(var t=0;t<e.length;t++){var r=e[t];if(r.isIntersecting){ce(n,"intersect");break}}},i);a.observe(n);ht(n,r,t,e)}else if(e.trigger==="load"){if(!ct(e,n,Wt("load",{elt:n}))){qt(n,r,t,e.delay)}}else if(e.pollInterval>0){t.polling=true;ot(n,r,e)}else{ht(n,r,t,e)}}function At(e){if(!e.htmxExecuted&&Q.config.allowScriptTags&&(e.type==="text/javascript"||e.type==="module"||e.type==="")){var t=re().createElement("script");oe(e.attributes,function(e){t.setAttribute(e.name,e.value)});t.textContent=e.textContent;t.async=false;if(Q.config.inlineScriptNonce){t.nonce=Q.config.inlineScriptNonce}var r=e.parentElement;try{r.insertBefore(t,e)}catch(e){b(e)}finally{if(e.parentElement){e.parentElement.removeChild(e)}}}}function Nt(e){if(h(e,"script")){At(e)}oe(f(e,"script"),function(e){At(e)})}function It(e){var t=e.attributes;for(var r=0;r<t.length;r++){var n=t[r].name;if(g(n,"hx-on:")||g(n,"data-hx-on:")||g(n,"hx-on-")||g(n,"data-hx-on-")){return true}}return false}function kt(e){var t=null;var r=[];if(It(e)){r.push(e)}if(document.evaluate){var n=document.evaluate('.//*[@*[ starts-with(name(), "hx-on:") or starts-with(name(), "data-hx-on:") or'+' starts-with(name(), "hx-on-") or starts-with(name(), "data-hx-on-") ]]',e);while(t=n.iterateNext())r.push(t)}else{var i=e.getElementsByTagName("*");for(var a=0;a<i.length;a++){if(It(i[a])){r.push(i[a])}}}return r}function Pt(e){if(e.querySelectorAll){var t=", [hx-boost] a, [data-hx-boost] a, a[hx-boost], a[data-hx-boost]";var r=e.querySelectorAll(i+t+", form, [type='submit'], [hx-sse], [data-hx-sse], [hx-ws],"+" [data-hx-ws], [hx-ext], [data-hx-ext], [hx-trigger], [data-hx-trigger], [hx-on], [data-hx-on]");return r}else{return[]}}function Mt(e){var t=v(e.target,"button, input[type='submit']");var r=Dt(e);if(r){r.lastButtonClicked=t}}function Xt(e){var t=Dt(e);if(t){t.lastButtonClicked=null}}function Dt(e){var t=v(e.target,"button, input[type='submit']");if(!t){return}var r=p("#"+ee(t,"form"))||v(t,"form");if(!r){return}return ae(r)}function Ut(e){e.addEventListener("click",Mt);e.addEventListener("focusin",Mt);e.addEventListener("focusout",Xt)}function Ft(e){var t=Ye(e);var r=0;for(var n=0;n<t.length;n++){const i=t[n];if(i==="{"){r++}else if(i==="}"){r--}}return r}function Bt(t,e,r){var n=ae(t);if(!Array.isArray(n.onHandlers)){n.onHandlers=[]}var i;var a=function(e){return Tr(t,function(){if(!i){i=new Function("event",r)}i.call(t,e)})};t.addEventListener(e,a);n.onHandlers.push({event:e,listener:a})}function Vt(e){var t=te(e,"hx-on");if(t){var r={};var n=t.split("\n");var i=null;var a=0;while(n.length>0){var o=n.shift();var s=o.match(/^\s*([a-zA-Z:\-\.]+:)(.*)/);if(a===0&&s){o.split(":");i=s[1].slice(0,-1);r[i]=s[2]}else{r[i]+=o}a+=Ft(o)}for(var l in r){Bt(e,l,r[l])}}}function jt(e){Ae(e);for(var t=0;t<e.attributes.length;t++){var r=e.attributes[t].name;var n=e.attributes[t].value;if(g(r,"hx-on")||g(r,"data-hx-on")){var i=r.indexOf("-on")+3;var a=r.slice(i,i+1);if(a==="-"||a===":"){var o=r.slice(i+1);if(g(o,":")){o="htmx"+o}else if(g(o,"-")){o="htmx:"+o.slice(1)}else if(g(o,"htmx-")){o="htmx:"+o.slice(5)}Bt(e,o,n)}}}}function _t(t){if(v(t,Q.config.disableSelector)){m(t);return}var r=ae(t);if(r.initHash!==Le(t)){Ne(t);r.initHash=Le(t);Vt(t);ce(t,"htmx:beforeProcessNode");if(t.value){r.lastValue=t.value}var e=it(t);var n=Ht(t,r,e);if(!n){if(ne(t,"hx-boost")==="true"){lt(t,r,e)}else if(o(t,"hx-trigger")){e.forEach(function(e){Lt(t,e,r,function(){})})}}if(t.tagName==="FORM"||ee(t,"type")==="submit"&&o(t,"form")){Ut(t)}var i=te(t,"hx-sse");if(i){St(t,r,i)}var a=te(t,"hx-ws");if(a){mt(t,r,a)}ce(t,"htmx:afterProcessNode")}}function zt(e){e=p(e);if(v(e,Q.config.disableSelector)){m(e);return}_t(e);oe(Pt(e),function(e){_t(e)});oe(kt(e),jt)}function $t(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()}function Wt(e,t){var r;if(window.CustomEvent&&typeof window.CustomEvent==="function"){r=new CustomEvent(e,{bubbles:true,cancelable:true,detail:t})}else{r=re().createEvent("CustomEvent");r.initCustomEvent(e,true,true,t)}return r}function fe(e,t,r){ce(e,t,le({error:t},r))}function Gt(e){return e==="htmx:afterProcessNode"}function R(e,t){oe(Br(e),function(e){try{t(e)}catch(e){b(e)}})}function b(e){if(console.error){console.error(e)}else if(console.log){console.log("ERROR: ",e)}}function ce(e,t,r){e=p(e);if(r==null){r={}}r["elt"]=e;var n=Wt(t,r);if(Q.logger&&!Gt(t)){Q.logger(e,t,r)}if(r.error){b(r.error);ce(e,"htmx:error",{errorInfo:r})}var i=e.dispatchEvent(n);var a=$t(t);if(i&&a!==t){var o=Wt(a,n.detail);i=i&&e.dispatchEvent(o)}R(e,function(e){i=i&&(e.onEvent(t,n)!==false&&!n.defaultPrevented)});return i}var Jt=location.pathname+location.search;function Zt(){var e=re().querySelector("[hx-history-elt],[data-hx-history-elt]");return e||re().body}function Kt(e,t,r,n){if(!U()){return}if(Q.config.historyCacheSize<=0){localStorage.removeItem("htmx-history-cache");return}e=F(e);var i=E(localStorage.getItem("htmx-history-cache"))||[];for(var a=0;a<i.length;a++){if(i[a].url===e){i.splice(a,1);break}}var o={url:e,content:t,title:r,scroll:n};ce(re().body,"htmx:historyItemCreated",{item:o,cache:i});i.push(o);while(i.length>Q.config.historyCacheSize){i.shift()}while(i.length>0){try{localStorage.setItem("htmx-history-cache",JSON.stringify(i));break}catch(e){fe(re().body,"htmx:historyCacheError",{cause:e,cache:i});i.shift()}}}function Yt(e){if(!U()){return null}e=F(e);var t=E(localStorage.getItem("htmx-history-cache"))||[];for(var r=0;r<t.length;r++){if(t[r].url===e){return t[r]}}return null}function Qt(e){var t=Q.config.requestClass;var r=e.cloneNode(true);oe(f(r,"."+t),function(e){n(e,t)});return r.innerHTML}function er(){var e=Zt();var t=Jt||location.pathname+location.search;var r;try{r=re().querySelector('[hx-history="false" i],[data-hx-history="false" i]')}catch(e){r=re().querySelector('[hx-history="false"],[data-hx-history="false"]')}if(!r){ce(re().body,"htmx:beforeHistorySave",{path:t,historyElt:e});Kt(t,Qt(e),re().title,window.scrollY)}if(Q.config.historyEnabled)history.replaceState({htmx:true},re().title,window.location.href)}function tr(e){if(Q.config.getCacheBusterParam){e=e.replace(/org\.htmx\.cache-buster=[^&]*&?/,"");if(G(e,"&")||G(e,"?")){e=e.slice(0,-1)}}if(Q.config.historyEnabled){history.pushState({htmx:true},"",e)}Jt=e}function rr(e){if(Q.config.historyEnabled)history.replaceState({htmx:true},"",e);Jt=e}function nr(e){oe(e,function(e){e.call()})}function ir(a){var e=new XMLHttpRequest;var o={path:a,xhr:e};ce(re().body,"htmx:historyCacheMiss",o);e.open("GET",a,true);e.setRequestHeader("HX-Request","true");e.setRequestHeader("HX-History-Restore-Request","true");e.setRequestHeader("HX-Current-URL",re().location.href);e.onload=function(){if(this.status>=200&&this.status<400){ce(re().body,"htmx:historyCacheMissLoad",o);var e=l(this.response);e=e.querySelector("[hx-history-elt],[data-hx-history-elt]")||e;var t=Zt();var r=T(t);var n=Ve(this.response);if(n){var i=C("title");if(i){i.innerHTML=n}else{window.document.title=n}}Ue(t,e,r);nr(r.tasks);Jt=a;ce(re().body,"htmx:historyRestore",{path:a,cacheMiss:true,serverResponse:this.response})}else{fe(re().body,"htmx:historyCacheMissLoadError",o)}};e.send()}function ar(e){er();e=e||location.pathname+location.search;var t=Yt(e);if(t){var r=l(t.content);var n=Zt();var i=T(n);Ue(n,r,i);nr(i.tasks);document.title=t.title;setTimeout(function(){window.scrollTo(0,t.scroll)},0);Jt=e;ce(re().body,"htmx:historyRestore",{path:e,item:t})}else{if(Q.config.refreshOnHistoryMiss){window.location.reload(true)}else{ir(e)}}}function or(e){var t=me(e,"hx-indicator");if(t==null){t=[e]}oe(t,function(e){var t=ae(e);t.requestCount=(t.requestCount||0)+1;e.classList["add"].call(e.classList,Q.config.requestClass)});return t}function sr(e){var t=me(e,"hx-disabled-elt");if(t==null){t=[]}oe(t,function(e){var t=ae(e);t.requestCount=(t.requestCount||0)+1;e.setAttribute("disabled","")});return t}function lr(e,t){oe(e,function(e){var t=ae(e);t.requestCount=(t.requestCount||0)-1;if(t.requestCount===0){e.classList["remove"].call(e.classList,Q.config.requestClass)}});oe(t,function(e){var t=ae(e);t.requestCount=(t.requestCount||0)-1;if(t.requestCount===0){e.removeAttribute("disabled")}})}function ur(e,t){for(var r=0;r<e.length;r++){var n=e[r];if(n.isSameNode(t)){return true}}return false}function fr(e){if(e.name===""||e.name==null||e.disabled||v(e,"fieldset[disabled]")){return false}if(e.type==="button"||e.type==="submit"||e.tagName==="image"||e.tagName==="reset"||e.tagName==="file"){return false}if(e.type==="checkbox"||e.type==="radio"){return e.checked}return true}function cr(e,t,r){if(e!=null&&t!=null){var n=r[e];if(n===undefined){r[e]=t}else if(Array.isArray(n)){if(Array.isArray(t)){r[e]=n.concat(t)}else{n.push(t)}}else{if(Array.isArray(t)){r[e]=[n].concat(t)}else{r[e]=[n,t]}}}}function hr(t,r,n,e,i){if(e==null||ur(t,e)){return}else{t.push(e)}if(fr(e)){var a=ee(e,"name");var o=e.value;if(e.multiple&&e.tagName==="SELECT"){o=M(e.querySelectorAll("option:checked")).map(function(e){return e.value})}if(e.files){o=M(e.files)}cr(a,o,r);if(i){vr(e,n)}}if(h(e,"form")){var s=e.elements;oe(s,function(e){hr(t,r,n,e,i)})}}function vr(e,t){if(e.willValidate){ce(e,"htmx:validation:validate");if(!e.checkValidity()){t.push({elt:e,message:e.validationMessage,validity:e.validity});ce(e,"htmx:validation:failed",{message:e.validationMessage,validity:e.validity})}}}function dr(e,t){var r=[];var n={};var i={};var a=[];var o=ae(e);if(o.lastButtonClicked&&!se(o.lastButtonClicked)){o.lastButtonClicked=null}var s=h(e,"form")&&e.noValidate!==true||te(e,"hx-validate")==="true";if(o.lastButtonClicked){s=s&&o.lastButtonClicked.formNoValidate!==true}if(t!=="get"){hr(r,i,a,v(e,"form"),s)}hr(r,n,a,e,s);if(o.lastButtonClicked||e.tagName==="BUTTON"||e.tagName==="INPUT"&&ee(e,"type")==="submit"){var l=o.lastButtonClicked||e;var u=ee(l,"name");cr(u,l.value,i)}var f=me(e,"hx-include");oe(f,function(e){hr(r,n,a,e,s);if(!h(e,"form")){oe(e.querySelectorAll(rt),function(e){hr(r,n,a,e,s)})}});n=le(n,i);return{errors:a,values:n}}function gr(e,t,r){if(e!==""){e+="&"}if(String(r)==="[object Object]"){r=JSON.stringify(r)}var n=encodeURIComponent(r);e+=encodeURIComponent(t)+"="+n;return e}function pr(e){var t="";for(var r in e){if(e.hasOwnProperty(r)){var n=e[r];if(Array.isArray(n)){oe(n,function(e){t=gr(t,r,e)})}else{t=gr(t,r,n)}}}return t}function mr(e){var t=new FormData;for(var r in e){if(e.hasOwnProperty(r)){var n=e[r];if(Array.isArray(n)){oe(n,function(e){t.append(r,e)})}else{t.append(r,n)}}}return t}function xr(e,t,r){var n={"HX-Request":"true","HX-Trigger":ee(e,"id"),"HX-Trigger-Name":ee(e,"name"),"HX-Target":te(t,"id"),"HX-Current-URL":re().location.href};Rr(e,"hx-headers",false,n);if(r!==undefined){n["HX-Prompt"]=r}if(ae(e).boosted){n["HX-Boosted"]="true"}return n}function yr(t,e){var r=ne(e,"hx-params");if(r){if(r==="none"){return{}}else if(r==="*"){return t}else if(r.indexOf("not ")===0){oe(r.substr(4).split(","),function(e){e=e.trim();delete t[e]});return t}else{var n={};oe(r.split(","),function(e){e=e.trim();n[e]=t[e]});return n}}else{return t}}function br(e){return ee(e,"href")&&ee(e,"href").indexOf("#")>=0}function wr(e,t){var r=t?t:ne(e,"hx-swap");var n={swapStyle:ae(e).boosted?"innerHTML":Q.config.defaultSwapStyle,swapDelay:Q.config.defaultSwapDelay,settleDelay:Q.config.defaultSettleDelay};if(Q.config.scrollIntoViewOnBoost&&ae(e).boosted&&!br(e)){n["show"]="top"}if(r){var i=D(r);if(i.length>0){for(var a=0;a<i.length;a++){var o=i[a];if(o.indexOf("swap:")===0){n["swapDelay"]=d(o.substr(5))}else if(o.indexOf("settle:")===0){n["settleDelay"]=d(o.substr(7))}else if(o.indexOf("transition:")===0){n["transition"]=o.substr(11)==="true"}else if(o.indexOf("ignoreTitle:")===0){n["ignoreTitle"]=o.substr(12)==="true"}else if(o.indexOf("scroll:")===0){var s=o.substr(7);var l=s.split(":");var u=l.pop();var f=l.length>0?l.join(":"):null;n["scroll"]=u;n["scrollTarget"]=f}else if(o.indexOf("show:")===0){var c=o.substr(5);var l=c.split(":");var h=l.pop();var f=l.length>0?l.join(":"):null;n["show"]=h;n["showTarget"]=f}else if(o.indexOf("focus-scroll:")===0){var v=o.substr("focus-scroll:".length);n["focusScroll"]=v=="true"}else if(a==0){n["swapStyle"]=o}else{b("Unknown modifier in hx-swap: "+o)}}}}return n}function Sr(e){return ne(e,"hx-encoding")==="multipart/form-data"||h(e,"form")&&ee(e,"enctype")==="multipart/form-data"}function Er(t,r,n){var i=null;R(r,function(e){if(i==null){i=e.encodeParameters(t,n,r)}});if(i!=null){return i}else{if(Sr(r)){return mr(n)}else{return pr(n)}}}function T(e){return{tasks:[],elts:[e]}}function Cr(e,t){var r=e[0];var n=e[e.length-1];if(t.scroll){var i=null;if(t.scrollTarget){i=ue(r,t.scrollTarget)}if(t.scroll==="top"&&(r||i)){i=i||r;i.scrollTop=0}if(t.scroll==="bottom"&&(n||i)){i=i||n;i.scrollTop=i.scrollHeight}}if(t.show){var i=null;if(t.showTarget){var a=t.showTarget;if(t.showTarget==="window"){a="body"}i=ue(r,a)}if(t.show==="top"&&(r||i)){i=i||r;i.scrollIntoView({block:"start",behavior:Q.config.scrollBehavior})}if(t.show==="bottom"&&(n||i)){i=i||n;i.scrollIntoView({block:"end",behavior:Q.config.scrollBehavior})}}}function Rr(e,t,r,n){if(n==null){n={}}if(e==null){return n}var i=te(e,t);if(i){var a=i.trim();var o=r;if(a==="unset"){return null}if(a.indexOf("javascript:")===0){a=a.substr(11);o=true}else if(a.indexOf("js:")===0){a=a.substr(3);o=true}if(a.indexOf("{")!==0){a="{"+a+"}"}var s;if(o){s=Tr(e,function(){return Function("return ("+a+")")()},{})}else{s=E(a)}for(var l in s){if(s.hasOwnProperty(l)){if(n[l]==null){n[l]=s[l]}}}}return Rr(u(e),t,r,n)}function Tr(e,t,r){if(Q.config.allowEval){return t()}else{fe(e,"htmx:evalDisallowedError");return r}}function Or(e,t){return Rr(e,"hx-vars",true,t)}function qr(e,t){return Rr(e,"hx-vals",false,t)}function Hr(e){return le(Or(e),qr(e))}function Lr(t,r,n){if(n!==null){try{t.setRequestHeader(r,n)}catch(e){t.setRequestHeader(r,encodeURIComponent(n));t.setRequestHeader(r+"-URI-AutoEncoded","true")}}}function Ar(t){if(t.responseURL&&typeof URL!=="undefined"){try{var e=new URL(t.responseURL);return e.pathname+e.search}catch(e){fe(re().body,"htmx:badResponseUrl",{url:t.responseURL})}}}function O(e,t){return t.test(e.getAllResponseHeaders())}function Nr(e,t,r){e=e.toLowerCase();if(r){if(r instanceof Element||I(r,"String")){return he(e,t,null,null,{targetOverride:p(r),returnPromise:true})}else{return he(e,t,p(r.source),r.event,{handler:r.handler,headers:r.headers,values:r.values,targetOverride:p(r.target),swapOverride:r.swap,select:r.select,returnPromise:true})}}else{return he(e,t,null,null,{returnPromise:true})}}function Ir(e){var t=[];while(e){t.push(e);e=e.parentElement}return t}function kr(e,t,r){var n;var i;if(typeof URL==="function"){i=new URL(t,document.location.href);var a=document.location.origin;n=a===i.origin}else{i=t;n=g(t,document.location.origin)}if(Q.config.selfRequestsOnly){if(!n){return false}}return ce(e,"htmx:validateUrl",le({url:i,sameHost:n},r))}function he(t,r,n,i,a,e){var o=null;var s=null;a=a!=null?a:{};if(a.returnPromise&&typeof Promise!=="undefined"){var l=new Promise(function(e,t){o=e;s=t})}if(n==null){n=re().body}var M=a.handler||Mr;var X=a.select||null;if(!se(n)){ie(o);return l}var u=a.targetOverride||ye(n);if(u==null||u==pe){fe(n,"htmx:targetError",{target:te(n,"hx-target")});ie(s);return l}var f=ae(n);var c=f.lastButtonClicked;if(c){var h=ee(c,"formaction");if(h!=null){r=h}var v=ee(c,"formmethod");if(v!=null){if(v.toLowerCase()!=="dialog"){t=v}}}var d=ne(n,"hx-confirm");if(e===undefined){var D=function(e){return he(t,r,n,i,a,!!e)};var U={target:u,elt:n,path:r,verb:t,triggeringEvent:i,etc:a,issueRequest:D,question:d};if(ce(n,"htmx:confirm",U)===false){ie(o);return l}}var g=n;var p=ne(n,"hx-sync");var m=null;var x=false;if(p){var F=p.split(":");var B=F[0].trim();if(B==="this"){g=xe(n,"hx-sync")}else{g=ue(n,B)}p=(F[1]||"drop").trim();f=ae(g);if(p==="drop"&&f.xhr&&f.abortable!==true){ie(o);return l}else if(p==="abort"){if(f.xhr){ie(o);return l}else{x=true}}else if(p==="replace"){ce(g,"htmx:abort")}else if(p.indexOf("queue")===0){var V=p.split(" ");m=(V[1]||"last").trim()}}if(f.xhr){if(f.abortable){ce(g,"htmx:abort")}else{if(m==null){if(i){var y=ae(i);if(y&&y.triggerSpec&&y.triggerSpec.queue){m=y.triggerSpec.queue}}if(m==null){m="last"}}if(f.queuedRequests==null){f.queuedRequests=[]}if(m==="first"&&f.queuedRequests.length===0){f.queuedRequests.push(function(){he(t,r,n,i,a)})}else if(m==="all"){f.queuedRequests.push(function(){he(t,r,n,i,a)})}else if(m==="last"){f.queuedRequests=[];f.queuedRequests.push(function(){he(t,r,n,i,a)})}ie(o);return l}}var b=new XMLHttpRequest;f.xhr=b;f.abortable=x;var w=function(){f.xhr=null;f.abortable=false;if(f.queuedRequests!=null&&f.queuedRequests.length>0){var e=f.queuedRequests.shift();e()}};var j=ne(n,"hx-prompt");if(j){var S=prompt(j);if(S===null||!ce(n,"htmx:prompt",{prompt:S,target:u})){ie(o);w();return l}}if(d&&!e){if(!confirm(d)){ie(o);w();return l}}var E=xr(n,u,S);if(t!=="get"&&!Sr(n)){E["Content-Type"]="application/x-www-form-urlencoded"}if(a.headers){E=le(E,a.headers)}var _=dr(n,t);var C=_.errors;var R=_.values;if(a.values){R=le(R,a.values)}var z=Hr(n);var $=le(R,z);var T=yr($,n);if(Q.config.getCacheBusterParam&&t==="get"){T["org.htmx.cache-buster"]=ee(u,"id")||"true"}if(r==null||r===""){r=re().location.href}var O=Rr(n,"hx-request");var W=ae(n).boosted;var q=Q.config.methodsThatUseUrlParams.indexOf(t)>=0;var H={boosted:W,useUrlParams:q,parameters:T,unfilteredParameters:$,headers:E,target:u,verb:t,errors:C,withCredentials:a.credentials||O.credentials||Q.config.withCredentials,timeout:a.timeout||O.timeout||Q.config.timeout,path:r,triggeringEvent:i};if(!ce(n,"htmx:configRequest",H)){ie(o);w();return l}r=H.path;t=H.verb;E=H.headers;T=H.parameters;C=H.errors;q=H.useUrlParams;if(C&&C.length>0){ce(n,"htmx:validation:halted",H);ie(o);w();return l}var G=r.split("#");var J=G[0];var L=G[1];var A=r;if(q){A=J;var Z=Object.keys(T).length!==0;if(Z){if(A.indexOf("?")<0){A+="?"}else{A+="&"}A+=pr(T);if(L){A+="#"+L}}}if(!kr(n,A,H)){fe(n,"htmx:invalidPath",H);ie(s);return l}b.open(t.toUpperCase(),A,true);b.overrideMimeType("text/html");b.withCredentials=H.withCredentials;b.timeout=H.timeout;if(O.noHeaders){}else{for(var N in E){if(E.hasOwnProperty(N)){var K=E[N];Lr(b,N,K)}}}var I={xhr:b,target:u,requestConfig:H,etc:a,boosted:W,select:X,pathInfo:{requestPath:r,finalRequestPath:A,anchor:L}};b.onload=function(){try{var e=Ir(n);I.pathInfo.responsePath=Ar(b);M(n,I);lr(k,P);ce(n,"htmx:afterRequest",I);ce(n,"htmx:afterOnLoad",I);if(!se(n)){var t=null;while(e.length>0&&t==null){var r=e.shift();if(se(r)){t=r}}if(t){ce(t,"htmx:afterRequest",I);ce(t,"htmx:afterOnLoad",I)}}ie(o);w()}catch(e){fe(n,"htmx:onLoadError",le({error:e},I));throw e}};b.onerror=function(){lr(k,P);fe(n,"htmx:afterRequest",I);fe(n,"htmx:sendError",I);ie(s);w()};b.onabort=function(){lr(k,P);fe(n,"htmx:afterRequest",I);fe(n,"htmx:sendAbort",I);ie(s);w()};b.ontimeout=function(){lr(k,P);fe(n,"htmx:afterRequest",I);fe(n,"htmx:timeout",I);ie(s);w()};if(!ce(n,"htmx:beforeRequest",I)){ie(o);w();return l}var k=or(n);var P=sr(n);oe(["loadstart","loadend","progress","abort"],function(t){oe([b,b.upload],function(e){e.addEventListener(t,function(e){ce(n,"htmx:xhr:"+t,{lengthComputable:e.lengthComputable,loaded:e.loaded,total:e.total})})})});ce(n,"htmx:beforeSend",I);var Y=q?null:Er(b,n,T);b.send(Y);return l}function Pr(e,t){var r=t.xhr;var n=null;var i=null;if(O(r,/HX-Push:/i)){n=r.getResponseHeader("HX-Push");i="push"}else if(O(r,/HX-Push-Url:/i)){n=r.getResponseHeader("HX-Push-Url");i="push"}else if(O(r,/HX-Replace-Url:/i)){n=r.getResponseHeader("HX-Replace-Url");i="replace"}if(n){if(n==="false"){return{}}else{return{type:i,path:n}}}var a=t.pathInfo.finalRequestPath;var o=t.pathInfo.responsePath;var s=ne(e,"hx-push-url");var l=ne(e,"hx-replace-url");var u=ae(e).boosted;var f=null;var c=null;if(s){f="push";c=s}else if(l){f="replace";c=l}else if(u){f="push";c=o||a}if(c){if(c==="false"){return{}}if(c==="true"){c=o||a}if(t.pathInfo.anchor&&c.indexOf("#")===-1){c=c+"#"+t.pathInfo.anchor}return{type:f,path:c}}else{return{}}}function Mr(l,u){var f=u.xhr;var c=u.target;var e=u.etc;var t=u.requestConfig;var h=u.select;if(!ce(l,"htmx:beforeOnLoad",u))return;if(O(f,/HX-Trigger:/i)){_e(f,"HX-Trigger",l)}if(O(f,/HX-Location:/i)){er();var r=f.getResponseHeader("HX-Location");var v;if(r.indexOf("{")===0){v=E(r);r=v["path"];delete v["path"]}Nr("GET",r,v).then(function(){tr(r)});return}var n=O(f,/HX-Refresh:/i)&&"true"===f.getResponseHeader("HX-Refresh");if(O(f,/HX-Redirect:/i)){location.href=f.getResponseHeader("HX-Redirect");n&&location.reload();return}if(n){location.reload();return}if(O(f,/HX-Retarget:/i)){if(f.getResponseHeader("HX-Retarget")==="this"){u.target=l}else{u.target=ue(l,f.getResponseHeader("HX-Retarget"))}}var d=Pr(l,u);var i=f.status>=200&&f.status<400&&f.status!==204;var g=f.response;var a=f.status>=400;var p=Q.config.ignoreTitle;var o=le({shouldSwap:i,serverResponse:g,isError:a,ignoreTitle:p},u);if(!ce(c,"htmx:beforeSwap",o))return;c=o.target;g=o.serverResponse;a=o.isError;p=o.ignoreTitle;u.target=c;u.failed=a;u.successful=!a;if(o.shouldSwap){if(f.status===286){at(l)}R(l,function(e){g=e.transformResponse(g,f,l)});if(d.type){er()}var s=e.swapOverride;if(O(f,/HX-Reswap:/i)){s=f.getResponseHeader("HX-Reswap")}var v=wr(l,s);if(v.hasOwnProperty("ignoreTitle")){p=v.ignoreTitle}c.classList.add(Q.config.swappingClass);var m=null;var x=null;var y=function(){try{var e=document.activeElement;var t={};try{t={elt:e,start:e?e.selectionStart:null,end:e?e.selectionEnd:null}}catch(e){}var r;if(h){r=h}if(O(f,/HX-Reselect:/i)){r=f.getResponseHeader("HX-Reselect")}if(d.type){ce(re().body,"htmx:beforeHistoryUpdate",le({history:d},u));if(d.type==="push"){tr(d.path);ce(re().body,"htmx:pushedIntoHistory",{path:d.path})}else{rr(d.path);ce(re().body,"htmx:replacedInHistory",{path:d.path})}}var n=T(c);je(v.swapStyle,c,l,g,n,r);if(t.elt&&!se(t.elt)&&ee(t.elt,"id")){var i=document.getElementById(ee(t.elt,"id"));var a={preventScroll:v.focusScroll!==undefined?!v.focusScroll:!Q.config.defaultFocusScroll};if(i){if(t.start&&i.setSelectionRange){try{i.setSelectionRange(t.start,t.end)}catch(e){}}i.focus(a)}}c.classList.remove(Q.config.swappingClass);oe(n.elts,function(e){if(e.classList){e.classList.add(Q.config.settlingClass)}ce(e,"htmx:afterSwap",u)});if(O(f,/HX-Trigger-After-Swap:/i)){var o=l;if(!se(l)){o=re().body}_e(f,"HX-Trigger-After-Swap",o)}var s=function(){oe(n.tasks,function(e){e.call()});oe(n.elts,function(e){if(e.classList){e.classList.remove(Q.config.settlingClass)}ce(e,"htmx:afterSettle",u)});if(u.pathInfo.anchor){var e=re().getElementById(u.pathInfo.anchor);if(e){e.scrollIntoView({block:"start",behavior:"auto"})}}if(n.title&&!p){var t=C("title");if(t){t.innerHTML=n.title}else{window.document.title=n.title}}Cr(n.elts,v);if(O(f,/HX-Trigger-After-Settle:/i)){var r=l;if(!se(l)){r=re().body}_e(f,"HX-Trigger-After-Settle",r)}ie(m)};if(v.settleDelay>0){setTimeout(s,v.settleDelay)}else{s()}}catch(e){fe(l,"htmx:swapError",u);ie(x);throw e}};var b=Q.config.globalViewTransitions;if(v.hasOwnProperty("transition")){b=v.transition}if(b&&ce(l,"htmx:beforeTransition",u)&&typeof Promise!=="undefined"&&document.startViewTransition){var w=new Promise(function(e,t){m=e;x=t});var S=y;y=function(){document.startViewTransition(function(){S();return w})}}if(v.swapDelay>0){setTimeout(y,v.swapDelay)}else{y()}}if(a){fe(l,"htmx:responseError",le({error:"Response Status Error Code "+f.status+" from "+u.pathInfo.requestPath},u))}}var Xr={};function Dr(){return{init:function(e){return null},onEvent:function(e,t){return true},transformResponse:function(e,t,r){return e},isInlineSwap:function(e){return false},handleSwap:function(e,t,r,n){return false},encodeParameters:function(e,t,r){return null}}}function Ur(e,t){if(t.init){t.init(r)}Xr[e]=le(Dr(),t)}function Fr(e){delete Xr[e]}function Br(e,r,n){if(e==undefined){return r}if(r==undefined){r=[]}if(n==undefined){n=[]}var t=te(e,"hx-ext");if(t){oe(t.split(","),function(e){e=e.replace(/ /g,"");if(e.slice(0,7)=="ignore:"){n.push(e.slice(7));return}if(n.indexOf(e)<0){var t=Xr[e];if(t&&r.indexOf(t)<0){r.push(t)}}})}return Br(u(e),r,n)}var Vr=false;re().addEventListener("DOMContentLoaded",function(){Vr=true});function jr(e){if(Vr||re().readyState==="complete"){e()}else{re().addEventListener("DOMContentLoaded",e)}}function _r(){if(Q.config.includeIndicatorStyles!==false){re().head.insertAdjacentHTML("beforeend","<style> ."+Q.config.indicatorClass+"{opacity:0} ."+Q.config.requestClass+" ."+Q.config.indicatorClass+"{opacity:1; transition: opacity 200ms ease-in;} ."+Q.config.requestClass+"."+Q.config.indicatorClass+"{opacity:1; transition: opacity 200ms ease-in;} </style>")}}function zr(){var e=re().querySelector('meta[name="htmx-config"]');if(e){return E(e.content)}else{return null}}function $r(){var e=zr();if(e){Q.config=le(Q.config,e)}}jr(function(){$r();_r();var e=re().body;zt(e);var t=re().querySelectorAll("[hx-trigger='restored'],[data-hx-trigger='restored']");e.addEventListener("htmx:abort",function(e){var t=e.target;var r=ae(t);if(r&&r.xhr){r.xhr.abort()}});const r=window.onpopstate?window.onpopstate.bind(window):null;window.onpopstate=function(e){if(e.state&&e.state.htmx){ar();oe(t,function(e){ce(e,"htmx:restored",{document:re(),triggerEvent:ce})})}else{if(r){r(e)}}};setTimeout(function(){ce(e,"htmx:load",{});e=null},0)});return Q}()});1 var htmx=function(){"use strict";const Q={onLoad:null,process:null,on:null,off:null,trigger:null,ajax:null,find:null,findAll:null,closest:null,values:function(e,t){const n=dn(e,t||"post");return n.values},remove:null,addClass:null,removeClass:null,toggleClass:null,takeClass:null,swap:null,defineExtension:null,removeExtension:null,logAll:null,logNone:null,logger:null,config:{historyEnabled:true,historyCacheSize:10,refreshOnHistoryMiss:false,defaultSwapStyle:"innerHTML",defaultSwapDelay:0,defaultSettleDelay:20,includeIndicatorStyles:true,indicatorClass:"htmx-indicator",requestClass:"htmx-request",addedClass:"htmx-added",settlingClass:"htmx-settling",swappingClass:"htmx-swapping",allowEval:true,allowScriptTags:true,inlineScriptNonce:"",inlineStyleNonce:"",attributesToSettle:["class","style","width","height"],withCredentials:false,timeout:0,wsReconnectDelay:"full-jitter",wsBinaryType:"blob",disableSelector:"[hx-disable], [data-hx-disable]",scrollBehavior:"instant",defaultFocusScroll:false,getCacheBusterParam:false,globalViewTransitions:false,methodsThatUseUrlParams:["get","delete"],selfRequestsOnly:true,ignoreTitle:false,scrollIntoViewOnBoost:true,triggerSpecsCache:null,disableInheritance:false,responseHandling:[{code:"204",swap:false},{code:"[23]..",swap:true},{code:"[45]..",swap:false,error:true}],allowNestedOobSwaps:true,historyRestoreAsHxRequest:true,reportValidityOfForms:false},parseInterval:null,location:location,_:null,version:"2.0.10"};Q.onLoad=j;Q.process=Ft;Q.on=ye;Q.off=xe;Q.trigger=ae;Q.ajax=Nn;Q.find=f;Q.findAll=y;Q.closest=g;Q.remove=z;Q.addClass=w;Q.removeClass=b;Q.toggleClass=G;Q.takeClass=W;Q.swap=_e;Q.defineExtension=_n;Q.removeExtension=zn;Q.logAll=$;Q.logNone=_;Q.parseInterval=d;Q._=e;const n={addTriggerHandler:St,bodyContains:se,canAccessLocalStorage:U,findThisElement:we,filterValues:yn,swap:_e,hasAttribute:s,getAttributeValue:a,getClosestAttributeValue:ne,getClosestMatch:A,getExpressionVars:Rn,getHeaders:mn,getInputValues:dn,getInternalData:oe,getSwapSpecification:bn,getTriggerSpecs:st,getTarget:Se,makeFragment:P,mergeObjects:le,makeSettleInfo:Sn,oobSwap:He,querySelectorExt:ce,settleImmediately:Yt,shouldCancel:ht,triggerEvent:ae,triggerErrorEvent:fe,withExtensions:Vt};const de=["get","post","put","delete","patch"];const R=de.map(function(e){return"[hx-"+e+"], [data-hx-"+e+"]"}).join(", ");function d(e){if(e==undefined){return undefined}let t=NaN;if(e.slice(-2)=="ms"){t=parseFloat(e.slice(0,-2))}else if(e.slice(-1)=="s"){t=parseFloat(e.slice(0,-1))*1e3}else if(e.slice(-1)=="m"){t=parseFloat(e.slice(0,-1))*1e3*60}else{t=parseFloat(e)}return isNaN(t)?undefined:t}function ee(e,t){return e instanceof Element&&e.getAttribute(t)}function s(e,t){return!!e.hasAttribute&&(e.hasAttribute(t)||e.hasAttribute("data-"+t))}function a(e,t){return ee(e,t)||ee(e,"data-"+t)}function c(e){const t=e.parentElement;if(!t&&e.parentNode instanceof ShadowRoot)return e.parentNode;return t}function te(){return document}function q(e,t){return e.getRootNode?e.getRootNode({composed:t}):te()}function A(e,t){while(e&&!t(e)){e=c(e)}return e||null}function o(e,t,n){const r=a(t,n);const o=a(t,"hx-disinherit");var i=a(t,"hx-inherit");if(e!==t){if(Q.config.disableInheritance){if(i&&(i==="*"||i.split(" ").indexOf(n)>=0)){return r}else{return null}}if(o&&(o==="*"||o.split(" ").indexOf(n)>=0)){return"unset"}}return r}function ne(t,n){let r=null;A(t,function(e){return!!(r=o(t,ue(e),n))});if(r!=="unset"){return r}}function h(e,t){return e instanceof Element&&e.matches(t)}function N(e){const t=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i;const n=t.exec(e);if(n){return n[1].toLowerCase()}else{return""}}function I(e){if("parseHTMLUnsafe"in Document){return Document.parseHTMLUnsafe(e)}const t=new DOMParser;return t.parseFromString(e,"text/html")}function L(e,t){while(t.childNodes.length>0){e.append(t.childNodes[0])}}function r(e){const t=te().createElement("script");ie(e.attributes,function(e){t.setAttribute(e.name,e.value)});t.textContent=e.textContent;t.async=false;if(Q.config.inlineScriptNonce){t.nonce=Q.config.inlineScriptNonce}return t}function i(e){return e.matches("script")&&(e.type==="text/javascript"||e.type==="module"||e.type==="")}function D(e){Array.from(e.querySelectorAll("script")).forEach(e=>{if(i(e)){const t=r(e);const n=e.parentNode;try{n.insertBefore(t,e)}catch(e){H(e)}finally{e.remove()}}})}function P(e){const t=e.replace(/<head(\s[^>]*)?>[\s\S]*?<\/head>/i,"");const n=N(t);let r;if(n==="html"){r=new DocumentFragment;const i=I(e);L(r,i.body);r.title=i.title}else if(n==="body"){r=new DocumentFragment;const i=I(t);L(r,i.body);r.title=i.title}else{const i=I('<body><template class="internal-htmx-wrapper">'+t+"</template></body>");r=i.querySelector("template").content;r.title=i.title;var o=r.querySelector("title");if(o&&o.parentNode===r){o.remove();r.title=o.innerText}}if(r){if(Q.config.allowScriptTags){D(r)}else{r.querySelectorAll("script").forEach(e=>e.remove())}}return r}function re(e){if(e){e()}}function t(e,t){return Object.prototype.toString.call(e)==="[object "+t+"]"}function k(e){return typeof e==="function"}function M(e){return t(e,"Object")}function oe(e){const t="htmx-internal-data";let n=e[t];if(!n){n=e[t]={}}return n}function F(t){const n=[];if(t){for(let e=0;e<t.length;e++){n.push(t[e])}}return n}function ie(t,n){if(t){for(let e=0;e<t.length;e++){n(t[e])}}}function B(e){const t=e.getBoundingClientRect();const n=t.top;const r=t.bottom;return n<window.innerHeight&&r>=0}function se(e){return e.getRootNode({composed:true})===document}function X(e){return e.trim().split(/\s+/)}function le(e,t){for(const n in t){if(t.hasOwnProperty(n)){e[n]=t[n]}}return e}function v(e){try{return JSON.parse(e)}catch(e){H(e);return null}}function U(){const e="htmx:sessionStorageTest";try{sessionStorage.setItem(e,e);sessionStorage.removeItem(e);return true}catch(e){return false}}function V(e){try{const t=new URL(e,window.location.href);e=t.pathname+t.search}catch(e){}if(e!="/"){e=e.replace(/\/+$/,"")}return e}function e(e){return On(te().body,function(){return eval(e)})}function j(t){const e=Q.on("htmx:load",function(e){t(e.detail.elt)});return e}function $(){Q.logger=function(e,t,n){if(console){console.log(t,e,n)}}}function _(){Q.logger=null}function f(e,t){if(typeof e!=="string"){return e.querySelector(t)}else{return f(te(),e)}}function y(e,t){if(typeof e!=="string"){return e.querySelectorAll(t)}else{return y(te(),e)}}function x(){return window}function z(e,t){e=S(e);if(t){x().setTimeout(function(){z(e);e=null},t)}else{c(e).removeChild(e)}}function ue(e){return e instanceof Element?e:null}function J(e){return e instanceof HTMLElement?e:null}function K(e){return typeof e==="string"?e:null}function p(e){return e instanceof Element||e instanceof Document||e instanceof DocumentFragment?e:null}function w(e,t,n){e=ue(S(e));if(!e){return}if(n){x().setTimeout(function(){w(e,t);e=null},n)}else{e.classList&&e.classList.add(t)}}function b(e,t,n){let r=ue(S(e));if(!r){return}if(n){x().setTimeout(function(){b(r,t);r=null},n)}else{if(r.classList){r.classList.remove(t);if(r.classList.length===0){r.removeAttribute("class")}}}}function G(e,t){e=S(e);e.classList.toggle(t)}function W(e,t){e=S(e);ie(e.parentElement.children,function(e){b(e,t)});w(ue(e),t)}function g(e,t){e=ue(S(e));if(e){return e.closest(t)}return null}function l(e,t){return e.substring(0,t.length)===t}function Z(e,t){return e.substring(e.length-t.length)===t}function Y(e){const t=e.trim();if(l(t,"<")&&Z(t,"/>")){return t.substring(1,t.length-2)}else{return t}}function m(t,r,n){if(r.indexOf("global ")===0){return m(t,r.slice(7),true)}t=S(t);const o=[];{let t=0;let n=0;for(let e=0;e<r.length;e++){const l=r[e];if(l===","&&t===0){o.push(r.substring(n,e));n=e+1;continue}if(l==="<"){t++}else if(l==="/"&&e<r.length-1&&r[e+1]===">"){t--}}if(n<r.length){o.push(r.substring(n))}}const i=[];const s=[];while(o.length>0){const r=Y(o.shift());let e;if(r.indexOf("closest ")===0){e=g(ue(t),Y(r.slice(8)))}else if(r.indexOf("find ")===0){e=f(p(t),Y(r.slice(5)))}else if(r==="next"||r==="nextElementSibling"){e=ue(t).nextElementSibling}else if(r.indexOf("next ")===0){e=pe(t,Y(r.slice(5)),!!n)}else if(r==="previous"||r==="previousElementSibling"){e=ue(t).previousElementSibling}else if(r.indexOf("previous ")===0){e=ge(t,Y(r.slice(9)),!!n)}else if(r==="document"){e=document}else if(r==="window"){e=window}else if(r==="body"){e=document.body}else if(r==="root"){e=q(t,!!n)}else if(r==="host"){e=t.getRootNode().host}else{s.push(r)}if(e){i.push(e)}}if(s.length>0){const e=s.join(",");const u=p(q(t,!!n));i.push(...F(u.querySelectorAll(e)))}return i}var pe=function(t,e,n){const r=p(q(t,n)).querySelectorAll(e);for(let e=0;e<r.length;e++){const o=r[e];if(o.compareDocumentPosition(t)===Node.DOCUMENT_POSITION_PRECEDING){return o}}};var ge=function(t,e,n){const r=p(q(t,n)).querySelectorAll(e);for(let e=r.length-1;e>=0;e--){const o=r[e];if(o.compareDocumentPosition(t)===Node.DOCUMENT_POSITION_FOLLOWING){return o}}};function ce(e,t){if(typeof e!=="string"){return m(e,t)[0]}else{return m(te().body,e)[0]}}function S(e,t){if(typeof e==="string"){return f(p(t)||document,e)}else{return e}}function me(e,t,n,r){if(k(t)){return{target:te().body,event:K(e),listener:t,options:n}}else{return{target:S(e),event:K(t),listener:n,options:r}}}function ye(t,n,r,o){Gn(function(){const e=me(t,n,r,o);e.target.addEventListener(e.event,e.listener,e.options)});const e=k(n);return e?n:r}function xe(t,n,r){Gn(function(){const e=me(t,n,r);e.target.removeEventListener(e.event,e.listener)});return k(n)?n:r}const be=te().createElement("output");function ve(t,n){const e=ne(t,n);if(e){if(e==="this"){return[we(t,n)]}else{const r=m(t,e);const o=/(^|,)(\s*)inherit(\s*)($|,)/.test(e);if(o){const i=ue(A(t,function(e){return e!==t&&s(ue(e),n)}));if(i){r.push(...ve(i,n))}}if(r.length===0){H('The selector "'+e+'" on '+n+" returned no matches!");return[be]}else{return r}}}}function we(e,t){return ue(A(e,function(e){return a(ue(e),t)!=null}))}function Se(e){const t=ne(e,"hx-target");if(t){if(t==="this"){return we(e,"hx-target")}else{return ce(e,t)}}else{const n=oe(e);if(n.boosted){return te().body}else{return e}}}function Ee(e){return Q.config.attributesToSettle.includes(e)}function Ce(t,n){ie(Array.from(t.attributes),function(e){if(!n.hasAttribute(e.name)&&Ee(e.name)){t.removeAttribute(e.name)}});ie(n.attributes,function(e){if(Ee(e.name)){t.setAttribute(e.name,e.value)}})}function Oe(t,e){const n=Jn(e);for(let e=0;e<n.length;e++){const r=n[e];try{if(r.isInlineSwap(t)){return true}}catch(e){H(e)}}return t==="outerHTML"}function He(e,o,i,t){t=t||te();let n="#"+CSS.escape(ee(o,"id"));let s="outerHTML";if(e==="true"){}else if(e.indexOf(":")>0){s=e.substring(0,e.indexOf(":"));n=e.substring(e.indexOf(":")+1)}else{s=e}o.removeAttribute("hx-swap-oob");o.removeAttribute("data-hx-swap-oob");const r=m(t,n,false);if(r.length){ie(r,function(e){let t;const n=o.cloneNode(true);t=te().createDocumentFragment();t.appendChild(n);if(!Oe(s,e)){t=p(n)}const r={shouldSwap:true,target:e,fragment:t};if(!ae(e,"htmx:oobBeforeSwap",r))return;e=r.target;if(r.shouldSwap){Re(t);je(s,e,e,t,i);Te()}ie(i.elts,function(e){ae(e,"htmx:oobAfterSwap",r)})});o.parentNode.removeChild(o)}else{o.parentNode.removeChild(o);fe(te().body,"htmx:oobErrorNoTarget",{content:o,target:n})}return e}function Te(){const e=f("#--htmx-preserve-pantry--");if(e){for(const t of[...e.children]){const n=f("#"+t.id);n.parentNode.moveBefore(t,n);n.remove()}e.remove()}}function Re(e){ie(y(e,"[hx-preserve], [data-hx-preserve]"),function(e){const t=a(e,"id");const n=te().getElementById(t);if(n!=null){if(e.moveBefore){let e=f("#--htmx-preserve-pantry--");if(e==null){te().body.insertAdjacentHTML("afterend","<div id='--htmx-preserve-pantry--'></div>");e=f("#--htmx-preserve-pantry--")}e.moveBefore(n,null)}else{e.parentNode.replaceChild(n,e)}}})}function qe(i,e,s){ie(e.querySelectorAll("[id]"),function(t){const n=ee(t,"id");if(n&&n.length>0){const e=p(i);const r=e&&e.querySelector(CSS.escape(t.tagName)+"#"+CSS.escape(n));if(r&&r!==e){const o=t.cloneNode();Ce(t,r);s.tasks.push(function(){Ce(t,o)})}}})}function Ae(e){return function(){b(e,Q.config.addedClass);Ft(ue(e));Ne(p(e));ae(e,"htmx:load")}}function Ne(e){const t="[autofocus]";const n=J(h(e,t)?e:e.querySelector(t));if(n!=null){n.focus()}}function u(e,t,n,r){qe(e,n,r);while(n.childNodes.length>0){const o=n.firstChild;w(ue(o),Q.config.addedClass);e.insertBefore(o,t);if(o.nodeType!==Node.TEXT_NODE&&o.nodeType!==Node.COMMENT_NODE){r.tasks.push(Ae(o))}}}function Ie(e,t){let n=0;while(n<e.length){t=(t<<5)-t+e.charCodeAt(n++)|0}return t}function Le(t){let n=0;for(let e=0;e<t.attributes.length;e++){const r=t.attributes[e];if(r.value){n=Ie(r.name,n);n=Ie(r.value,n)}}return n}function De(t){const n=oe(t);if(n.onHandlers){for(let e=0;e<n.onHandlers.length;e++){const r=n.onHandlers[e];xe(t,r.event,r.listener)}delete n.onHandlers}}function Pe(e){const t=oe(e);if(t.timeout){clearTimeout(t.timeout)}if(t.listenerInfos){ie(t.listenerInfos,function(e){if(e.on){xe(e.on,e.trigger,e.listener)}})}De(e);ie(Object.keys(t),function(e){if(e!=="firstInitCompleted")delete t[e]})}function E(e){ae(e,"htmx:beforeCleanupElement");Pe(e);ie(e.children,function(e){E(e)})}function ke(t,e,n){if(t.tagName==="BODY"){return Ve(t,e,n)}let r;const o=t.previousSibling;const i=c(t);if(!i){return}u(i,t,e,n);if(o==null){r=i.firstChild}else{r=o.nextSibling}n.elts=n.elts.filter(function(e){return e!==t});while(r&&r!==t){if(r instanceof Element){n.elts.push(r)}r=r.nextSibling}E(t);t.remove()}function Me(e,t,n){return u(e,e.firstChild,t,n)}function Fe(e,t,n){return u(c(e),e,t,n)}function Be(e,t,n){return u(e,null,t,n)}function Xe(e,t,n){return u(c(e),e.nextSibling,t,n)}function Ue(e){E(e);const t=c(e);if(t){return t.removeChild(e)}}function Ve(e,t,n){const r=e.firstChild;u(e,r,t,n);if(r){while(r.nextSibling){E(r.nextSibling);e.removeChild(r.nextSibling)}E(r);e.removeChild(r)}}function je(t,e,n,r,o){switch(t){case"none":return;case"outerHTML":ke(n,r,o);return;case"afterbegin":Me(n,r,o);return;case"beforebegin":Fe(n,r,o);return;case"beforeend":Be(n,r,o);return;case"afterend":Xe(n,r,o);return;case"delete":Ue(n);return;default:var i=Jn(e);for(let e=0;e<i.length;e++){const s=i[e];try{const l=s.handleSwap(t,n,r,o);if(l){if(Array.isArray(l)){for(let e=0;e<l.length;e++){const u=l[e];if(u.nodeType!==Node.TEXT_NODE&&u.nodeType!==Node.COMMENT_NODE){o.tasks.push(Ae(u))}}}return}}catch(e){H(e)}}if(t==="innerHTML"){Ve(n,r,o)}else{je(Q.config.defaultSwapStyle,e,n,r,o)}}}function $e(e,n,r){var t=y(e,"[hx-swap-oob], [data-hx-swap-oob]");ie(t,function(e){if(Q.config.allowNestedOobSwaps||e.parentElement===null){const t=a(e,"hx-swap-oob");if(t!=null){He(t,e,n,r)}}else{e.removeAttribute("hx-swap-oob");e.removeAttribute("data-hx-swap-oob")}});return t.length>0}function _e(h,d,p,g){if(!g){g={}}let m=null;let n=null;let e=function(){re(g.beforeSwapCallback);h=S(h);const r=g.contextElement?q(g.contextElement,false):te();const e=document.activeElement;let t={};t={elt:e,start:e?e.selectionStart:null,end:e?e.selectionEnd:null};const o=Sn(h);if(p.swapStyle==="textContent"){h.textContent=d}else{let n=P(d);o.title=g.title||n.title;if(g.historyRequest){n=n.querySelector("[hx-history-elt],[data-hx-history-elt]")||n}if(g.selectOOB){const i=g.selectOOB.split(",");for(let t=0;t<i.length;t++){const s=i[t].split(":",2);let e=s[0].trim();if(e.indexOf("#")===0){e=e.substring(1)}const l=s[1]||"true";const u=n.querySelector("#"+e);if(u){He(l,u,o,r)}}}$e(n,o,r);ie(y(n,"template"),function(e){if(e.content&&$e(e.content,o,r)){e.remove()}});if(g.select){const c=te().createDocumentFragment();ie(n.querySelectorAll(g.select),function(e){c.appendChild(e)});n=c}Re(n);je(p.swapStyle,g.contextElement,h,n,o);Te()}if(t.elt&&!se(t.elt)&&ee(t.elt,"id")){const f=document.getElementById(ee(t.elt,"id"));const a={preventScroll:p.focusScroll!==undefined?!p.focusScroll:!Q.config.defaultFocusScroll};if(f){if(t.start&&f.setSelectionRange){try{f.setSelectionRange(t.start,t.end)}catch(e){}}f.focus(a)}}b(h,Q.config.swappingClass);ie(o.elts,function(e){if(e.classList){w(e,Q.config.settlingClass)}ae(e,"htmx:afterSwap",g.eventInfo)});re(g.afterSwapCallback);if(!p.ignoreTitle){Xn(o.title)}const n=function(){ie(o.tasks,function(e){e.call()});ie(o.elts,function(e){if(e.classList){b(e,Q.config.settlingClass)}ae(e,"htmx:afterSettle",g.eventInfo)});if(g.anchor){const e=ue(S("#"+g.anchor));if(e){e.scrollIntoView({block:"start",behavior:"auto"})}}En(o.elts,p);re(g.afterSettleCallback);re(m)};if(p.settleDelay>0){x().setTimeout(n,p.settleDelay)}else{n()}};let t=Q.config.globalViewTransitions;if(p.hasOwnProperty("transition")){t=p.transition}const r=g.contextElement||te();if(t&&ae(r,"htmx:beforeTransition",g.eventInfo)&&typeof Promise!=="undefined"&&document.startViewTransition){const o=new Promise(function(e,t){m=e;n=t});const i=e;e=function(){document.startViewTransition(function(){i();return o})}}try{if(p?.swapDelay&&p.swapDelay>0){x().setTimeout(e,p.swapDelay)}else{e()}}catch(e){fe(r,"htmx:swapError",g.eventInfo);re(n);throw e}}function ze(e,t,n){const r=e.getResponseHeader(t);if(r.indexOf("{")===0){const o=v(r);for(const i in o){if(o.hasOwnProperty(i)){let e=o[i];if(M(e)){n=e.target!==undefined?e.target:n}else{e={value:e}}ae(n,i,e)}}}else{const s=r.split(",");for(let e=0;e<s.length;e++){ae(n,s[e].trim(),[])}}}const Je=/\s/;const C=/[\s,]/;const Ke=/[_$a-zA-Z]/;const Ge=/[_$a-zA-Z0-9]/;const We=['"',"'","/"];const Ze=/[^\s]/;const Ye=/[{(]/;const Qe=/[})]/;function et(e){const t=[];let n=0;while(n<e.length){if(Ke.exec(e.charAt(n))){var r=n;while(Ge.exec(e.charAt(n+1))){n++}t.push(e.substring(r,n+1))}else if(We.indexOf(e.charAt(n))!==-1){const o=e.charAt(n);var r=n;n++;while(n<e.length&&e.charAt(n)!==o){if(e.charAt(n)==="\\"){n++}n++}t.push(e.substring(r,n+1))}else{const i=e.charAt(n);t.push(i)}n++}return t}function tt(e,t,n){return Ke.exec(e.charAt(0))&&e!=="true"&&e!=="false"&&e!=="this"&&e!==n&&t!=="."}function nt(r,o,i){if(o[0]==="["){o.shift();let e=1;let t=" return (function("+i+"){ return (";let n=null;while(o.length>0){const s=o[0];if(s==="]"){e--;if(e===0){if(n===null){t=t+"true"}o.shift();t+=")})";try{const l=On(r,function(){return Function(t)()},function(){return true});l.source=t;return l}catch(e){fe(te().body,"htmx:syntax:error",{error:e,source:t});return null}}}else if(s==="["){e++}if(tt(s,n,i)){t+="(("+i+"."+s+") ? ("+i+"."+s+") : (window."+s+"))"}else{t=t+s}n=o.shift()}}}function O(e,t){let n="";while(e.length>0&&!t.test(e[0])){n+=e.shift()}return n}function rt(e){let t;if(e.length>0&&Ye.test(e[0])){e.shift();t=O(e,Qe).trim();e.shift()}else{t=O(e,C)}return t}const ot="input, textarea, select";function it(e,t,n){const r=[];const o=et(t);do{O(o,Ze);const l=o.length;const u=O(o,/[,\[\s]/);if(u!==""){if(u==="every"){const c={trigger:"every"};O(o,Ze);c.pollInterval=d(O(o,/[,\[\s]/));O(o,Ze);var i=nt(e,o,"event");if(i){c.eventFilter=i}r.push(c)}else{const f={trigger:u};var i=nt(e,o,"event");if(i){f.eventFilter=i}O(o,Ze);while(o.length>0&&o[0]!==","){const a=o.shift();if(a==="changed"){f.changed=true}else if(a==="once"){f.once=true}else if(a==="consume"){f.consume=true}else if(a==="delay"&&o[0]===":"){o.shift();f.delay=d(O(o,C))}else if(a==="from"&&o[0]===":"){o.shift();if(Ye.test(o[0])){var s=rt(o)}else{var s=O(o,C);if(s==="closest"||s==="find"||s==="next"||s==="previous"){o.shift();const h=rt(o);if(h.length>0){s+=" "+h}}}f.from=s}else if(a==="target"&&o[0]===":"){o.shift();f.target=rt(o)}else if(a==="throttle"&&o[0]===":"){o.shift();f.throttle=d(O(o,C))}else if(a==="queue"&&o[0]===":"){o.shift();f.queue=O(o,C)}else if(a==="root"&&o[0]===":"){o.shift();f[a]=rt(o)}else if(a==="threshold"&&o[0]===":"){o.shift();f[a]=O(o,C)}else{fe(e,"htmx:syntax:error",{token:o.shift()})}O(o,Ze)}r.push(f)}}if(o.length===l){fe(e,"htmx:syntax:error",{token:o.shift()})}O(o,Ze)}while(o[0]===","&&o.shift());if(n){n[t]=r}return r}function st(e){const t=a(e,"hx-trigger");let n=[];if(t){const r=Q.config.triggerSpecsCache;n=r&&r[t]||it(e,t,r)}if(n.length>0){return n}else if(h(e,"form")){return[{trigger:"submit"}]}else if(h(e,'input[type="button"], input[type="submit"]')){return[{trigger:"click"}]}else if(h(e,ot)){return[{trigger:"change"}]}else{return[{trigger:"click"}]}}function lt(e){oe(e).cancelled=true}function ut(e,t,n){const r=oe(e);r.timeout=x().setTimeout(function(){if(se(e)&&r.cancelled!==true){if(!pt(n,e,Xt("hx:poll:trigger",{triggerSpec:n,target:e}))){t(e)}ut(e,t,n)}},n.pollInterval)}function ct(e){return location.hostname===e.hostname&&ee(e,"href")&&ee(e,"href").indexOf("#")!==0}function ft(e){return g(e,Q.config.disableSelector)}function at(t,n,e){if(t instanceof HTMLAnchorElement&&ct(t)&&(t.target===""||t.target==="_self")||t.tagName==="FORM"&&String(ee(t,"method")).toLowerCase()!=="dialog"){n.boosted=true;let r,o;if(t.tagName==="A"){r="get";o=ee(t,"href")}else{const i=ee(t,"method");r=i?i.toLowerCase():"get";o=ee(t,"action");if(o==null||o===""){o=location.href}if(r==="get"&&o.includes("?")){o=o.replace(/\?[^#]+/,"")}}e.forEach(function(e){gt(t,function(e,t){const n=ue(e);if(ft(n)){E(n);return}he(r,o,n,t)},n,e,true)})}}function ht(e,t){if(e.type==="submit"&&t.tagName==="FORM"){return true}else if(e.type==="click"){const n=t.closest('input[type="submit"], button');if(n&&n.form&&n.type==="submit"){return true}const r=t.closest("a");const o=/^#.+/;if(r&&r.href&&!o.test(r.getAttribute("href"))){return true}}return false}function dt(e,t){return oe(e).boosted&&e instanceof HTMLAnchorElement&&t.type==="click"&&(t.ctrlKey||t.metaKey)}function pt(e,t,n){const r=e.eventFilter;if(r){try{return r.call(t,n)!==true}catch(e){const o=r.source;fe(te().body,"htmx:eventFilter:error",{error:e,source:o});return true}}return false}function gt(l,u,e,c,f){const a=oe(l);let t;if(c.from){t=m(l,c.from)}else{t=[l]}if(c.changed){if(!("lastValue"in a)){a.lastValue=new WeakMap}t.forEach(function(e){if(!a.lastValue.has(c)){a.lastValue.set(c,new WeakMap)}a.lastValue.get(c).set(e,e.value)})}ie(t,function(i){const s=function(e){if(!se(l)){i.removeEventListener(c.trigger,s);return}if(dt(l,e)){return}if(f||ht(e,i)){e.preventDefault()}if(pt(c,l,e)){return}const t=oe(e);t.triggerSpec=c;if(t.handledFor==null){t.handledFor=[]}if(t.handledFor.indexOf(l)<0){t.handledFor.push(l);if(c.consume){e.stopPropagation()}if(c.target&&e.target){if(!h(ue(e.target),c.target)){return}}if(c.once){if(a.triggeredOnce){return}else{a.triggeredOnce=true}}if(c.changed){const n=e.target;const r=n.value;const o=a.lastValue.get(c);if(o.has(n)&&o.get(n)===r){return}o.set(n,r)}if(a.delayed){clearTimeout(a.delayed)}if(a.throttle){return}if(c.throttle>0){if(!a.throttle){ae(l,"htmx:trigger");u(l,e);a.throttle=x().setTimeout(function(){a.throttle=null},c.throttle)}}else if(c.delay>0){a.delayed=x().setTimeout(function(){ae(l,"htmx:trigger");u(l,e)},c.delay)}else{ae(l,"htmx:trigger");u(l,e)}}};if(e.listenerInfos==null){e.listenerInfos=[]}e.listenerInfos.push({trigger:c.trigger,listener:s,on:i});i.addEventListener(c.trigger,s)})}let mt=false;let yt=null;function xt(){if(!yt){yt=function(){mt=true};window.addEventListener("scroll",yt);window.addEventListener("resize",yt);setInterval(function(){if(mt){mt=false;ie(te().querySelectorAll("[hx-trigger*='revealed'],[data-hx-trigger*='revealed']"),function(e){bt(e)})}},200)}}function bt(e){if(!s(e,"data-hx-revealed")&&B(e)){e.setAttribute("data-hx-revealed","true");const t=oe(e);if(t.initHash){ae(e,"revealed")}else{e.addEventListener("htmx:afterProcessNode",function(){ae(e,"revealed")},{once:true})}}}function vt(e,t,n,r){const o=function(){if(!n.loaded){n.loaded=true;ae(e,"htmx:trigger");t(e)}};if(r>0){x().setTimeout(o,r)}else{o()}}function wt(t,n,e){let i=false;ie(de,function(r){if(s(t,"hx-"+r)){const o=a(t,"hx-"+r);i=true;n.path=o;n.verb=r;e.forEach(function(e){St(t,e,n,function(e,t){const n=ue(e);if(ft(n)){E(n);return}he(r,o,n,t)})})}});return i}function St(r,e,t,n){if(e.trigger==="revealed"){xt();gt(r,n,t,e);bt(ue(r))}else if(e.trigger==="intersect"){const o={};if(e.root){o.root=ce(r,e.root)}if(e.threshold){o.threshold=parseFloat(e.threshold)}const i=new IntersectionObserver(function(t){for(let e=0;e<t.length;e++){const n=t[e];if(n.isIntersecting){ae(r,"intersect");break}}},o);i.observe(ue(r));gt(ue(r),n,t,e)}else if(!t.firstInitCompleted&&e.trigger==="load"){if(!pt(e,r,Xt("load",{elt:r}))){vt(ue(r),n,t,e.delay)}}else if(e.pollInterval>0){t.polling=true;ut(ue(r),n,e)}else{gt(r,n,t,e)}}function Et(e){const t=ue(e);if(!t){return false}const n=t.attributes;for(let e=0;e<n.length;e++){const r=n[e].name;if(l(r,"hx-on:")||l(r,"data-hx-on:")||l(r,"hx-on-")||l(r,"data-hx-on-")){return true}}return false}const Ct=(new XPathEvaluator).createExpression('.//*[@*[ starts-with(name(), "hx-on:") or starts-with(name(), "data-hx-on:") or'+' starts-with(name(), "hx-on-") or starts-with(name(), "data-hx-on-") ]]');function Ot(e,t){if(Et(e)){t.push(ue(e))}const n=Ct.evaluate(e);let r=null;while(r=n.iterateNext())t.push(ue(r))}function Ht(e){const t=[];if(e instanceof DocumentFragment){for(const n of e.childNodes){Ot(n,t)}}else{Ot(e,t)}return t}function Tt(e){if(e.querySelectorAll){const n=", [hx-boost] a, [data-hx-boost] a, a[hx-boost], a[data-hx-boost]";const r=[];for(const i in jn){const s=jn[i];if(s.getSelectors){var t=s.getSelectors();if(t){r.push(t)}}}const o=e.querySelectorAll(R+n+", form, [type='submit'],"+" [hx-ext], [data-hx-ext], [hx-trigger], [data-hx-trigger]"+r.flat().map(e=>", "+e).join(""));return o}else{return[]}}function Rt(e){const t=At(e.target);const n=It(e);if(n){n.lastButtonClicked=t}}function qt(e){const t=It(e);if(t){t.lastButtonClicked=null}}function At(e){return g(ue(e),"button, input[type='submit']")}function Nt(e){return e.form||g(e,"form")}function It(e){const t=At(e.target);if(!t){return}const n=Nt(t);if(!n){return}return oe(n)}function Lt(e){e.addEventListener("click",Rt);e.addEventListener("focusin",Rt);e.addEventListener("focusout",qt)}function Dt(t,e,n){const r=oe(t);if(!Array.isArray(r.onHandlers)){r.onHandlers=[]}let o;const i=function(e){On(t,function(){if(ft(t)){return}if(!o){o=new Function("event",n)}o.call(t,e)})};t.addEventListener(e,i);r.onHandlers.push({event:e,listener:i})}function Pt(t){De(t);for(let e=0;e<t.attributes.length;e++){const n=t.attributes[e].name;const r=t.attributes[e].value;if(l(n,"hx-on")||l(n,"data-hx-on")){const o=n.indexOf("-on")+3;const i=n.slice(o,o+1);if(i==="-"||i===":"){let e=n.slice(o+1);if(l(e,":")){e="htmx"+e}else if(l(e,"-")){e="htmx:"+e.slice(1)}else if(l(e,"htmx-")){e="htmx:"+e.slice(5)}Dt(t,e,r)}}}}function kt(t){ae(t,"htmx:beforeProcessNode");const n=oe(t);const e=st(t);const r=wt(t,n,e);if(!r){if(ne(t,"hx-boost")==="true"){at(t,n,e)}else if(s(t,"hx-trigger")){e.forEach(function(e){St(t,e,n,function(){})})}}if(t.tagName==="FORM"||ee(t,"type")==="submit"&&s(t,"form")){Lt(t)}n.firstInitCompleted=true;ae(t,"htmx:afterProcessNode")}function Mt(e){if(!(e instanceof Element)){return false}const t=oe(e);const n=Le(e);if(t.initHash!==n){Pe(e);t.initHash=n;return true}return false}function Ft(e){e=S(e);if(ft(e)){E(e);return}const t=[];if(Mt(e)){t.push(e)}ie(Tt(e),function(e){if(ft(e)){E(e);return}if(Mt(e)){t.push(e)}});ie(Ht(e),Pt);ie(t,kt)}function Bt(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()}function Xt(e,t){return new CustomEvent(e,{bubbles:true,cancelable:true,composed:true,detail:t})}function fe(e,t,n){ae(e,t,le({error:t},n))}function Ut(e){return e==="htmx:afterProcessNode"}function Vt(e,t,n){ie(Jn(e,[],n),function(e){try{t(e)}catch(e){H(e)}})}function H(e){console.error(e)}function ae(e,t,n){e=S(e);if(n==null){n={}}n.elt=e;const r=Xt(t,n);if(Q.logger&&!Ut(t)){Q.logger(e,t,n)}if(n.error){H(n.error+(n.target?", "+n.target:""));ae(e,"htmx:error",{errorInfo:n})}let o=e.dispatchEvent(r);const i=Bt(t);if(o&&i!==t){const s=Xt(i,r.detail);o=o&&e.dispatchEvent(s)}Vt(ue(e),function(e){o=o&&(e.onEvent(t,r)!==false&&!r.defaultPrevented)});return o}let jt;function $t(e){jt=e;if(U()){sessionStorage.setItem("htmx-current-path-for-history",e)}}$t(location.pathname+location.search);function _t(){const e=te().querySelector("[hx-history-elt],[data-hx-history-elt]");return e||te().body}function zt(t,e){if(!U()){return}const n=Kt(e);const r=te().title;const o=window.scrollY;if(Q.config.historyCacheSize<=0){sessionStorage.removeItem("htmx-history-cache");return}t=V(t);const i=v(sessionStorage.getItem("htmx-history-cache"))||[];for(let e=0;e<i.length;e++){if(i[e].url===t){i.splice(e,1);break}}const s={url:t,content:n,title:r,scroll:o};ae(te().body,"htmx:historyItemCreated",{item:s,cache:i});i.push(s);while(i.length>Q.config.historyCacheSize){i.shift()}while(i.length>0){try{sessionStorage.setItem("htmx-history-cache",JSON.stringify(i));break}catch(e){fe(te().body,"htmx:historyCacheError",{cause:e,cache:i});i.shift()}}}function Jt(t){if(!U()){return null}t=V(t);const n=v(sessionStorage.getItem("htmx-history-cache"))||[];for(let e=0;e<n.length;e++){if(n[e].url===t){return n[e]}}return null}function Kt(e){const t=Q.config.requestClass;const n=e.cloneNode(true);ie(y(n,"."+t),function(e){b(e,t)});ie(y(n,"[data-disabled-by-htmx]"),function(e){e.removeAttribute("disabled")});return n.innerHTML}function Gt(){const e=_t();let t=jt;if(U()){t=sessionStorage.getItem("htmx-current-path-for-history")}t=t||location.pathname+location.search;const n=te().querySelector('[hx-history="false" i],[data-hx-history="false" i]');if(!n){ae(te().body,"htmx:beforeHistorySave",{path:t,historyElt:e});zt(t,e)}if(Q.config.historyEnabled)history.replaceState({htmx:true},te().title,location.href)}function Wt(e){if(Q.config.getCacheBusterParam){e=e.replace(/org\.htmx\.cache-buster=[^&]*&?/,"");if(Z(e,"&")||Z(e,"?")){e=e.slice(0,-1)}}if(Q.config.historyEnabled){history.pushState({htmx:true},"",e)}$t(e)}function Zt(e){if(Q.config.historyEnabled)history.replaceState({htmx:true},"",e);$t(e)}function Yt(e){ie(e,function(e){e.call(undefined)})}function Qt(e){const t=new XMLHttpRequest;const n={swapStyle:"innerHTML",swapDelay:0,settleDelay:0};const r={path:e,xhr:t,historyElt:_t(),swapSpec:n};t.open("GET",e,true);if(Q.config.historyRestoreAsHxRequest){t.setRequestHeader("HX-Request","true")}t.setRequestHeader("HX-History-Restore-Request","true");t.setRequestHeader("HX-Current-URL",location.href);t.onload=function(){if(this.status>=200&&this.status<400){r.response=this.response;ae(te().body,"htmx:historyCacheMissLoad",r);_e(r.historyElt,r.response,n,{contextElement:r.historyElt,historyRequest:true});$t(r.path);ae(te().body,"htmx:historyRestore",{path:e,cacheMiss:true,serverResponse:r.response})}else{fe(te().body,"htmx:historyCacheMissLoadError",r)}};if(ae(te().body,"htmx:historyCacheMiss",r)){t.send()}}function en(e){Gt();e=e||location.pathname+location.search;const t=Jt(e);if(t){const n={swapStyle:"innerHTML",swapDelay:0,settleDelay:0,scroll:t.scroll};const r={path:e,item:t,historyElt:_t(),swapSpec:n};if(ae(te().body,"htmx:historyCacheHit",r)){_e(r.historyElt,t.content,n,{contextElement:r.historyElt,title:t.title});$t(r.path);ae(te().body,"htmx:historyRestore",r)}}else{if(Q.config.refreshOnHistoryMiss){Q.location.reload(true)}else{Qt(e)}}}function tn(e){let t=ve(e,"hx-indicator");if(t==null){t=[e]}ie(t,function(e){const t=oe(e);t.requestCount=(t.requestCount||0)+1;w(e,Q.config.requestClass)});return t}function nn(e){let t=ve(e,"hx-disabled-elt");if(t==null){t=[]}ie(t,function(e){const t=oe(e);t.requestCount=(t.requestCount||0)+1;if(!e.hasAttribute("disabled")){e.setAttribute("disabled","");e.setAttribute("data-disabled-by-htmx","")}});return t}function rn(e,t){ie(e.concat(t),function(e){const t=oe(e);t.requestCount=(t.requestCount||1)-1});ie(e,function(e){const t=oe(e);if(t.requestCount===0){b(e,Q.config.requestClass)}});ie(t,function(e){const t=oe(e);if(t.requestCount===0&&e.hasAttribute("data-disabled-by-htmx")){e.removeAttribute("disabled");e.removeAttribute("data-disabled-by-htmx")}})}function on(t,n){for(let e=0;e<t.length;e++){const r=t[e];if(r.isSameNode(n)){return true}}return false}function sn(e){const t=e;if(t.name===""||t.name==null||t.disabled||g(t,"fieldset[disabled]")){return false}if(t.type==="button"||t.type==="submit"||t.tagName==="image"||t.tagName==="reset"||t.tagName==="file"){return false}if(t.type==="checkbox"||t.type==="radio"){return t.checked}return true}function ln(t,e,n){if(t!=null&&e!=null){if(Array.isArray(e)){e.forEach(function(e){n.append(t,e)})}else{n.append(t,e)}}}function un(t,n,r){if(t!=null&&n!=null){let e=r.getAll(t);if(Array.isArray(n)){e=e.filter(e=>n.indexOf(e)<0)}else{e=e.filter(e=>e!==n)}r.delete(t);ie(e,e=>r.append(t,e))}}function cn(e){if(e instanceof HTMLSelectElement&&e.multiple){return F(e.querySelectorAll("option:checked")).map(function(e){return e.value})}if(e instanceof HTMLInputElement&&e.files){return F(e.files)}return e.value}function fn(t,n,r,e,o){if(e==null||on(t,e)){return}else{t.push(e)}if(sn(e)){const i=ee(e,"name");ln(i,cn(e),n);if(o){an(e,r)}}if(e instanceof HTMLFormElement){ie(e.elements,function(e){if(t.indexOf(e)>=0){un(e.name,cn(e),n)}else{t.push(e)}if(o){an(e,r)}});new FormData(e).forEach(function(e,t){if(e instanceof File&&e.name===""){return}ln(t,e,n)})}}function an(e,t){const n=e;if(n.willValidate){ae(n,"htmx:validation:validate");if(!n.checkValidity()){if(ae(n,"htmx:validation:failed",{message:n.validationMessage,validity:n.validity})&&!t.length&&Q.config.reportValidityOfForms){n.reportValidity()}t.push({elt:n,message:n.validationMessage,validity:n.validity})}}}function hn(n,e){for(const t of e.keys()){n.delete(t)}e.forEach(function(e,t){n.append(t,e)});return n}function dn(e,t){const n=[];const r=new FormData;const o=new FormData;const i=[];const s=oe(e);if(s.lastButtonClicked&&!se(s.lastButtonClicked)){s.lastButtonClicked=null}let l=e instanceof HTMLFormElement&&e.noValidate!==true||a(e,"hx-validate")==="true";if(s.lastButtonClicked){l=l&&s.lastButtonClicked.formNoValidate!==true}if(t!=="get"){fn(n,o,i,Nt(e),l)}fn(n,r,i,e,l);if(s.lastButtonClicked||e.tagName==="BUTTON"||e.tagName==="INPUT"&&ee(e,"type")==="submit"){const c=s.lastButtonClicked||e;const f=ee(c,"name");ln(f,c.value,o)}const u=ve(e,"hx-include");ie(u,function(e){fn(n,r,i,ue(e),l);if(!h(e,"form")){ie(p(e).querySelectorAll(ot),function(e){fn(n,r,i,e,l)})}});hn(r,o);return{errors:i,formData:r,values:kn(r)}}function pn(e,t,n){if(e!==""){e+="&"}if(String(n)==="[object Object]"){n=JSON.stringify(n)}const r=encodeURIComponent(n);e+=encodeURIComponent(t)+"="+r;return e}function gn(e){e=Dn(e);let n="";e.forEach(function(e,t){n=pn(n,t,e)});return n}function mn(e,t,n){const r={"HX-Request":"true","HX-Trigger":ee(e,"id"),"HX-Trigger-Name":ee(e,"name"),"HX-Target":a(t,"id"),"HX-Current-URL":location.href};Cn(e,"hx-headers",false,r);if(n!==undefined){r["HX-Prompt"]=n}if(oe(e).boosted){r["HX-Boosted"]="true"}return r}function yn(n,e){const t=ne(e,"hx-params");if(t){if(t==="none"){return new FormData}else if(t==="*"){return n}else if(t.indexOf("not ")===0){ie(t.slice(4).split(","),function(e){e=e.trim();n.delete(e)});return n}else{const r=new FormData;ie(t.split(","),function(t){t=t.trim();if(n.has(t)){n.getAll(t).forEach(function(e){r.append(t,e)})}});return r}}else{return n}}function xn(e){return!!ee(e,"href")&&ee(e,"href").indexOf("#")>=0}function bn(e,t){const n=t||ne(e,"hx-swap");const r={swapStyle:oe(e).boosted?"innerHTML":Q.config.defaultSwapStyle,swapDelay:Q.config.defaultSwapDelay,settleDelay:Q.config.defaultSettleDelay};if(Q.config.scrollIntoViewOnBoost&&oe(e).boosted&&!xn(e)){r.show="top"}if(n){const s=X(n);if(s.length>0){for(let e=0;e<s.length;e++){const l=s[e];if(l.indexOf("swap:")===0){r.swapDelay=d(l.slice(5))}else if(l.indexOf("settle:")===0){r.settleDelay=d(l.slice(7))}else if(l.indexOf("transition:")===0){r.transition=l.slice(11)==="true"}else if(l.indexOf("ignoreTitle:")===0){r.ignoreTitle=l.slice(12)==="true"}else if(l.indexOf("scroll:")===0){const u=l.slice(7);var o=u.split(":");const c=o.pop();var i=o.length>0?o.join(":"):null;r.scroll=c;r.scrollTarget=i}else if(l.indexOf("show:")===0){const f=l.slice(5);var o=f.split(":");const a=o.pop();var i=o.length>0?o.join(":"):null;r.show=a;r.showTarget=i}else if(l.indexOf("focus-scroll:")===0){const h=l.slice("focus-scroll:".length);r.focusScroll=h=="true"}else if(e==0){r.swapStyle=l}else{H("Unknown modifier in hx-swap: "+l)}}}}return r}function vn(e){return ne(e,"hx-encoding")==="multipart/form-data"||h(e,"form")&&ee(e,"enctype")==="multipart/form-data"}function wn(t,n,r){let o=null;Vt(n,function(e){if(o==null){o=e.encodeParameters(t,r,n)}});if(o!=null){return o}else{if(vn(n)){return hn(new FormData,Dn(r))}else{return gn(r)}}}function Sn(e){return{tasks:[],elts:[e]}}function En(e,t){const n=e[0];const r=e[e.length-1];if(t.scroll){var o=null;if(t.scrollTarget){o=ue(ce(n,t.scrollTarget))}if(t.scroll==="top"&&(n||o)){o=o||n;o.scrollTop=0}if(t.scroll==="bottom"&&(r||o)){o=o||r;o.scrollTop=o.scrollHeight}if(typeof t.scroll==="number"){x().setTimeout(function(){window.scrollTo(0,t.scroll)},0)}}if(t.show){var o=null;if(t.showTarget){let e=t.showTarget;if(t.showTarget==="window"){e="body"}o=ue(ce(n,e))}if(t.show==="top"&&(n||o)){o=o||n;o.scrollIntoView({block:"start",behavior:Q.config.scrollBehavior})}if(t.show==="bottom"&&(r||o)){o=o||r;o.scrollIntoView({block:"end",behavior:Q.config.scrollBehavior})}}}function Cn(r,e,o,i,s){if(i==null){i={}}if(r==null){return i}const l=a(r,e);if(l){let e=l.trim();let t=o;if(e==="unset"){return null}if(e.indexOf("javascript:")===0){e=e.slice(11);t=true}else if(e.indexOf("js:")===0){e=e.slice(3);t=true}if(e.indexOf("{")!==0){e="{"+e+"}"}let n;if(t){n=On(r,function(){if(s){return Function("event","return ("+e+")").call(r,s)}else{return Function("return ("+e+")").call(r)}},{})}else{n=v(e)}for(const u in n){if(n.hasOwnProperty(u)){if(i[u]==null){i[u]=n[u]}}}}return Cn(ue(c(r)),e,o,i,s)}function On(e,t,n){if(Q.config.allowEval){return t()}else{fe(e,"htmx:evalDisallowedError");return n}}function Hn(e,t,n){return Cn(e,"hx-vars",true,n,t)}function Tn(e,t,n){return Cn(e,"hx-vals",false,n,t)}function Rn(e,t){return le(Hn(e,t),Tn(e,t))}function qn(t,n,r){if(r!==null){try{t.setRequestHeader(n,r)}catch(e){t.setRequestHeader(n,encodeURIComponent(r));t.setRequestHeader(n+"-URI-AutoEncoded","true")}}}function An(t){if(t.responseURL){try{const e=new URL(t.responseURL);return e.pathname+e.search}catch(e){fe(te().body,"htmx:badResponseUrl",{url:t.responseURL})}}}function T(e,t){return t.test(e.getAllResponseHeaders())}function Nn(t,n,r){t=t.toLowerCase();if(r){if(r instanceof Element||typeof r==="string"){return he(t,n,null,null,{targetOverride:S(r)||be,returnPromise:true})}else{let e=S(r.target);if(r.target&&!e||r.source&&!e&&!S(r.source)){e=be}return he(t,n,S(r.source),r.event,{handler:r.handler,headers:r.headers,values:r.values,targetOverride:e,swapOverride:r.swap,select:r.select,returnPromise:true,push:r.push,replace:r.replace,selectOOB:r.selectOOB})}}else{return he(t,n,null,null,{returnPromise:true})}}function In(e){const t=[];while(e){t.push(e);e=e.parentElement}return t}function Ln(e,t,n){const r=new URL(t,location.protocol!=="about:"?location.href:window.origin);const o=location.protocol!=="about:"?location.origin:window.origin;const i=o===r.origin;if(Q.config.selfRequestsOnly){if(!i){return false}}return ae(e,"htmx:validateUrl",le({url:r,sameHost:i},n))}function Dn(e){if(e instanceof FormData)return e;const t=new FormData;for(const n in e){if(e.hasOwnProperty(n)){if(e[n]&&typeof e[n].forEach==="function"){e[n].forEach(function(e){t.append(n,e)})}else if(typeof e[n]==="object"&&!(e[n]instanceof Blob)){t.append(n,JSON.stringify(e[n]))}else{t.append(n,e[n])}}}return t}function Pn(r,o,e){return new Proxy(e,{get:function(t,e){if(typeof e==="number")return t[e];if(e==="length")return t.length;if(e==="push"){return function(e){t.push(e);r.append(o,e)}}if(typeof t[e]==="function"){return function(){t[e].apply(t,arguments);r.delete(o);t.forEach(function(e){r.append(o,e)})}}if(t[e]&&t[e].length===1){return t[e][0]}else{return t[e]}},set:function(e,t,n){e[t]=n;r.delete(o);e.forEach(function(e){r.append(o,e)});return true}})}function kn(o){return new Proxy(o,{get:function(e,t){if(typeof t==="symbol"){const r=Reflect.get(e,t);if(typeof r==="function"){return function(){return r.apply(o,arguments)}}else{return r}}if(t==="toJSON"){return()=>Object.fromEntries(o)}if(t in e){if(typeof e[t]==="function"){return function(){return o[t].apply(o,arguments)}}}const n=o.getAll(t);if(n.length===0){return undefined}else if(n.length===1){return n[0]}else{return Pn(e,t,n)}},set:function(t,n,e){if(typeof n!=="string"){return false}t.delete(n);if(e&&typeof e.forEach==="function"){e.forEach(function(e){t.append(n,e)})}else if(typeof e==="object"&&!(e instanceof Blob)){t.append(n,JSON.stringify(e))}else{t.append(n,e)}return true},deleteProperty:function(e,t){if(typeof t==="string"){e.delete(t)}return true},ownKeys:function(e){return Reflect.ownKeys(Object.fromEntries(e))},getOwnPropertyDescriptor:function(e,t){return Reflect.getOwnPropertyDescriptor(Object.fromEntries(e),t)}})}function he(t,n,r,o,i,k){let s=null;let l=null;i=i!=null?i:{};if(i.returnPromise&&typeof Promise!=="undefined"){var e=new Promise(function(e,t){s=e;l=t})}if(r==null){r=te().body}const M=i.handler||Vn;const F=i.select||null;if(!se(r)){re(s);return e}const u=i.targetOverride||ue(Se(r));if(u==null||u==be){fe(r,"htmx:targetError",{target:ne(r,"hx-target")});re(l);return e}let c=oe(r);const f=c.lastButtonClicked;if(f){const A=ee(f,"formaction");if(A!=null){n=A}const N=ee(f,"formmethod");if(N!=null){if(de.includes(N.toLowerCase())){t=N}else{re(s);return e}}}const a=ne(r,"hx-confirm");if(k===undefined){const K=function(e){return he(t,n,r,o,i,!!e)};const G={target:u,elt:r,path:n,verb:t,triggeringEvent:o,etc:i,issueRequest:K,question:a};if(ae(r,"htmx:confirm",G)===false){re(s);return e}}let h=r;let d=ne(r,"hx-sync");let p=null;let B=false;if(d){const I=d.split(":");const L=I[0].trim();if(L==="this"){h=we(r,"hx-sync")}else{h=ue(ce(r,L))}d=(I[1]||"drop").trim();c=oe(h);if(d==="drop"&&c.xhr&&c.abortable!==true){re(s);return e}else if(d==="abort"){if(c.xhr){re(s);return e}else{B=true}}else if(d==="replace"){ae(h,"htmx:abort")}else if(d.indexOf("queue")===0){const W=d.split(" ");p=(W[1]||"last").trim()}}if(c.xhr){if(c.abortable){ae(h,"htmx:abort")}else{if(p==null){if(o){const D=oe(o);if(D&&D.triggerSpec&&D.triggerSpec.queue){p=D.triggerSpec.queue}}if(p==null){p="last"}}if(c.queuedRequests==null){c.queuedRequests=[]}if(p==="first"&&c.queuedRequests.length===0){c.queuedRequests.push(function(){he(t,n,r,o,i)})}else if(p==="all"){c.queuedRequests.push(function(){he(t,n,r,o,i)})}else if(p==="last"){c.queuedRequests=[];c.queuedRequests.push(function(){he(t,n,r,o,i)})}re(s);return e}}const g=new XMLHttpRequest;c.xhr=g;c.abortable=B;const m=function(){c.xhr=null;c.abortable=false;if(c.queuedRequests!=null&&c.queuedRequests.length>0){const e=c.queuedRequests.shift();e()}};const X=ne(r,"hx-prompt");if(X){var y=prompt(X);if(y===null||!ae(r,"htmx:prompt",{prompt:y,target:u})){re(s);m();return e}}if(a&&!k){if(!confirm(a)){re(s);m();return e}}let x=mn(r,u,y);if(t!=="get"&&!vn(r)){x["Content-Type"]="application/x-www-form-urlencoded"}if(i.headers){x=le(x,i.headers)}const U=dn(r,t);let b=U.errors;const V=U.formData;if(i.values){hn(V,Dn(i.values))}const j=Dn(Rn(r,o));const v=hn(V,j);let w=yn(v,r);if(Q.config.getCacheBusterParam&&t==="get"){w.set("org.htmx.cache-buster",ee(u,"id")||"true")}if(n==null||n===""){n=location.href}const S=Cn(r,"hx-request");const $=oe(r).boosted;let E=Q.config.methodsThatUseUrlParams.indexOf(t)>=0;const C={boosted:$,useUrlParams:E,formData:w,parameters:kn(w),unfilteredFormData:v,unfilteredParameters:kn(v),headers:x,elt:r,target:u,verb:t,errors:b,withCredentials:i.credentials||S.credentials||Q.config.withCredentials,timeout:i.timeout||S.timeout||Q.config.timeout,path:n,triggeringEvent:o};if(!ae(r,"htmx:configRequest",C)){re(s);m();return e}n=C.path;t=C.verb;x=C.headers;w=Dn(C.parameters);b=C.errors;E=C.useUrlParams;if(b&&b.length>0){ae(r,"htmx:validation:halted",C);re(s);m();return e}const _=n.split("#");const z=_[0];const O=_[1];let H=n;if(E){H=z;const Z=!w.keys().next().done;if(Z){if(H.indexOf("?")<0){H+="?"}else{H+="&"}H+=gn(w);if(O){H+="#"+O}}}if(!Ln(r,H,C)){fe(r,"htmx:invalidPath",C);re(l);m();return e}g.open(t.toUpperCase(),H,true);g.overrideMimeType("text/html");g.withCredentials=C.withCredentials;g.timeout=C.timeout;if(S.noHeaders){}else{for(const P in x){if(x.hasOwnProperty(P)){const Y=x[P];qn(g,P,Y)}}}const T={xhr:g,target:u,requestConfig:C,etc:i,boosted:$,select:F,pathInfo:{requestPath:n,finalRequestPath:H,responsePath:null,anchor:O}};g.onload=function(){try{const t=In(r);T.pathInfo.responsePath=An(g);M(r,T);if(T.keepIndicators!==true){rn(R,q)}ae(r,"htmx:afterRequest",T);ae(r,"htmx:afterOnLoad",T);if(!se(r)){let e=null;while(t.length>0&&e==null){const n=t.shift();if(se(n)){e=n}}if(e){ae(e,"htmx:afterRequest",T);ae(e,"htmx:afterOnLoad",T)}}re(s)}catch(e){fe(r,"htmx:onLoadError",le({error:e},T));throw e}finally{m()}};g.onerror=function(){rn(R,q);fe(r,"htmx:afterRequest",T);fe(r,"htmx:sendError",T);re(l);m()};g.onabort=function(){rn(R,q);fe(r,"htmx:afterRequest",T);fe(r,"htmx:sendAbort",T);re(l);m()};g.ontimeout=function(){rn(R,q);fe(r,"htmx:afterRequest",T);fe(r,"htmx:timeout",T);re(l);m()};if(!ae(r,"htmx:beforeRequest",T)){re(s);m();return e}var R=tn(r);var q=nn(r);ie(["loadstart","loadend","progress","abort"],function(t){ie([g,g.upload],function(e){e.addEventListener(t,function(e){ae(r,"htmx:xhr:"+t,{lengthComputable:e.lengthComputable,loaded:e.loaded,total:e.total})})})});ae(r,"htmx:beforeSend",T);const J=E?null:wn(g,r,w);g.send(J);return e}function Mn(e,t){const n=t.xhr;let r=null;let o=null;if(T(n,/HX-Push:/i)){r=n.getResponseHeader("HX-Push");o="push"}else if(T(n,/HX-Push-Url:/i)){r=n.getResponseHeader("HX-Push-Url");o="push"}else if(T(n,/HX-Replace-Url:/i)){r=n.getResponseHeader("HX-Replace-Url");o="replace"}if(r){if(r==="false"){return{}}else{return{type:o,path:r}}}const i=t.pathInfo.finalRequestPath;const s=t.pathInfo.responsePath;let l=t.etc.push||ne(e,"hx-push-url");let u=t.etc.replace||ne(e,"hx-replace-url");if(l==="false")l=null;if(u==="false")u=null;const c=oe(e).boosted;let f=null;let a=null;if(l){f="push";a=l}else if(u){f="replace";a=u}else if(c){f="push";a=s||i}if(a){if(a==="true"){a=s||i}if(t.pathInfo.anchor&&a.indexOf("#")===-1){a=a+"#"+t.pathInfo.anchor}return{type:f,path:a}}else{return{}}}function Fn(e,t){var n=new RegExp(e.code);return n.test(t.toString(10))}function Bn(e){for(var t=0;t<Q.config.responseHandling.length;t++){var n=Q.config.responseHandling[t];if(Fn(n,e.status)){return n}}return{swap:false}}function Xn(e){if(e){const t=f("title");if(t){t.textContent=e}else{window.document.title=e}}}function Un(e,t){if(t==="this"){return e}const n=ue(ce(e,t));if(n==null){fe(e,"htmx:targetError",{target:t});throw new Error(`Invalid re-target ${t}`)}return n}function Vn(t,e){const n=e.xhr;let r=e.target;const o=e.etc;const i=e.select;if(!ae(t,"htmx:beforeOnLoad",e))return;if(T(n,/HX-Trigger:/i)){ze(n,"HX-Trigger",t)}if(T(n,/HX-Location:/i)){let e=n.getResponseHeader("HX-Location");var s={};if(e.indexOf("{")===0){s=v(e);e=s.path;delete s.path}s.push=s.push??"true";Nn("get",e,s);return}const l=T(n,/HX-Refresh:/i)&&n.getResponseHeader("HX-Refresh")==="true";if(T(n,/HX-Redirect:/i)){e.keepIndicators=true;Q.location.href=n.getResponseHeader("HX-Redirect");l&&Q.location.reload();return}if(l){e.keepIndicators=true;Q.location.reload();return}const u=Mn(t,e);const c=Bn(n);const f=c.swap;let a=!!c.error;let h=Q.config.ignoreTitle||c.ignoreTitle;let d=c.select;if(c.target){e.target=Un(t,c.target)}var p=o.swapOverride;if(p==null&&c.swapOverride){p=c.swapOverride}if(T(n,/HX-Retarget:/i)){e.target=Un(t,n.getResponseHeader("HX-Retarget"))}if(T(n,/HX-Reswap:/i)){p=n.getResponseHeader("HX-Reswap")}var g=n.response;var m=le({shouldSwap:f,serverResponse:g,isError:a,ignoreTitle:h,selectOverride:d,swapOverride:p},e);if(c.event&&!ae(r,c.event,m))return;if(!ae(r,"htmx:beforeSwap",m))return;r=m.target;g=m.serverResponse;a=m.isError;h=m.ignoreTitle;d=m.selectOverride;p=m.swapOverride;e.target=r;e.failed=a;e.successful=!a;if(m.shouldSwap){if(n.status===286){lt(t)}Vt(t,function(e){g=e.transformResponse(g,n,t)});if(u.type){Gt()}var y=bn(t,p);if(!y.hasOwnProperty("ignoreTitle")){y.ignoreTitle=h}w(r,Q.config.swappingClass);if(i){d=i}if(T(n,/HX-Reselect:/i)){d=n.getResponseHeader("HX-Reselect")}const x=o.selectOOB||ne(t,"hx-select-oob");const b=ne(t,"hx-select");_e(r,g,y,{select:d==="unset"?null:d||b,selectOOB:x,eventInfo:e,anchor:e.pathInfo.anchor,contextElement:t,afterSwapCallback:function(){if(T(n,/HX-Trigger-After-Swap:/i)){let e=t;if(!se(t)){e=te().body}ze(n,"HX-Trigger-After-Swap",e)}},afterSettleCallback:function(){if(T(n,/HX-Trigger-After-Settle:/i)){let e=t;if(!se(t)){e=te().body}ze(n,"HX-Trigger-After-Settle",e)}},beforeSwapCallback:function(){if(u.type){ae(te().body,"htmx:beforeHistoryUpdate",le({history:u},e));if(u.type==="push"){Wt(u.path);ae(te().body,"htmx:pushedIntoHistory",{path:u.path})}else{Zt(u.path);ae(te().body,"htmx:replacedInHistory",{path:u.path})}}}})}if(a){fe(t,"htmx:responseError",le({error:"Response Status Error Code "+n.status+" from "+e.pathInfo.requestPath},e))}}const jn={};function $n(){return{init:function(e){return null},getSelectors:function(){return null},onEvent:function(e,t){return true},transformResponse:function(e,t,n){return e},isInlineSwap:function(e){return false},handleSwap:function(e,t,n,r){return false},encodeParameters:function(e,t,n){return null}}}function _n(e,t){if(t.init){t.init(n)}jn[e]=le($n(),t)}function zn(e){delete jn[e]}function Jn(e,n,r){if(n==undefined){n=[]}if(e==undefined){return n}if(r==undefined){r=[]}const t=a(e,"hx-ext");if(t){ie(t.split(","),function(e){e=e.replace(/ /g,"");if(e.slice(0,7)=="ignore:"){r.push(e.slice(7));return}if(r.indexOf(e)<0){const t=jn[e];if(t&&n.indexOf(t)<0){n.push(t)}}})}return Jn(ue(c(e)),n,r)}var Kn=false;te().addEventListener("DOMContentLoaded",function(){Kn=true});function Gn(e){if(Kn||te().readyState==="complete"){e()}else{te().addEventListener("DOMContentLoaded",e)}}function Wn(){if(Q.config.includeIndicatorStyles!==false){const e=Q.config.inlineStyleNonce?` nonce="${Q.config.inlineStyleNonce}"`:"";const t=Q.config.indicatorClass;const n=Q.config.requestClass;te().head.insertAdjacentHTML("beforeend",`<style${e}>`+`.${t}{opacity:0;visibility: hidden} `+`.${n} .${t}, .${n}.${t}{opacity:1;visibility: visible;transition: opacity 200ms ease-in}`+"</style>")}}function Zn(){const e=te().querySelector('meta[name="htmx-config"]');if(e){return v(e.content)}else{return null}}function Yn(){const e=Zn();if(e){Q.config=le(Q.config,e)}}Gn(function(){Yn();Wn();let e=te().body;Ft(e);const t=te().querySelectorAll("[hx-trigger='restored'],[data-hx-trigger='restored']");e.addEventListener("htmx:abort",function(e){const t=e.detail.elt||e.target;const n=oe(t);if(n&&n.xhr){n.xhr.abort()}});const n=window.onpopstate?window.onpopstate.bind(window):null;window.onpopstate=function(e){if(e.state&&e.state.htmx){en();ie(t,function(e){ae(e,"htmx:restored",{document:te(),triggerEvent:ae})})}else{if(n){n(e)}}};x().setTimeout(function(){ae(e,"htmx:load",{});e=null},0)});return Q}(); -
alpaca-bot/trunk/readme.txt
r3113345 r3690657 2 2 Contributors: carmelosantana 3 3 Donate link: https://www.patreon.com/carmelosantana 4 Tags: ai, large language model, embedding, chatbot, ollama5 Requires at least: 6. 46 Tested up to: 6.5.57 Stable tag: 0. 4.178 Requires PHP: 8. 14 Tags: ai, large language model, chatbot, ollama, agent 5 Requires at least: 6.9 6 Tested up to: 7.1 7 Stable tag: 0.5.0 8 Requires PHP: 8.4 9 9 License: GPLv2 or later 10 10 License URI: https://www.gnu.org/licenses/gpl-2.0.html 11 11 12 A privately hosted WordPress AI chatbot. Chat with your own hosted LLMs and automate workflows with agents.12 A privately hosted WordPress AI chatbot. Chat with your own models, give them tools, and keep every conversation in your own database. 13 13 14 14 == Description == 15 15 16 Easily draft a post or page from any conversation. Dynamically create new content on the fly or with remote resources collected via `agents`. **Alpaca Bot** offers a familiar chat interface on both desktop and mobile. You can expect a seamless chat experience on any device! 17 18 An [Ollama](https://github.com/ollama/ollama) instance is required. [Ollama](https://github.com/ollama/ollama) makes it incredibly easy to self-host large language models locally or in the cloud. 19 20 ### Features 21 22 - Chose to store conversation history **privately** in your `wp_` database or not at all. 23 - Use `[alpacabot_agent]` to execute tasks on your behalf, generate dynamic content and more. 24 - Chat with dozens of pre-trained LLMs or [train your own](https://github.com/ollama/ollama/blob/main/docs/api.md#generate-embeddings). 25 - Switch conversational model on the fly. 26 - Create your own custom [system messages](https://github.com/ollama/ollama/blob/main/docs/modelfile.md#system) for highly predictable or formatted responses. 27 28 ### Usage 29 30 #### Text Completion 31 32 You have two options to communicate with your AI models; 33 34 1. Click **Alpaca Bot** found in the admin menu, below Dashboard and above Posts. 35 2. **Use the shortcode** `[alpacabot]` to generate a response within any post or page. 36 37 #### Agents 38 39 Use the `[alpacabot_agent]` shortcode to execute tasks on your behalf. Agents are a powerful way to empower your AI models to perform tasks on your behalf. 40 41 For example, you can use the `[alpacabot_agent]` shortcode to retrieve content from a remote source. `[alpacabot_agent]`s can interact directly with your models and help summarize a webpage or rewrite content. 42 43 ##### Example 44 45 Basic webpage summarization: 46 47 `[alpacabot_agent name=summarize model=tinyllama url=https://example.com/]` 48 49 ### Shortcodes 50 51 #### `[alpacabot]` - Chat with Alpaca Bot 52 53 *Chat with Alpaca Bot from any post or page.* 54 55 ##### Attributes 56 57 - `model` - The model to use for the text generation. *(optional)* 58 - `system` - Specifies the [system message](https://github.com/ollama/ollama/blob/main/docs/modelfile.md#system) that will be set in the template. *(optional)* 59 60 #### `[alpacabot_agent]` - Execute tasks on your behalf 61 62 *Execute tasks via Agents.* 63 64 ##### Attributes 65 66 The following are core attributes that are supported by all agents. 67 68 - `name` - The agent to execute. 69 70 Agent's communicating with [Ollama](https:/github.com/ollama/ollama) support `[alpacabot]` attributes. 71 72 #### Caching 73 74 Requests can be cached by setting the `cache` attribute. `cache` supports short and long term options. 75 76 By default responses are cached to the current post or page. 77 78 ##### Transient 79 80 Numeric values are treated as seconds and will cache the response for the specified duration. 81 82 - `cache=60` - Cache the response for 60 seconds. 83 - `cache=3600` - Cache the response for 1 hour. 84 85 ##### Post Meta 86 87 This is useful for caching responses permanently and associating them with a specific post or page. 88 89 - `cache=postmeta` - Cache to current post or page. 90 91 ##### Option 92 93 Use WordPress option storage to cache permanently but not associated with a specific post or page. 94 95 This can be useful for sharing responses across multiple pages. 96 97 - `cache=option` - Cache to WordPress options. 98 99 ##### Disable 100 101 The following values can disable caching. 102 103 - `cache=0` - Disable caching. 104 - `cache=disable` - Disable caching. 105 - `cache=false` - Disable caching. 106 107 ### Core Agents 108 109 The following are core agents that are provided by the **Alpaca Bot** plugin. 110 111 #### `get` 112 113 Retrieve content from a remote source. 114 115 ##### Attributes 116 117 - `url` - The URL to retrieve content from. 118 119 #### `summarize` 120 121 Summarize remote content. 122 123 ##### Attributes 124 125 - `url` - The URL to summarize. 126 - `length` - Describe the length of the summary. 127 - `content` - The type of content we want to summarize. 128 129 ### Support 130 131 If you need help or have questions, please join our [Discord](https://discord.gg/vWQTHphkVt) community. 132 133 Premium support and video calls are available to our [Patreon](https://www.patreon.com/carmelosantana) subscribers. We can help setup your [Ollama](https://github.com/ollama/ollama) instance, troubleshoot issues, demonstrate shortcode functionality and more. 134 135 Patreon's also receive; 136 137 - Access to our hosted [Ollama](https:/github.com/ollama/ollama) instances. 138 - Priority feature requests. 139 - Early access to new features and releases. 140 - Video and community support. 141 142 Please consider [becoming a Patreon](https://www.patreon.com/carmelosantana) today! 143 144 ### Made Possible By 16 **Alpaca Bot** is a chat screen inside WordPress admin, talking to a model you host. Conversations stay on your site, in your own database, and only their author can open them. It runs against [Ollama](https://github.com/ollama/ollama) out of the box, or any OpenAI-compatible endpoint. 17 18 = Features = 19 20 - A chat screen in wp-admin: replies stream in as they are written, with a copy button on every message and code block, "Edit and resend" on your own, and an image attached from the media library for a model that can see. 21 - Your conversations, stored **privately** on your site (or not at all: the Privacy tab decides) and listed in the screen's history. 22 - Switch models per conversation; where the site allows it, your pick is remembered as your default. 23 - A system prompt, per-model overrides (temperature, context window, keep-alive) and a receipt under every reply: model, tokens, time. 24 - Monthly usage caps, per site and per user, with the meter behind them. 25 - A REST API under `alpaca-bot/v1` ([docs/api.md](https://github.com/carmelosantana/alpaca-bot/blob/main/docs/api.md)) and a WP-CLI command. 26 27 = Requirements = 28 29 - PHP 8.4+, WordPress 6.9+, an Ollama instance (or any provider php-agents supports) 30 31 = Setup = 32 33 1. Install [Ollama](https://github.com/ollama/ollama) on your localhost or server. 34 2. In your WordPress admin, open `Alpaca Bot > Settings` and, on the Provider tab, enter the endpoint's base URL. For Ollama it ends in `/v1`: `http://localhost:11434/v1`. 35 3. Click `Save Changes`. The Models tab then lists what the provider serves; pick a default. 36 37 ⭐️ **[Become a Patreon](https://www.patreon.com/carmelosantana)** and support [Alpaca Bot](https://carmelosantana.com/alpaca-bot) development. ⭐️ 38 39 = Usage = 40 41 **The chat screen** 42 43 Click **Alpaca Bot** in the admin menu, below Dashboard and above Posts. The screen is open to every user who can edit posts (filter `alpaca_bot/admin/menu_capability` to change that). 44 45 - The **model** select in the header picks the model for this conversation; where the site allows it, your pick is saved as your default. The **history** select opens one of your earlier conversations, and **New chat** starts a fresh one. 46 - Type in the box at the foot of the screen. **Enter** sends, **Shift+Enter** adds a line, **Escape** clears the box. 47 - The image button attaches a picture from the media library to your next message, for a model that can see. The largest image the screen takes is set by the site's PHP `post_max_size`, not its upload limit: the image travels inside the message, not as an upload. 48 - Replies stream in as they are written. Every message has a **Copy** button, your own have **Edit and resend**, and a code block has its own copy button. Under a reply is its receipt: the model, the tokens it used and how long it took. 49 - The **Help** tab at the top right of the screen repeats this, and documents the shortcodes. 50 51 **Settings** 52 53 `Alpaca Bot > Settings` (administrators) is one page in six tabs: **Provider** (the endpoint, its key, the timeout), **Models** (the default, temperature, context window, keep-alive, and per-model overrides), **Chat** (system prompt, welcome text, what users may change), **Privacy** (whether conversations and the usage log are stored, and for how long), **Limits** (monthly token caps for the site and per user) and **Tools** (what the model may do besides answer — read the next section before you leave those as they come). Every field is also readable and writable over the REST API (`GET`/`PUT /settings`). 54 55 **Tools, and what they let the model reach** 56 57 `Settings > Tools` switches the model's tools on and off. Three ship, **all three on by default**: `web_fetch` reads one public web page as text, `summarize` condenses text through the model, and `draft_post` writes a draft. Read this section before you leave `web_fetch` on, and before you open the chat to a role. 58 59 **`web_fetch` makes the web server send a request, and hands the reply back.** Every URL is checked twice before the fetch — WordPress's own `wp_http_validate_url()`, then the plugin's own check over every address the name resolves to, on the first URL and on every redirect — and http(s) only, ports 80/443/8080 only, no private, loopback, link-local or other special-purpose address. What no check of that shape can cover is a name whose answer *changes* between the check and the connection: each is a separate DNS lookup, so a host under someone else's control, with a short TTL, can answer the checks with a public address and the connection with `127.0.0.1` or a cloud metadata address. The response body then comes back as text. Closing that means pinning the resolved address into the transport, which is a compatibility project and is planned for a later 0.x release. 60 61 Who can reach it, today, with no model involved: **anyone who can edit posts** — a Contributor included, since core grants Contributors `edit_posts` — can put `[alpacabot_agent name="get" url="…"]` in their own draft and preview it. So treat `web_fetch` as a capability you are granting your authors, not as something only the model uses. 62 63 **An egress policy is the supported mitigation**, and it is the one that holds for every plugin on the site at once: stop the web server's host from opening outbound connections to your private ranges and to `169.254.169.254`, at the network or the host firewall. On a cloud instance, require IMDSv2. If you cannot do that and do not need the tool, leave `web_fetch` off — the chat, the drafts and the summaries all work without it. 64 65 **Opening a route to a role opens the tools to that role too.** `alpaca_bot/capability/chat` (and `chat/stream`) can name any capability, `read` and `exist` included, and that is deliberate — it is how a site builds a subscriber-facing or public chat. But the toolkits a turn may call are chosen by the `toolkits.enabled` setting alone: there is no second capability check between a role that may chat and the tools that are switched on. So a role you admit only to converse gets `web_fetch` with it. Only `draft_post` checks a capability of its own (`edit_posts`/`edit_pages`) and refuses a role that lacks it. Until a later 0.x release adds a floor of its own, use the `alpaca_bot/toolkits` filter to take `web_fetch` away from the users you are opening the chat to: 66 67 add_filter( 'alpaca_bot/toolkits', function ( array $toolkits, int $user_id ): array { 68 if ( ! user_can( $user_id, 'edit_posts' ) ) { 69 unset( $toolkits['web_fetch'] ); 70 } 71 return $toolkits; 72 }, 10, 2 ); 73 74 **REST API and WP-CLI** 75 76 Everything the screen does is a route under `alpaca-bot/v1`: a turn (`POST /chat`, then its stream as server-sent events), conversations, models, settings and usage. [docs/api.md](https://github.com/carmelosantana/alpaca-bot/blob/main/docs/api.md) is the reference, with authentication, streaming and error examples. From the command line, `wp alpaca-bot chat|models|usage|settings` does the same. 77 78 = Shortcodes = 79 80 Both 0.4 shortcodes are back on the new pipeline. Both are for logged-in users who can edit posts (`edit_posts`); anyone else sees a notice. 81 82 **`[alpacabot prompt="…"]`** 83 84 Puts the model's answer to the prompt in a post or page. 85 86 * **`prompt`** -- The message sent to the model. Without it, the shortcode is the chat screen (below). 87 * **`model`** -- the viewing editor's model -- The model, where the site lets users change it (Settings › Chat); it must be one the provider lists. Without it, the answer runs on the model the editor who first views the page would chat on (their own preference where the site lets users change it, else the site's default), and the cache does not record which. 88 * **`system`** -- the site's system prompt -- The system prompt for this answer. 89 * **`temperature`** -- the model's setting -- The temperature for this answer, 0 to 2. 90 * **`format`** -- `markdown` -- `markdown` renders the answer (raw HTML stripped, links kept); `text` shows it as plain, escaped text. 91 * **`cache`** -- `1h` -- How long the answer is kept: a number with a unit (`45s`, `30m`, `1h`, `2d`), a year at most. `off` generates on every view. Anything else keeps the default. 92 93 **Generating an answer costs provider tokens** and counts against the monthly cap of the user viewing the page, so it is cached (a transient, per shortcode, per post and per `cache` duration) and served from the cache until it expires. Two identical shortcodes on two pages are two answers; changing the site's system prompt starts a new answer, changing its default model does not (the model is part of the answer's identity only when the shortcode names one). When a turn fails, the page shows why in the words the chat uses (the cap, a model the provider does not list, or a fixed "could not complete" message: the provider's own error, which quotes its endpoint, goes to the debug log under `WP_DEBUG`), and nothing is cached. 94 95 **The block editor and the REST API never generate.** `content.rendered` carries the cached answer, or a notice when there is none; an answer is generated only when the page is viewed on the site. So a client listing a hundred posts over the API spends nothing, and the editor's preview shows what the cache holds. 96 97 **A generation counts against the same per-minute limit as the chat.** Thirty a minute per user, shared with the chat screen, the REST routes and the abilities, and moved everywhere at once by the `alpaca_bot/rate_limit` filter (bucket `chat`). A cached answer costs nothing; a page carrying more shortcodes than the minute allows shows the rest as a "Too many requests" notice, caches nothing for them, and fills them in on a view after the minute turns over. 98 99 **Anyone who can write a post can write a prompt.** A Contributor can put a prompt, and a `system` prompt, in a draft; once it is published, the first user with `edit_posts` to view the page generates the answer, the tokens count against that viewer's cap, and the answer is on the page for everyone without anyone having read it first. The markdown is sanitised (no scripts, no raw HTML), but links and images the model writes reach the public page. Review a page after its answer appears. A per-site capability setting for this belongs to the admin-wide panel of a later 0.x release. 100 101 **A visitor never triggers a generation.** A visitor, or a logged-in user who cannot edit posts, sees a notice in place of the answer. A site that wants visitors to see the answer returns `true` from the `alpaca_bot/shortcode/allow_guests` filter (`(bool $allow, int $postId, string $tag)`); they then see the cached answer and nothing else. When the cache has expired, visitors see the notice again until someone who can edit posts opens the page. That is the point: a page nobody with the capability opens spends nothing, whatever the model costs. 102 103 add_filter('alpaca_bot/shortcode/allow_guests', '__return_true'); 104 105 **`[alpacabot]`** 106 107 With no `prompt`, the chat screen on a page, for logged-in users who can edit posts, with the same bundle and stylesheet as in wp-admin (a front-end design of its own is a later 0.x release). A visitor sees a login notice and loads nothing. The REST API and the block editor show a notice in its place, as for a prompt. The screen's markup carries the viewing user's REST nonce, as it does in wp-admin; it is useless without their cookies, but a full-page cache set to cache pages for logged-in users would store one editor's page and serve it to another, so leave a page carrying the shell out of such a cache. 108 109 **`[alpacabot_agent name="get|summarize" url="…" length="…"]` (deprecated)** 110 111 The 0.4 form still works, under the same rules and cache: `get` shows the page's readable text, `summarize` fetches it and asks the model for a summary (`length` is free text, "2 sentences"; `model` and `cache` as above). The fetch is the chat's `web_fetch` tool itself, so it runs only while that tool is on under Settings › Tools, and through the same address guard: a private, local or non-http(s) address is refused. It logs a deprecation notice once per request under `WP_DEBUG` and goes away in a later 0.x release. Put the text to summarize in a `prompt` instead, or open the URL in the chat, where the fetch and summarize tools read it for you: `[alpacabot prompt="Summarize https://…"]` would **not** work, since a shortcode's turn runs no tools and the model cannot open the URL. 112 113 = Support = 114 115 Questions and bug reports go to the [WordPress.org support forum](https://wordpress.org/support/plugin/alpaca-bot/). Say which plugin, WordPress and PHP versions you run. 116 117 For premium support, [book a call](https://carmelosantana.com/alpaca-bot): video calls, help setting up your [Ollama](https://github.com/ollama/ollama) instance or provider, troubleshooting, and onsite setup assistance. 118 119 If the plugin has been useful, [star Alpaca Bot on GitHub](https://github.com/carmelosantana/alpaca-bot); a star helps other site owners find it. 120 121 = Made Possible By = 145 122 146 123 - Emma Delaney's [How to Create Your Own ChatGPT in HTML CSS and JavaScript](https://emma-delaney.medium.com/how-to-create-your-own-chatgpt-in-html-css-and-javascript-78e32b70b4be) 147 - Google [Material Design Icons](https://material.io/resources/icons/?style=baseline) - Apache-2.0 license 148 - [Hint.css](https://github.com/chinchang/hint.css) A CSS only tooltip library - MIT license 149 - [TextRank](https://github.com/DavidBelicza/PHP-Science-TextRank) Automatic text summarization for PHP - MIT license 124 - [Lucide](https://lucide.dev) Beautiful & consistent icons - ISC license 125 - [htmx](https://htmx.org/) High power tools for HTML - 0BSD license 126 - [league/commonmark](https://commonmark.thephpleague.com/) Markdown parser for PHP - BSD-3-Clause license 127 - [php-agents](https://github.com/carmelosantana/php-agents) Provider-agnostic AI agents for PHP - MIT license 150 128 - [Ollama](https://github.com/ollama/ollama) Get up and running with large language models locally - MIT license 151 - [Parsedown](https://github.com/erusev/parsedown) A better Markdown parser - MIT license 152 153 == Installation == 154 155 ### Setup 156 157 1. Install [Ollama](https://github.com/ollama/ollama) on your localhost or server. 158 2. Add your [Ollama](https://github.com/ollama/ollama) API URL to the settings page by navigating to `Alpaca Bot > Settings` in your WordPress admin dashboard. 159 3. Enter your [Ollama](https://github.com/ollama/ollama) API URL. 160 4. Click `Save Changes`. 161 162 **[Become a Patreon](https://www.patreon.com/carmelosantana)** and support [Alpaca Bot](https://alpaca.bot/) development. ⭐️ 163 164 == Screenshots == 165 166 1. Main chat interface with model list, chat history and prompt input. 167 2. Chat interface with a conversation history. 168 3. Drafting a post from generated responses. 169 4. Override system message for custom responses. 170 5. Custom assistant settings. 171 6. Shortcode examples. 129 130 == Installation == 131 132 1. Check the site runs PHP 8.4 or newer and WordPress 6.9 or newer. Alpaca Bot loads nothing below PHP 8.4. 133 2. Have a model server ready: [Ollama](https://github.com/ollama/ollama) on your own host, or any OpenAI-compatible endpoint. On WordPress 7.0 and later you can instead use a provider plugin through core's AI client. 134 3. Install the plugin from your admin, or upload the zip under Plugins > Add New > Upload Plugin, and activate it. 135 4. Open `Alpaca Bot > Settings`. On the Provider tab enter the endpoint's base URL -- for Ollama it ends in `/v1`, as in `http://localhost:11434/v1` -- and save. 136 5. The Models tab now lists what the provider serves. Pick a default model. 137 6. Read the Tools part of the description before you leave the Tools tab as it comes, and before you open the chat to a role. 138 139 == Frequently Asked Questions == 140 141 = Do I need my own AI server? = 142 143 Yes. Alpaca Bot does not ship a model and sends nothing to a service of ours. Point it at an [Ollama](https://github.com/ollama/ollama) instance, or at any OpenAI-compatible endpoint, on the Provider tab. On WordPress 7.0 and later there is a second option: **WordPress AI provider** routes every turn through the AI client built into core, to whichever AI provider plugin the site has configured under Settings › Connectors. That path does not stream, because the WordPress client does not. 144 145 = What leaves my site? = 146 147 Whatever you type, and the recent messages of the conversation, go to the endpoint you configured, and nothing else. Conversations and usage receipts are rows in your own database. Turn conversation storage off entirely on the Privacy tab; a receipt is still written for every reply, because that is what the monthly caps count, and it never holds message text. 148 149 = Who can use it? = 150 151 The chat screen is open to anyone who can edit posts, which includes Contributors. The `alpaca_bot/admin/menu_capability` filter changes that. Settings is administrators only. Read **Tools, and what they let the model reach**, under Usage, before you open the chat to a role: a role admitted to chat gets the enabled tools with it. 152 153 = How do I stop it running up a bill? = 154 155 Three brakes, and they are independent. **Limits** sets a monthly token cap for the whole site and another per user, counted from the receipts and enforced on the server. A shared per-minute rate limit (thirty requests a user, moved by the `alpaca_bot/rate_limit` filter) covers the chat screen, the REST routes, the abilities and the shortcodes together. And **Tools** decides what the model may do besides answer. Shortcode answers are cached, and never generated for a visitor or for the REST API. 156 157 = I upgraded from 0.4. Where did my settings go? = 158 159 Into one option, moved automatically on the first request after the upgrade. Two things do not survive the move: 0.4's API username and password were sent as HTTP Basic and 0.5 sends a Bearer token instead, so the Provider tab starts with an empty **API key** for you to fill in. Your 0.4 conversations are kept, and become private to their author, which is what 0.5 enforces everywhere. 160 161 = The model answers with the text of a tool call instead of an answer. = 162 163 Some small models advertise tool support and then write the call out as prose. On the **Models** tab, set that model's **Tools** override to off; it beats whatever the provider claims. A model too small to use tools well is usually too small for the tools to be worth it. 164 165 There is a price as well as a symptom. All three tools are on by default, and their schemas go with every turn: measured on this plugin, about 790 extra prompt tokens each time, against 36 with tools off. On a large model that is noise in the bill; on a small one it is most of the prompt, which is why the answer degrades. Turning off the tools you do not use, under **Tools**, costs nothing and is worth doing before you tune anything else. 166 167 == Screenshots == 168 169 1. The chat screen: two turns, each reply streamed as the model writes it, and under each the receipt -- the model, the tokens it spent and how long it took. 170 2. Settings > Models: the default model, temperature, context window and keep-alive, with the per-model overrides table under them. 171 3. A turn that used the draft_post tool. The reply confirms the draft, and the receipt ends with the number of tools the turn ran. 172 173 == Changelog == 174 175 Releases before 0.5.0 are on the [releases page](https://github.com/carmelosantana/alpaca-bot/releases). 176 177 = 0.5.0 = 178 179 A ground-up rewrite. The 0.4 code is gone rather than refactored, so the list below is what an upgrading site notices, not a summary of every commit. 180 181 **Breaking** 182 183 - **PHP 8.4 and WordPress 6.9 are required.** The 0.4 listing asks for PHP 8.1 and WordPress 6.4. On PHP below 8.4 the plugin file loads nothing but an admin notice saying so. 184 - **The 0.4 classes are gone.** `AlpacaBot\Agents`, `AlpacaBot\Api\*`, `AlpacaBot\Define`, `AlpacaBot\Help`, `AlpacaBot\Log\Post` and `AlpacaBot\Utils\*` were deleted, and with them the `alpaca_bot_*` hooks they applied. What 0.5 fires is in [docs/hooks.md](https://github.com/carmelosantana/alpaca-bot/blob/main/docs/hooks.md), generated from the call sites. 185 - **The REST routes changed.** The namespace is still `alpaca-bot/v1`, but 0.4's `htmx/*` and `wp/*` fragment endpoints are gone. 0.5 serves `/chat`, `/chat/{id}/stream`, `/conversations`, `/conversations/{id}`, `/models`, `/settings`, `/settings/schema`, `/usage` and a `/view/*` group; [docs/api.md](https://github.com/carmelosantana/alpaca-bot/blob/main/docs/api.md) is the reference. 186 - **Settings moved into a single option** and are migrated automatically on the first request after the upgrade. 0.4's API username and password are not carried over — they went out as HTTP Basic, and 0.5's key goes out as a Bearer token, so an empty field you must fill is better than a populated one that cannot authenticate. 0.4's "Limit chat history" becomes **Messages sent to the model**. 187 - **Existing conversations become private.** 0.4 stored them as published posts; the migration flips each to private and gives it an author, because 0.5 lets only a conversation's own author open it. A large history is moved a hundred rows per request rather than in one. 188 - **`[alpacabot]` no longer reads the shortcode's content as the prompt.** 0.4 sent the text between the tags; 0.5 reads a `prompt` attribute, and with no `prompt` it renders the chat screen on the page. An enclosing `[alpacabot]…[/alpacabot]` left over from 0.4 therefore renders a chat screen, not an answer. 189 - **A shortcode never generates for a visitor.** Generating costs tokens, so it needs a logged-in viewer who can edit posts. Anyone else sees a notice, or the answer an editor already cached where the site returns true from the `alpaca_bot/shortcode/allow_guests` filter. The REST API and the block editor never generate either, whoever is asking. 190 - **The shortcode `cache` attribute changed, and so did its default.** This is the one that costs money. In 0.4 a bare `[alpacabot]` cached its answer permanently — in the post's meta inside the loop, in an option outside it — so a page generated once and never again. In 0.5 the default is a one-hour transient: the same page regenerates every hour, at the provider's price, the next time a viewer who may generate opens it. Write `cache="365d"` for the old behaviour, which is the longest 0.5 accepts. The spellings changed with it: 0.4 read `postmeta`, `option`, a number of seconds, and `0`, `disable` or `false` to switch caching off, while 0.5 caches in a transient only, for a duration written as `45s`, `30m`, `1h` or `2d`. `off` is now the only word that disables it, and 0.4's five other spellings — `postmeta`, `option`, `0`, `disable` and `false` — all fall through to that one-hour default. 191 - **`[alpacabot_agent]` is deprecated.** It still fetches its URL and still asks the model for a `summarize`, but it logs a deprecation notice and goes away in a later 0.x release. Its fetch is now the `web_fetch` tool, so it does nothing while that tool is off under Settings › Tools, and it refuses a private, local or non-http(s) address. 192 193 **Added** 194 195 - A rewritten chat screen in wp-admin. Replies stream in over server-sent events as the model writes them, with a copy button on every message and code block, "Edit and resend" on your own, a thinking model's reasoning in a fold of its own, and an image attached from the media library for a model that can see. 196 - A receipt under every reply: the model, the tokens it spent, how long it took, and how many tools it ran. 197 - Conversations stored as private posts owned by their author, listed in the screen's history, with the transcript sent to the model bounded by a setting. 198 - A usage meter with monthly token caps for the site and per user, enforced on the server, and a daily cleanup that keeps receipts for as long as the Privacy tab says. 199 - A Settings API page in six tabs — Provider, Models, Chat, Privacy, Limits, Tools — with per-model overrides for temperature, context window, keep-alive, system prompt and tool support. 200 - Tools the model can call: `web_fetch` reads one public web page as text under a two-stage address guard, `summarize` condenses text through the model, and `draft_post` writes a draft it never publishes. All three are on by default and switchable per site. 201 - Three WordPress abilities — `alpaca-bot/chat`, `alpaca-bot/summarize` and `alpaca-bot/draft-post` — so other plugins and the MCP adapter can call the same code the screen does. 202 - A REST API under `alpaca-bot/v1` covering everything the screen does, and `wp alpaca-bot chat|models|usage|settings` on the command line. 203 - A per-minute rate limit shared by the chat screen, the REST routes, the abilities and the shortcodes, under one `alpaca_bot/rate_limit` filter. 204 - Both 0.4 shortcodes, back on the new pipeline: `[alpacabot]` for an answer in a page or the chat screen on it, and the `[alpacabot_agent]` shim above. 205 - The plugin's own dependencies are namespace-prefixed, so php-agents or CommonMark installed by another plugin cannot collide with the copies shipped here. 206 207 == Upgrade Notice == 208 209 = 0.5.0 = 210 211 A rewrite needing PHP 8.4 and WordPress 6.9; back up first. Settings and conversations migrate; your API username and password do not, so re-enter the key on the Provider tab or chat fails. [alpacabot] now takes a prompt attribute and never generates for visitors; [alpacabot_agent] is deprecated.
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)