Merge branch 'master' into rig-int
@@ -6,17 +6,17 @@ command = "bash -x ./install-and-build.sh"
|
|||||||
HUGO_VERSION = "0.123.0"
|
HUGO_VERSION = "0.123.0"
|
||||||
DART_SASS_VERSION = "1.70.0"
|
DART_SASS_VERSION = "1.70.0"
|
||||||
NODE_VERSION = "20.10.0"
|
NODE_VERSION = "20.10.0"
|
||||||
HUGO_PARAMS_segmentWriteKey = "HtxD8cbIlx3I98cyMdEFl6tBcJ3Cwagc"
|
HUGO_PARAMS_segmentWriteKey = "UOgPyE2GbtD4lletUP2uWfBGQQSfkzf1"
|
||||||
|
|
||||||
[context.production.environment]
|
[context.production.environment]
|
||||||
HUGO_ENV = "production"
|
HUGO_ENV = "production"
|
||||||
HUGO_ENABLEGITINFO = "true"
|
HUGO_ENABLEGITINFO = "true"
|
||||||
DEPLOY_PRIME_URL = "https://qdrant.tech"
|
DEPLOY_PRIME_URL = "https://qdrant.tech"
|
||||||
HUGO_PARAMS_segmentWriteKey = "FDCshQlKE2lWbOkvTXYHXY9Vof3ZFKoV"
|
HUGO_PARAMS_segmentWriteKey = "eQYi1nZE2zQSmnHuxjMRlDd2uLl65oHe"
|
||||||
|
|
||||||
[context.deploy-preview.environment]
|
[context.deploy-preview.environment]
|
||||||
HUGO_ENV = "staging"
|
HUGO_ENV = "staging"
|
||||||
HUGO_PARAMS_segmentWriteKey = "kcpVTrfNQqfL07HhMjVM08g0a3aH2Oek"
|
HUGO_PARAMS_segmentWriteKey = "DZ49RYXkFEV0pY6DG4i0RyxyobSovIlU"
|
||||||
|
|
||||||
[[headers]]
|
[[headers]]
|
||||||
for = "/*"
|
for = "/*"
|
||||||
|
|||||||
@@ -107,6 +107,9 @@ disableKinds = ["taxonomy", "term"]
|
|||||||
[markup.highlight]
|
[markup.highlight]
|
||||||
noClasses = false
|
noClasses = false
|
||||||
codeFences=true
|
codeFences=true
|
||||||
|
[markup.tableOfContents]
|
||||||
|
startLevel = 1
|
||||||
|
endLevel = 3
|
||||||
|
|
||||||
[related]
|
[related]
|
||||||
includeNewer = true
|
includeNewer = true
|
||||||
|
|||||||
@@ -44,9 +44,9 @@ FastEmbed already had support for embeddings, but re-ranking with cross-encoders
|
|||||||
One thing I had to ensure was that the new class hierarchy was user-friendly. Users should be able to work with cross-encoders without needing to know the complexities of the underlying models. For instance, they should be able to just write:
|
One thing I had to ensure was that the new class hierarchy was user-friendly. Users should be able to work with cross-encoders without needing to know the complexities of the underlying models. For instance, they should be able to just write:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
from fastembed import TextCrossEncoder
|
from fastembed.rerank.cross_encoder import TextCrossEncoder
|
||||||
|
|
||||||
encoder = TextCrossEncoder(model_name='Xenova/ms-marco-MiniLM-L-6-v2')
|
encoder = TextCrossEncoder(model_name="Xenova/ms-marco-MiniLM-L-6-v2")
|
||||||
scores = encoder.rerank(query, documents)
|
scores = encoder.rerank(query, documents)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,74 @@
|
|||||||
title: Home
|
title: Home
|
||||||
weight: 2
|
weight: 2
|
||||||
hideTOC: true
|
hideTOC: true
|
||||||
|
breadcrumb: false
|
||||||
|
content:
|
||||||
|
- partial: "documentation/banners/banner-a"
|
||||||
|
title: Qdrant Documentation
|
||||||
|
description: Qdrant is an AI-native vector database and a semantic search engine. You can use it to extract meaningful information from unstructured data.
|
||||||
|
linkDescription: <a href="https://github.com/qdrant/qdrant_demo/" target="_blank">Clone this repo now</a> and build a search engine in five minutes.
|
||||||
|
cloudButton:
|
||||||
|
text: Cloud Quickstart
|
||||||
|
url: /documentation/quickstart-cloud/
|
||||||
|
localButton:
|
||||||
|
text: Local Quickstart
|
||||||
|
url: /documentation/quickstart/
|
||||||
|
contained: true
|
||||||
|
- partial: documentation/banners/banner-d
|
||||||
|
developingTitle: Ready to start developing?
|
||||||
|
developingDescription: Qdrant is open-source and can be self-hosted. However, the quickest way to get started is with our <a href="https://qdrant.to/cloud" target="_blank">free tier</a> on Qdrant Cloud. It scales easily and provides a UI where you can interact with data.
|
||||||
|
developingBlock:
|
||||||
|
title: Create your first Qdrant Cloud cluster today
|
||||||
|
button:
|
||||||
|
text: Get Started
|
||||||
|
url: https://qdrant.to/cloud
|
||||||
|
image:
|
||||||
|
src: /img/rocket.svg
|
||||||
|
alt: Rocket
|
||||||
|
- partial: documentation/sections/cards-section
|
||||||
|
title: Optimize Qdrant's performance
|
||||||
|
description: Boost search speed, reduce latency, and improve the accuracy and memory usage of your Qdrant deployment.
|
||||||
|
button:
|
||||||
|
text: Learn More
|
||||||
|
url: /documentation/guides/optimize/
|
||||||
|
cardsPartial: documentation/cards/docs-cards
|
||||||
|
cards:
|
||||||
|
- id: 1
|
||||||
|
tag: Documents
|
||||||
|
icon:
|
||||||
|
src: /icons/outline/documentation-blue.svg
|
||||||
|
alt: Documents
|
||||||
|
title: Distributed Deployment
|
||||||
|
description: Scale Qdrant beyond a single node and optimize for high availability, fault tolerance, and billion-scale performance.
|
||||||
|
link:
|
||||||
|
url: /documentation/guides/distributed_deployment/
|
||||||
|
text: Read More
|
||||||
|
- id: 2
|
||||||
|
tag: Documents
|
||||||
|
icon:
|
||||||
|
src: /icons/outline/documentation-blue.svg
|
||||||
|
alt: Documents
|
||||||
|
title: Multitenancy
|
||||||
|
description: Build vector search apps that serve millions of users. Learn about data isolation, security, and performance tuning.
|
||||||
|
link:
|
||||||
|
url: /documentation/guides/multiple-partitions/
|
||||||
|
text: Read More
|
||||||
|
- id: 3
|
||||||
|
tag: Blog
|
||||||
|
tagColor: violet
|
||||||
|
icon:
|
||||||
|
src: /icons/outline/blog-purple.svg
|
||||||
|
alt: Blog
|
||||||
|
title: Vector Quantization
|
||||||
|
description: Learn about cutting-edge techniques for vector quantization and how they can be used to improve search performance.
|
||||||
|
link:
|
||||||
|
url: /articles/what-is-vector-quantization/
|
||||||
|
text: Read More
|
||||||
|
partition: qdrant
|
||||||
---
|
---
|
||||||
|
|
||||||
|
THIS CONTENT IS GOING TO BE IGNORED FOR NOW
|
||||||
|
|
||||||
# Documentation
|
# Documentation
|
||||||
|
|
||||||
Qdrant is an AI-native vector database and a semantic search engine. You can use it to extract meaningful information from unstructured data. Want to see how it works? [Clone this repo now](https://github.com/qdrant/qdrant_demo/) and build a search engine in five minutes.
|
Qdrant is an AI-native vector database and a semantic search engine. You can use it to extract meaningful information from unstructured data. Want to see how it works? [Clone this repo now](https://github.com/qdrant/qdrant_demo/) and build a search engine in five minutes.
|
||||||
|
|||||||
@@ -0,0 +1,49 @@
|
|||||||
|
---
|
||||||
|
title: Build World-Class Applications
|
||||||
|
slug: build
|
||||||
|
breadcrumb: false
|
||||||
|
content:
|
||||||
|
- partial: documentation/banners/banner-c
|
||||||
|
title: Build World-Class Applications
|
||||||
|
description: Dev-portal Build
|
||||||
|
image:
|
||||||
|
src: /img/dev-portal-build/spanish-ai-app-hero.png
|
||||||
|
alt: Spanish AI app.png
|
||||||
|
startedButton:
|
||||||
|
text: Get Started
|
||||||
|
url: https://qdrant.to/cloud
|
||||||
|
- partial: documentation/sections/cards-section
|
||||||
|
title: Start Building
|
||||||
|
description: Deploy and manage high-performance vector search clusters across cloud environments. Easily scale with fully managed cloud solutions, integrate seamlessly across hybrid setups, or maintain complete control with private cloud deployments in Kubernetes.
|
||||||
|
cardsPartial: documentation/cards/docs-cards
|
||||||
|
cards:
|
||||||
|
- id: 1
|
||||||
|
image:
|
||||||
|
src: /img/dev-portal-build/search.png
|
||||||
|
alt: Search
|
||||||
|
title: Search
|
||||||
|
description: Build a simple neural search service with Qdrant and FastEmbed. Learn how to upload data, create indexes, and run search queries.
|
||||||
|
link:
|
||||||
|
url: /documentation/tutorials/hybrid-search-fastembed/
|
||||||
|
text: Read More
|
||||||
|
- id: 2
|
||||||
|
image:
|
||||||
|
src: /img/dev-portal-build/rag.png
|
||||||
|
alt: RAG
|
||||||
|
title: RAG
|
||||||
|
description: Build end-to-end prototype chatbots. Learn how Qdrant integrates with popular RAG frameworks like LangChain and Llamaindex.
|
||||||
|
link:
|
||||||
|
url: /documentation/frameworks/langchain/
|
||||||
|
text: Read More
|
||||||
|
- id: 3
|
||||||
|
image:
|
||||||
|
src: /img/dev-portal-build/pipelines.png
|
||||||
|
alt: Pipelines
|
||||||
|
title: Pipelines
|
||||||
|
description: Integrate Qdrant into your data infrastructure by connecting with popular data engineering tools.
|
||||||
|
link:
|
||||||
|
url: /documentation/send-data/
|
||||||
|
text: Read More
|
||||||
|
partition: build
|
||||||
|
hideInSidebar: true
|
||||||
|
---
|
||||||
@@ -0,0 +1,73 @@
|
|||||||
|
---
|
||||||
|
title: Welcome to Qdrant Cloud
|
||||||
|
slug: cloud-intro
|
||||||
|
breadcrumb: false
|
||||||
|
content:
|
||||||
|
- partial: documentation/banners/banner-b
|
||||||
|
title: Welcome to Qdrant Cloud
|
||||||
|
description: Dev-portal Cloud
|
||||||
|
image:
|
||||||
|
src: /img/dev-portal-cloud/dev-portal-cloud-hero.png
|
||||||
|
alt: Qdrant cloud dashboard
|
||||||
|
startedButton:
|
||||||
|
text: Get Started
|
||||||
|
url: https://qdrant.to/cloud
|
||||||
|
- partial: documentation/sections/cards-section
|
||||||
|
title: Managed Services
|
||||||
|
description: Deploy and manage high-performance vector search clusters across cloud environments. Easily scale with fully managed cloud solutions, integrate seamlessly across hybrid setups, or maintain complete control with private cloud deployments in Kubernetes.
|
||||||
|
cardsPartial: documentation/cards/docs-cards
|
||||||
|
cards:
|
||||||
|
- id: 1
|
||||||
|
image:
|
||||||
|
src: /img/dev-portal-cloud/managed-cloud.png
|
||||||
|
alt: Qdrant Cloud
|
||||||
|
title: Qdrant Cloud
|
||||||
|
description: Qdrant Managed Cloud is our SaaS solution, providing managed Qdrant database clusters on the cloud.
|
||||||
|
link:
|
||||||
|
url: /documentation/cloud/
|
||||||
|
text: Read More
|
||||||
|
- id: 2
|
||||||
|
image:
|
||||||
|
src: /img/dev-portal-cloud/hybrid-cloud.png
|
||||||
|
alt: Hybrid Cloud
|
||||||
|
title: Hybrid Cloud
|
||||||
|
description: Deploy and manage your vector database across diverse environments, ensuring performance, security, and cost efficiency.
|
||||||
|
link:
|
||||||
|
url: /documentation/hybrid-cloud/
|
||||||
|
text: Read More
|
||||||
|
- id: 3
|
||||||
|
image:
|
||||||
|
src: /img/dev-portal-cloud/private-cloud.png
|
||||||
|
alt: Private Cloud
|
||||||
|
title: Private Cloud
|
||||||
|
description: Qdrant Private Cloud allows you to manage Qdrant database clusters in any Kubernetes cluster on any infrastructure.
|
||||||
|
link:
|
||||||
|
url: /documentation/private-cloud/
|
||||||
|
text: Read More
|
||||||
|
- partial: documentation/sections/cards-section
|
||||||
|
title: Customer Support
|
||||||
|
description: Stream, index, and migrate data to Qdrant with these essential tools and strategies.
|
||||||
|
cardsPartial: documentation/cards/docs-cards
|
||||||
|
cardsPerRow: 2
|
||||||
|
cards:
|
||||||
|
- id: 1
|
||||||
|
icon:
|
||||||
|
src: /icons/outline/discord-purple.svg
|
||||||
|
alt: Discord icon
|
||||||
|
title: Community Support
|
||||||
|
description: Join 6,000+ active members to learn, collaborate, and participate in Qdrant’s latest activities.
|
||||||
|
link:
|
||||||
|
text: Join our Discord
|
||||||
|
url: https://qdrant.to/discord
|
||||||
|
- id: 2
|
||||||
|
icon:
|
||||||
|
src: /icons/outline/support-blue.svg
|
||||||
|
alt: Support icon
|
||||||
|
title: Qdrant Cloud Support
|
||||||
|
description: Paying customers have access to our Support team. Links to the support portal are available in the Qdrant Cloud Console.
|
||||||
|
link:
|
||||||
|
text: Join Qdrant
|
||||||
|
url: https://qdrant.to/cloud
|
||||||
|
partition: cloud
|
||||||
|
hideInSidebar: true
|
||||||
|
---
|
||||||
@@ -3,6 +3,7 @@ title: Managed Cloud
|
|||||||
weight: 12
|
weight: 12
|
||||||
aliases:
|
aliases:
|
||||||
- /documentation/overview/qdrant-alternatives/documentation/cloud/
|
- /documentation/overview/qdrant-alternatives/documentation/cloud/
|
||||||
|
partition: cloud
|
||||||
---
|
---
|
||||||
|
|
||||||
# About Qdrant Managed Cloud
|
# About Qdrant Managed Cloud
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
title: Concepts
|
title: Concepts
|
||||||
weight: 8
|
weight: 8
|
||||||
# If the index.md file is empty, the link to the section will be hidden from the sidebar
|
# If the index.md file is empty, the link to the section will be hidden from the sidebar
|
||||||
|
partition: qdrant
|
||||||
---
|
---
|
||||||
|
|
||||||
# Concepts
|
# Concepts
|
||||||
|
|||||||
@@ -859,7 +859,7 @@ curl -X PATCH http://localhost:6333/collections/{collection_name} \
|
|||||||
```python
|
```python
|
||||||
client.update_collection(
|
client.update_collection(
|
||||||
collection_name="{collection_name}",
|
collection_name="{collection_name}",
|
||||||
optimizer_config=models.OptimizersConfigDiff(indexing_threshold=10000),
|
optimizers_config=models.OptimizersConfigDiff(indexing_threshold=10000),
|
||||||
)
|
)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
---
|
---
|
||||||
title: Data Management
|
title: Data Management
|
||||||
weight: 18
|
weight: 18
|
||||||
|
partition: build
|
||||||
---
|
---
|
||||||
|
|
||||||
## Data Management Integrations
|
## Data Management Integrations
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
---
|
---
|
||||||
title: Practice Datasets
|
title: Practice Datasets
|
||||||
weight: 29
|
weight: 29
|
||||||
|
partition: build
|
||||||
---
|
---
|
||||||
|
|
||||||
# Common Datasets in Snapshot Format
|
# Common Datasets in Snapshot Format
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
---
|
||||||
|
#Delimiter files are used to separate the list of documentation pages into sections.
|
||||||
|
title: "Interfaces"
|
||||||
|
type: delimiter
|
||||||
|
weight: 25 # Change this weight to change order of sections
|
||||||
|
sitemapExclude: True
|
||||||
|
_build:
|
||||||
|
publishResources: false
|
||||||
|
render: never
|
||||||
|
partition: cloud
|
||||||
|
---
|
||||||
@@ -2,9 +2,10 @@
|
|||||||
#Delimiter files are used to separate the list of documentation pages into sections.
|
#Delimiter files are used to separate the list of documentation pages into sections.
|
||||||
title: "Support"
|
title: "Support"
|
||||||
type: delimiter
|
type: delimiter
|
||||||
weight: 27 # Change this weight to change order of sections
|
weight: 30 # Change this weight to change order of sections
|
||||||
sitemapExclude: True
|
sitemapExclude: True
|
||||||
_build:
|
_build:
|
||||||
publishResources: false
|
publishResources: false
|
||||||
render: never
|
render: never
|
||||||
|
partition: cloud
|
||||||
---
|
---
|
||||||
@@ -3,6 +3,7 @@
|
|||||||
title: "Examples"
|
title: "Examples"
|
||||||
type: delimiter
|
type: delimiter
|
||||||
weight: 24 # Change this weight to change order of sections
|
weight: 24 # Change this weight to change order of sections
|
||||||
|
partition: build
|
||||||
sitemapExclude: True
|
sitemapExclude: True
|
||||||
_build:
|
_build:
|
||||||
publishResources: false
|
publishResources: false
|
||||||
@@ -7,4 +7,5 @@ sitemapExclude: True
|
|||||||
_build:
|
_build:
|
||||||
publishResources: false
|
publishResources: false
|
||||||
render: never
|
render: never
|
||||||
---
|
partition: qdrant
|
||||||
|
---
|
||||||
@@ -7,4 +7,5 @@ sitemapExclude: True
|
|||||||
_build:
|
_build:
|
||||||
publishResources: false
|
publishResources: false
|
||||||
render: never
|
render: never
|
||||||
|
partition: build
|
||||||
---
|
---
|
||||||
@@ -7,4 +7,5 @@ sitemapExclude: True
|
|||||||
_build:
|
_build:
|
||||||
publishResources: false
|
publishResources: false
|
||||||
render: never
|
render: never
|
||||||
|
partition: cloud
|
||||||
---
|
---
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
---
|
||||||
|
#Delimiter files are used to separate the list of documentation pages into sections.
|
||||||
|
title: "Support"
|
||||||
|
type: delimiter
|
||||||
|
weight: 30 # Change this weight to change order of sections
|
||||||
|
sitemapExclude: True
|
||||||
|
_build:
|
||||||
|
publishResources: false
|
||||||
|
render: never
|
||||||
|
partition: qdrant
|
||||||
|
---
|
||||||
@@ -7,4 +7,5 @@ sitemapExclude: True
|
|||||||
_build:
|
_build:
|
||||||
publishResources: false
|
publishResources: false
|
||||||
render: never
|
render: never
|
||||||
|
partition: qdrant
|
||||||
---
|
---
|
||||||
@@ -2,6 +2,7 @@
|
|||||||
---
|
---
|
||||||
title: Embeddings
|
title: Embeddings
|
||||||
weight: 19
|
weight: 19
|
||||||
|
partition: build
|
||||||
---
|
---
|
||||||
# Supported Embedding Providers & Models
|
# Supported Embedding Providers & Models
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
---
|
---
|
||||||
title: Build Prototypes
|
title: Build Prototypes
|
||||||
weight: 26
|
weight: 26
|
||||||
|
partition: build
|
||||||
---
|
---
|
||||||
# Examples
|
# Examples
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
---
|
---
|
||||||
title: FAQ
|
title: FAQ
|
||||||
weight: 28
|
weight: 31
|
||||||
|
partition: qdrant
|
||||||
is_empty: true
|
is_empty: true
|
||||||
---
|
---
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
---
|
---
|
||||||
title: "FastEmbed"
|
title: "FastEmbed"
|
||||||
weight: 6
|
weight: 6
|
||||||
|
partition: qdrant
|
||||||
---
|
---
|
||||||
|
|
||||||
# What is FastEmbed?
|
# What is FastEmbed?
|
||||||
|
|||||||
@@ -1,31 +1,36 @@
|
|||||||
---
|
---
|
||||||
title: Frameworks
|
title: Frameworks
|
||||||
weight: 20
|
weight: 20
|
||||||
|
partition: build
|
||||||
---
|
---
|
||||||
|
|
||||||
## Framework Integrations
|
## Framework Integrations
|
||||||
|
|
||||||
| Framework | Description |
|
| Framework | Description |
|
||||||
| ------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
|
| ------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
|
||||||
| [AutoGen](/documentation/frameworks/autogen/) | Framework from Microsoft building LLM applications using multiple conversational agents. |
|
| [AutoGen](/documentation/frameworks/autogen/) | Framework from Microsoft building LLM applications using multiple conversational agents. |
|
||||||
| [Canopy](/documentation/frameworks/canopy/) | Framework from Pinecone for building RAG applications using LLMs and knowledge bases. |
|
| [Canopy](/documentation/frameworks/canopy/) | Framework from Pinecone for building RAG applications using LLMs and knowledge bases. |
|
||||||
| [Cheshire Cat](/documentation/frameworks/cheshire-cat/) | Framework to create personalized AI assistants using custom data. |
|
| [Cheshire Cat](/documentation/frameworks/cheshire-cat/) | Framework to create personalized AI assistants using custom data. |
|
||||||
| [DocArray](/documentation/frameworks/docarray/) | Python library for managing data in multi-modal AI applications. |
|
| [DocArray](/documentation/frameworks/docarray/) | Python library for managing data in multi-modal AI applications. |
|
||||||
| [DSPy](/documentation/frameworks/dspy/) | Framework for algorithmically optimizing LM prompts and weights. |
|
| [DSPy](/documentation/frameworks/dspy/) | Framework for algorithmically optimizing LM prompts and weights. |
|
||||||
| [Fifty-One](/documentation/frameworks/fifty-one/) | Toolkit for building high-quality datasets and computer vision models. |
|
| [Feast](/documentation/frameworks/feast/) | Open-source feature store to operate production ML systems at scale as a set of features. |
|
||||||
| [Genkit](/documentation/frameworks/genkit/) | Framework to build, deploy, and monitor production-ready AI-powered apps. |
|
| [Fifty-One](/documentation/frameworks/fifty-one/) | Toolkit for building high-quality datasets and computer vision models. |
|
||||||
| [Haystack](/documentation/frameworks/haystack/) | LLM orchestration framework to build customizable, production-ready LLM applications. |
|
| [Genkit](/documentation/frameworks/genkit/) | Framework to build, deploy, and monitor production-ready AI-powered apps. |
|
||||||
| [Lakechain](/documentation/frameworks/lakechain/) | Python framework for deploying document processing pipelines on AWS using infrastructure-as-code. |
|
| [Haystack](/documentation/frameworks/haystack/) | LLM orchestration framework to build customizable, production-ready LLM applications. |
|
||||||
| [Langchain](/documentation/frameworks/langchain/) | Python framework for building context-aware, reasoning applications using LLMs. |
|
| [Lakechain](/documentation/frameworks/lakechain/) | Python framework for deploying document processing pipelines on AWS using infrastructure-as-code. |
|
||||||
| [Langchain-Go](/documentation/frameworks/langchain-go/) | Go framework for building context-aware, reasoning applications using LLMs. |
|
| [Langchain](/documentation/frameworks/langchain/) | Python framework for building context-aware, reasoning applications using LLMs. |
|
||||||
| [Langchain4j](/documentation/frameworks/langchain4j/) | Java framework for building context-aware, reasoning applications using LLMs. |
|
| [Langchain-Go](/documentation/frameworks/langchain-go/) | Go framework for building context-aware, reasoning applications using LLMs. |
|
||||||
| [LlamaIndex](/documentation/frameworks/llama-index/) | A data framework for building LLM applications with modular integrations. |
|
| [Langchain4j](/documentation/frameworks/langchain4j/) | Java framework for building context-aware, reasoning applications using LLMs. |
|
||||||
| [Mem0](/documentation/frameworks/mem0/) | Self-improving memory layer for LLM applications, enabling personalized AI experiences. |
|
| [LlamaIndex](/documentation/frameworks/llama-index/) | A data framework for building LLM applications with modular integrations. |
|
||||||
| [MemGPT](/documentation/frameworks/memgpt/) | System to build LLM agents with long term memory & custom tools |
|
| [Mem0](/documentation/frameworks/mem0/) | Self-improving memory layer for LLM applications, enabling personalized AI experiences. |
|
||||||
| [Pandas-AI](/documentation/frameworks/pandas-ai/) | Python library to query/visualize your data (CSV, XLSX, PostgreSQL, etc.) in natural language |
|
| [MemGPT](/documentation/frameworks/memgpt/) | System to build LLM agents with long term memory & custom tools |
|
||||||
| [Rig-rs](/documentation/frameworks/rig-rs/) | Rust library for building scalable, modular, and ergonomic LLM-powered applications. |
|
| [Neo4j GraphRAG](/documentation/frameworks/neo4j-graphrag/) | Package to build graph retrieval augmented generation (GraphRAG) applications using Neo4j and Python. |
|
||||||
| [Semantic Router](/documentation/frameworks/semantic-router/) | Python library to build a decision-making layer for AI applications using vector search. |
|
| [Pandas-AI](/documentation/frameworks/pandas-ai/) | Python library to query/visualize your data (CSV, XLSX, PostgreSQL, etc.) in natural language |
|
||||||
| [Spring AI](/documentation/frameworks/spring-ai/) | Java AI framework for building with Spring design principles such as portability and modular design. |
|
| [Ragbits](/documentation/frameworks/ragbits/) | Python package that offers essential "bits" for building powerful Retrieval-Augmented Generation (RAG) applications. |
|
||||||
| [Sycamore](/documentation/frameworks/sycamore/) | Document processing engine for ETL, RAG, LLM-based applications, and analytics on unstructured data. |
|
| [Rig-rs](/documentation/frameworks/rig-rs/) | Rust library for building scalable, modular, and ergonomic LLM-powered applications. |
|
||||||
| [txtai](/documentation/frameworks/txtai/) | Python library for semantic search, LLM orchestration and language model workflows. |
|
| [Semantic Router](/documentation/frameworks/semantic-router/) | Python library to build a decision-making layer for AI applications using vector search. |
|
||||||
| [Vanna AI](/documentation/frameworks/vanna-ai/) | Python RAG framework for SQL generation and querying. |
|
| [Spring AI](/documentation/frameworks/spring-ai/) | Java AI framework for building with Spring design principles such as portability and modular design. |
|
||||||
|
| [Sycamore](/documentation/frameworks/sycamore/) | Document processing engine for ETL, RAG, LLM-based applications, and analytics on unstructured data. |
|
||||||
|
| [txtai](/documentation/frameworks/txtai/) | Python library for semantic search, LLM orchestration and language model workflows. |
|
||||||
|
| [Vanna AI](/documentation/frameworks/vanna-ai/) | Python RAG framework for SQL generation and querying. |
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,63 @@
|
|||||||
|
---
|
||||||
|
title: Feast
|
||||||
|
---
|
||||||
|
|
||||||
|
## Feast
|
||||||
|
|
||||||
|
[Feast (**Fe**ature **St**ore)](https://docs.feast.dev) is an open-source feature store that helps teams operate production ML systems at scale by allowing them to define, manage, validate, and serve features for production AI/ML.
|
||||||
|
|
||||||
|
Qdrant is available as a supported vectorstore in Feast to integrate in your workflows.
|
||||||
|
|
||||||
|
## Insatallation
|
||||||
|
|
||||||
|
To use the Qdrant online store, you need to install Feast with the `qdrant` extra.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pip install 'feast[qdrant]'
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
An example config with Qdrant could look like:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
project: my_feature_repo
|
||||||
|
registry: data/registry.db
|
||||||
|
provider: local
|
||||||
|
online_store:
|
||||||
|
type: qdrant
|
||||||
|
host: xyz-example.eu-central.aws.cloud.qdrant.io
|
||||||
|
port: 6333
|
||||||
|
api_key: <your-own-key>
|
||||||
|
vector_len: 384
|
||||||
|
# Reference: https://qdrant.tech/documentation/concepts/vectors/#named-vectors
|
||||||
|
# vector_name: text-vec
|
||||||
|
write_batch_size: 100
|
||||||
|
```
|
||||||
|
|
||||||
|
You can refer to the Feast [reference](https://rtd.feast.dev/en/master/index.html#) for the full list of configuration options.
|
||||||
|
|
||||||
|
## Retrieving Documents
|
||||||
|
|
||||||
|
The Qdrant online store supports retrieving document vectors for a given list of entity keys. The document vectors are returned as a dictionary where the key is the entity key and the value being the vector.
|
||||||
|
|
||||||
|
```python
|
||||||
|
from feast import FeatureStore
|
||||||
|
|
||||||
|
feature_store = FeatureStore(repo_path="feature_store.yaml")
|
||||||
|
|
||||||
|
query_vector = [1.0, 2.0, 3.0, 4.0, 5.0]
|
||||||
|
top_k = 5
|
||||||
|
|
||||||
|
feature_values = feature_store.retrieve_online_documents(
|
||||||
|
feature="my_feature",
|
||||||
|
query=query_vector,
|
||||||
|
top_k=top_k
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📚 Further Reading
|
||||||
|
|
||||||
|
- [Feast Docs](http://docs.feast.dev/)
|
||||||
|
- [Feast Reference](https://rtd.feast.dev/en/master/index.html/)
|
||||||
|
- [Source](https://github.com/feast-dev/feast/tree/master/sdk/python/feast/infra/online_stores/)
|
||||||
@@ -0,0 +1,69 @@
|
|||||||
|
---
|
||||||
|
title: Neo4j GraphRAG
|
||||||
|
---
|
||||||
|
|
||||||
|
# Neo4j GraphRAG
|
||||||
|
|
||||||
|
[Neo4j GraphRAG](https://neo4j.com/docs/neo4j-graphrag-python/current/) is a Python package to build graph retrieval augmented generation (GraphRAG) applications using Neo4j and Python. As a first-party library, it offers a robust, feature-rich, and high-performance solution, with the added assurance of long-term support and maintenance directly from Neo4j. It offers a Qdrant retriever natively to search for vectors stored in a Qdrant collection.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pip install neo4j-graphrag[qdrant]
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
A vector query with Neo4j and Qdrant could look like:
|
||||||
|
|
||||||
|
```python
|
||||||
|
from neo4j import GraphDatabase
|
||||||
|
from neo4j_graphrag.retrievers import QdrantNeo4jRetriever
|
||||||
|
from qdrant_client import QdrantClient
|
||||||
|
from examples.embedding_biology import EMBEDDING_BIOLOGY
|
||||||
|
|
||||||
|
NEO4J_URL = "neo4j://localhost:7687"
|
||||||
|
NEO4J_AUTH = ("neo4j", "password")
|
||||||
|
|
||||||
|
with GraphDatabase.driver(NEO4J_URL, auth=NEO4J_AUTH) as neo4j_driver:
|
||||||
|
retriever = QdrantNeo4jRetriever(
|
||||||
|
driver=neo4j_driver,
|
||||||
|
client=QdrantClient(url="http://localhost:6333"),
|
||||||
|
collection_name="{collection_name}",
|
||||||
|
id_property_external="neo4j_id",
|
||||||
|
id_property_neo4j="id",
|
||||||
|
)
|
||||||
|
|
||||||
|
retriever.search(query_vector=[0.5523, 0.523, 0.132, 0.523, ...], top_k=5)
|
||||||
|
```
|
||||||
|
|
||||||
|
Alternatively, you can use any [Langchain embeddings providers](https://python.langchain.com/docs/integrations/text_embedding/), to vectorize text queries automatically.
|
||||||
|
|
||||||
|
```python
|
||||||
|
from langchain_huggingface.embeddings import HuggingFaceEmbeddings
|
||||||
|
from neo4j import GraphDatabase
|
||||||
|
from neo4j_graphrag.retrievers import QdrantNeo4jRetriever
|
||||||
|
from qdrant_client import QdrantClient
|
||||||
|
|
||||||
|
NEO4J_URL = "neo4j://localhost:7687"
|
||||||
|
NEO4J_AUTH = ("neo4j", "password")
|
||||||
|
|
||||||
|
with GraphDatabase.driver(NEO4J_URL, auth=NEO4J_AUTH) as neo4j_driver:
|
||||||
|
embedder = HuggingFaceEmbeddings(model_name="all-MiniLM-L6-v2")
|
||||||
|
retriever = QdrantNeo4jRetriever(
|
||||||
|
driver=neo4j_driver,
|
||||||
|
client=QdrantClient(url="http://localhost:6333"),
|
||||||
|
collection_name="{collection_name}",
|
||||||
|
id_property_external="neo4j_id",
|
||||||
|
id_property_neo4j="id",
|
||||||
|
embedder=embedder,
|
||||||
|
)
|
||||||
|
|
||||||
|
retriever.search(query_text="my user query", top_k=10)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Further Reading
|
||||||
|
|
||||||
|
- [Neo4j GraphRAG Reference](https://neo4j.com/docs/neo4j-graphrag-python/current/index.html)
|
||||||
|
- [Qdrant Retriever Reference](https://neo4j.com/docs/neo4j-graphrag-python/current/user_guide_rag.html#qdrant-neo4j-retriever-user-guide)
|
||||||
|
- [Source](https://github.com/neo4j/neo4j-graphrag-python/tree/main/src/neo4j_graphrag/retrievers/external/qdrant)
|
||||||
@@ -0,0 +1,83 @@
|
|||||||
|
---
|
||||||
|
title: Ragbits
|
||||||
|
---
|
||||||
|
|
||||||
|
# Ragbits
|
||||||
|
|
||||||
|
[Ragbit](https://ragbits.deepsense.ai) is a Python package that offers essential "bits" for building powerful Retrieval-Augmented Generation (RAG) applications. It prioritizes developer experience by providing a simple and intuitive API. It also includes a comprehensive set of tools for seamlessly building, testing, and deploying your RAG applications efficiently.
|
||||||
|
|
||||||
|
Qdrant is available as a vectorstore in Ragbits to ingest and search search documents from a collection.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
Install the Python package that comes bundled with the Qdrant integration.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pip install ragbits
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
An example usage of Ragbits and Qdrant would look something like this:
|
||||||
|
|
||||||
|
The following example uses [OpenAI embeddings](https://platform.openai.com/docs/guides/embeddings) via [LiteLLM](https://www.litellm.ai).
|
||||||
|
|
||||||
|
```python
|
||||||
|
import asyncio
|
||||||
|
|
||||||
|
from qdrant_client import AsyncQdrantClient
|
||||||
|
|
||||||
|
from ragbits.core.embeddings.litellm import LiteLLMEmbeddings
|
||||||
|
from ragbits.core.vector_stores.qdrant import QdrantVectorStore
|
||||||
|
from ragbits.document_search import DocumentSearch, SearchConfig
|
||||||
|
from ragbits.document_search.documents.document import DocumentMeta
|
||||||
|
|
||||||
|
documents = [
|
||||||
|
DocumentMeta.create_text_document_from_literal(
|
||||||
|
"RIP boiled water. You will be mist."
|
||||||
|
),
|
||||||
|
DocumentMeta.create_text_document_from_literal(
|
||||||
|
"Why programmers don't like to swim? Because they're scared of the floating points."
|
||||||
|
),
|
||||||
|
DocumentMeta.create_text_document_from_literal("This one is completely unrelated."),
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
async def main() -> None:
|
||||||
|
embedder = LiteLLMEmbeddings(
|
||||||
|
model="text-embedding-3-small",
|
||||||
|
)
|
||||||
|
vector_store = QdrantVectorStore(
|
||||||
|
client=AsyncQdrantClient(url="http://localhost:6333"),
|
||||||
|
collection_name="{collection_name}",
|
||||||
|
)
|
||||||
|
document_search = DocumentSearch(
|
||||||
|
embedder=embedder,
|
||||||
|
vector_store=vector_store,
|
||||||
|
)
|
||||||
|
|
||||||
|
await document_search.ingest(documents)
|
||||||
|
|
||||||
|
all_documents = await vector_store.list()
|
||||||
|
print([doc.metadata["content"] for doc in all_documents])
|
||||||
|
|
||||||
|
query = "I write computer software. Tell me something."
|
||||||
|
vector_store_kwargs = {
|
||||||
|
"k": 1,
|
||||||
|
"max_distance": None,
|
||||||
|
}
|
||||||
|
results = await document_search.search(
|
||||||
|
query,
|
||||||
|
config=SearchConfig(vector_store_kwargs=vector_store_kwargs),
|
||||||
|
)
|
||||||
|
|
||||||
|
print(f"Documents similar to: {query}")
|
||||||
|
print([element.get_key() for element in results])
|
||||||
|
```
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
## 📚 Further Reading
|
||||||
|
|
||||||
|
- Ragbits [Documentation](http://ragbits.deepsense.ai)
|
||||||
|
- [Source Code](https://github.com/deepsense-ai/ragbits)
|
||||||
@@ -3,4 +3,5 @@ title: Guides
|
|||||||
weight: 9
|
weight: 9
|
||||||
# If the index.md file is empty, the link to the section will be hidden from the sidebar
|
# If the index.md file is empty, the link to the section will be hidden from the sidebar
|
||||||
is_empty: true
|
is_empty: true
|
||||||
|
partition: qdrant
|
||||||
---
|
---
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
---
|
---
|
||||||
title: Hybrid Cloud
|
title: Hybrid Cloud
|
||||||
weight: 13
|
weight: 13
|
||||||
|
partition: cloud
|
||||||
---
|
---
|
||||||
|
|
||||||
# Qdrant Hybrid Cloud
|
# Qdrant Hybrid Cloud
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
---
|
---
|
||||||
title: Infrastructure
|
title: Infrastructure
|
||||||
weight: 21
|
weight: 21
|
||||||
|
partition: build
|
||||||
---
|
---
|
||||||
|
|
||||||
## Infrastructure Integrations
|
## Infrastructure Integrations
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
---
|
---
|
||||||
title: API & SDKs
|
title: API & SDKs
|
||||||
weight: 6
|
weight: 6
|
||||||
|
partition: qdrant
|
||||||
aliases:
|
aliases:
|
||||||
- /documentation/interfaces/
|
- /documentation/interfaces/
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
---
|
---
|
||||||
title: Observability
|
title: Observability
|
||||||
weight: 22
|
weight: 22
|
||||||
|
partition: build
|
||||||
---
|
---
|
||||||
|
|
||||||
## Observability Integrations
|
## Observability Integrations
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ title: What is Qdrant?
|
|||||||
weight: 3
|
weight: 3
|
||||||
aliases:
|
aliases:
|
||||||
- overview
|
- overview
|
||||||
|
partition: qdrant
|
||||||
---
|
---
|
||||||
|
|
||||||
# Introduction
|
# Introduction
|
||||||
|
|||||||
@@ -1,16 +1,18 @@
|
|||||||
---
|
---
|
||||||
title: Platforms
|
title: Platforms
|
||||||
weight: 23
|
weight: 23
|
||||||
|
partition: build
|
||||||
---
|
---
|
||||||
|
|
||||||
## Platform Integrations
|
## Platform Integrations
|
||||||
|
|
||||||
| Platform | Description |
|
| Platform | Description |
|
||||||
| --------------------------- | ---------------------------------------------------------------------------------------- |
|
| -------------------------------------------------- | ---------------------------------------------------------------------------------------- |
|
||||||
| [Apify](/documentation/platforms/apify/) | Platform to build web scrapers and automate web browser tasks. |
|
| [Apify](/documentation/platforms/apify/) | Platform to build web scrapers and automate web browser tasks. |
|
||||||
| [Bubble](/documentation/platforms/bubble/) | Development platform for application development with a no-code interface |
|
| [Bubble](/documentation/platforms/bubble/) | Development platform for application development with a no-code interface |
|
||||||
| [BuildShip](/documentation/platforms/buildship/) | Low-code visual builder to create APIs, scheduled jobs, and backend workflows. |
|
| [BuildShip](/documentation/platforms/buildship/) | Low-code visual builder to create APIs, scheduled jobs, and backend workflows. |
|
||||||
| [DocsGPT](/documentation/platforms/docsgpt/) | Tool for ingesting documentation sources and enabling conversations and queries. |
|
| [DocsGPT](/documentation/platforms/docsgpt/) | Tool for ingesting documentation sources and enabling conversations and queries. |
|
||||||
|
| [Kotaemon](/documentation/platforms/kotaemon/) | Open-source & customizable RAG UI for chatting with your documents. |
|
||||||
| [Make](/documentation/platforms/make/) | Cloud platform to build low-code workflows by integrating various software applications. |
|
| [Make](/documentation/platforms/make/) | Cloud platform to build low-code workflows by integrating various software applications. |
|
||||||
| [N8N](/documentation/platforms/n8n/) | Platform for node-based, low-code workflow automation. |
|
| [N8N](/documentation/platforms/n8n/) | Platform for node-based, low-code workflow automation. |
|
||||||
| [Pipedream](/documentation/platforms/pipedream/) | Platform for connecting apps and developing event-driven automation. |
|
| [Pipedream](/documentation/platforms/pipedream/) | Platform for connecting apps and developing event-driven automation. |
|
||||||
|
|||||||
@@ -0,0 +1,33 @@
|
|||||||
|
---
|
||||||
|
title: Kotaemon
|
||||||
|
---
|
||||||
|
|
||||||
|
# Kotaemon
|
||||||
|
|
||||||
|
[Kotaemon](https://github.com/Cinnamon/kotaemon) is open-source clean & customizable RAG UI for chatting with your documents. Built with both end users and developers in mind.
|
||||||
|
|
||||||
|
Qdrant is supported as a vectorstore in Kotaemon for ingesting and retrieving documents.
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
- Refer to [Getting started](https://cinnamon.github.io/kotaemon/) guide to set up Kotaemon.
|
||||||
|
|
||||||
|
- To configure Kotaemon to use Qdrant as the vector store, update the `flowsettings.py` as follows.
|
||||||
|
|
||||||
|
```python
|
||||||
|
KH_VECTORSTORE = {
|
||||||
|
"__type__": "kotaemon.storages.QdrantVectorStore",
|
||||||
|
"url": "https://xyz-example.eu-central.aws.cloud.qdrant.io:6333",
|
||||||
|
"api_key": "<provide-your-own-key>'",
|
||||||
|
"client_kwargs": {} # Additional options to pass to qdrant_client.QdrantClient
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
- Restart Kotaemon for the changes to take effect.
|
||||||
|
|
||||||
|
The reference for all the Qdrant client options can be found [here](https://python-client.qdrant.tech/qdrant_client.qdrant_client)
|
||||||
|
|
||||||
|
## Further reading
|
||||||
|
|
||||||
|
- [Kotaemon Documentation](https://cinnamon.github.io/kotaemon/)
|
||||||
|
- [Source](https://github.com/Cinnamon/kotaemon)
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
---
|
---
|
||||||
title: Private Cloud
|
title: Private Cloud
|
||||||
weight: 14
|
weight: 14
|
||||||
|
partition: cloud
|
||||||
---
|
---
|
||||||
|
|
||||||
# Qdrant Private Cloud
|
# Qdrant Private Cloud
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
---
|
---
|
||||||
title: Qdrant Cloud API
|
title: Qdrant Cloud API
|
||||||
weight: 15
|
weight: 26
|
||||||
|
partition: cloud
|
||||||
---
|
---
|
||||||
# Qdrant Cloud API
|
# Qdrant Cloud API
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
---
|
---
|
||||||
title: Cloud Quickstart
|
title: Cloud Quickstart
|
||||||
weight: 4
|
weight: 4
|
||||||
|
partition: qdrant
|
||||||
aliases:
|
aliases:
|
||||||
- quickstart-cloud
|
|
||||||
- ../cloud-quick-start
|
- ../cloud-quick-start
|
||||||
- cloud-quick-start
|
- cloud-quick-start
|
||||||
- cloud-quickstart
|
- cloud-quickstart
|
||||||
@@ -124,3 +124,4 @@ When ready, use the Console and our complete REST API to try other operations.
|
|||||||
|
|
||||||
Now that you have a Qdrant Cloud cluster up and running, you should [test remote access](/documentation/cloud/authentication/#test-cluster-access) with a Qdrant Client.
|
Now that you have a Qdrant Cloud cluster up and running, you should [test remote access](/documentation/cloud/authentication/#test-cluster-access) with a Qdrant Client.
|
||||||
|
|
||||||
|
For more about Qdrant Cloud, check our [dedicated documentation](/documentation/cloud-intro/).
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
---
|
---
|
||||||
title: Local Quickstart
|
title: Local Quickstart
|
||||||
weight: 5
|
weight: 5
|
||||||
|
partition: qdrant
|
||||||
aliases:
|
aliases:
|
||||||
- quick_start
|
- quick_start
|
||||||
- quick-start
|
- quick-start
|
||||||
- quickstart
|
|
||||||
---
|
---
|
||||||
# How to Get Started with Qdrant Locally
|
# How to Get Started with Qdrant Locally
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
---
|
---
|
||||||
title: Release Notes
|
title: Release Notes
|
||||||
weight: 30
|
weight: 32
|
||||||
|
partition: qdrant
|
||||||
type: external-link
|
type: external-link
|
||||||
external_url: https://github.com/qdrant/qdrant/releases
|
external_url: https://github.com/qdrant/qdrant/releases
|
||||||
sitemapExclude: True
|
sitemapExclude: True
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
---
|
---
|
||||||
title: Send Data to Qdrant
|
title: Send Data to Qdrant
|
||||||
weight: 25
|
weight: 25
|
||||||
|
partition: build
|
||||||
---
|
---
|
||||||
|
|
||||||
## How to Send Your Data to a Qdrant Cluster
|
## How to Send Your Data to a Qdrant Cluster
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
---
|
---
|
||||||
title: Support
|
title: Support
|
||||||
weight: 16
|
weight: 35
|
||||||
|
partition: cloud
|
||||||
aliases:
|
aliases:
|
||||||
- /documentation/cloud/support/
|
- /documentation/cloud/support/
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ is_empty: false
|
|||||||
aliases:
|
aliases:
|
||||||
- how-to
|
- how-to
|
||||||
- tutorials
|
- tutorials
|
||||||
|
partition: qdrant
|
||||||
---
|
---
|
||||||
|
|
||||||
# Tutorials
|
# Tutorials
|
||||||
|
|||||||
@@ -159,7 +159,7 @@ Image.open(client.search(
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
<h3 style="font-size: 1.25em;">Image-to-Text</h3>
|
### Image-to-Text
|
||||||
Now, let's do a reverse search with an image:
|
Now, let's do a reverse search with an image:
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
---
|
||||||
|
title: Was this page useful?
|
||||||
|
positiveButton:
|
||||||
|
text: "Yes"
|
||||||
|
url: /#
|
||||||
|
icon:
|
||||||
|
src: /icons/outline/thumb-up.svg
|
||||||
|
alt: Thumb up icon
|
||||||
|
negativeButton:
|
||||||
|
text: "No"
|
||||||
|
url: /#
|
||||||
|
icon:
|
||||||
|
src: /icons/outline/thumb-down.svg
|
||||||
|
alt: Thumb down icon
|
||||||
|
sitemapExclude: true
|
||||||
|
---
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
---
|
||||||
|
logIn:
|
||||||
|
text: Log in
|
||||||
|
url: https://cloud.qdrant.io/
|
||||||
|
startFree:
|
||||||
|
text: Start Free
|
||||||
|
url: https://cloud.qdrant.io/
|
||||||
|
logoLink: /
|
||||||
|
menuItems:
|
||||||
|
- id: menu-0
|
||||||
|
name: Qdrant
|
||||||
|
url: /documentation/
|
||||||
|
- id: menu-1
|
||||||
|
name: Cloud
|
||||||
|
url: /documentation/cloud-intro/
|
||||||
|
- id: menu-2
|
||||||
|
name: Build
|
||||||
|
url: /documentation/build/
|
||||||
|
# - id: menu-3
|
||||||
|
# name: Learn
|
||||||
|
# url: /documentation/learn/
|
||||||
|
- id: menu-4
|
||||||
|
name: API Reference
|
||||||
|
url: https://api.qdrant.tech/api-reference
|
||||||
|
external: true
|
||||||
|
sitemapExclude: true
|
||||||
|
---
|
||||||
@@ -81,7 +81,7 @@ menuItems:
|
|||||||
url: https://qdrant.to/roadmap
|
url: https://qdrant.to/roadmap
|
||||||
- id: 5
|
- id: 5
|
||||||
name: Changelog
|
name: Changelog
|
||||||
url: https://github.com/qdrant/qdrant/releases
|
url: https://github.com/qdrant/qdrant/releases
|
||||||
- id: 6
|
- id: 6
|
||||||
name: Status Page
|
name: Status Page
|
||||||
url: https://status.qdrant.io/
|
url: https://status.qdrant.io/
|
||||||
@@ -133,5 +133,9 @@ bages:
|
|||||||
- src: /img/gdpr-badge.png
|
- src: /img/gdpr-badge.png
|
||||||
alt: "heyData GDPR"
|
alt: "heyData GDPR"
|
||||||
url: https://heydata.eu/
|
url: https://heydata.eu/
|
||||||
|
question: Ready to get started with Qdrant?
|
||||||
|
questionButton:
|
||||||
|
text: Start Free
|
||||||
|
url: https://qdrant.to/cloud/
|
||||||
sitemapExclude: true
|
sitemapExclude: true
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
stats:
|
stats:
|
||||||
githubStars: 20.4k
|
githubStars: 20.5k
|
||||||
discordMembers: 6.9k
|
discordMembers: 6.9k
|
||||||
twitterFollowers: 7.5k
|
twitterFollowers: 7.5k
|
||||||
---
|
---
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
title: Why join Qdrant for Startups?
|
title: Why join Qdrant for Startups?
|
||||||
mainCard:
|
mainCard:
|
||||||
title: Discount for Qdrant Cloud
|
title: Discount for Qdrant Cloud
|
||||||
description: Enjoy a discount on <a href="https://cloud.qdrant.io/" target="_blank">Qdrant Cloud</a> for the first year.
|
description: Enjoy a 20% discount on <a href="https://cloud.qdrant.io/" target="_blank">Qdrant Cloud</a> for the first year.
|
||||||
image:
|
image:
|
||||||
src: /img/qdrant-for-startups-benefits/card1.png
|
src: /img/qdrant-for-startups-benefits/card1.png
|
||||||
alt: Qdrant Discount for Startups
|
alt: Qdrant Discount for Startups
|
||||||
|
|||||||
@@ -1,5 +1,17 @@
|
|||||||
---
|
---
|
||||||
title: Meet our Stars
|
title: Meet our Stars
|
||||||
|
mainCards:
|
||||||
|
- id: 0
|
||||||
|
headTitle: Distinguished Ambassador
|
||||||
|
headIcon:
|
||||||
|
src: /icons/fill/sparks-purple.svg
|
||||||
|
alt: Sparks
|
||||||
|
image:
|
||||||
|
src: /img/stars/m-k-pavan-kumar.jpg
|
||||||
|
alt: M K Pavan Kumar Photo
|
||||||
|
name: M K Pavan Kumar
|
||||||
|
position: Data Scientist and Lead GenAI
|
||||||
|
description: Kameshwara Pavan Kumar Mantha is a seasoned technology expert with 14 years of extensive experience in full stack development, cloud solutions, and artificial intelligence.<br><br>Specializing in Generative AI and Large Language Models, Pavan has established himself as a leader in these cutting-edge domains.
|
||||||
cards:
|
cards:
|
||||||
- id: 0
|
- id: 0
|
||||||
image:
|
image:
|
||||||
@@ -30,84 +42,76 @@ cards:
|
|||||||
position: Founder of SciPhi
|
position: Founder of SciPhi
|
||||||
description: Physics PhD, Quant @ Citadel and Founder at SciPhi
|
description: Physics PhD, Quant @ Citadel and Founder at SciPhi
|
||||||
- id: 4
|
- id: 4
|
||||||
image:
|
|
||||||
src: /img/stars/m-k-pavan-kumar.jpg
|
|
||||||
alt: M K Pavan Kumar Photo
|
|
||||||
name: M K Pavan Kumar
|
|
||||||
position: Data Scientist and Lead GenAI
|
|
||||||
description: A seasoned technology expert with 14 years of experience in full stack development, cloud solutions, & artificial intelligence
|
|
||||||
distinguished: true
|
|
||||||
- id: 5
|
|
||||||
image:
|
image:
|
||||||
src: /img/stars/niranjan-akella.jpg
|
src: /img/stars/niranjan-akella.jpg
|
||||||
alt: Niranjan Akella Photo
|
alt: Niranjan Akella Photo
|
||||||
name: Niranjan Akella
|
name: Niranjan Akella
|
||||||
position: Scientist by Heart & AI Engineer
|
position: Scientist by Heart & AI Engineer
|
||||||
description: I build & deploy AI models like LLMs, Diffusion Models & Vision Models at scale
|
description: I build & deploy AI models like LLMs, Diffusion Models & Vision Models at scale
|
||||||
- id: 6
|
- id: 5
|
||||||
image:
|
image:
|
||||||
src: /img/stars/bojan-jakimovski.jpg
|
src: /img/stars/bojan-jakimovski.jpg
|
||||||
alt: Bojan Jakimovski Photo
|
alt: Bojan Jakimovski Photo
|
||||||
name: Bojan Jakimovski
|
name: Bojan Jakimovski
|
||||||
position: Machine Learning Engineer
|
position: Machine Learning Engineer
|
||||||
description: I'm really excited to show the power of the Qdrant as vector database
|
description: I'm really excited to show the power of the Qdrant as vector database
|
||||||
- id: 7
|
- id: 6
|
||||||
image:
|
image:
|
||||||
src: /img/stars/haydar-kulekci.jpg
|
src: /img/stars/haydar-kulekci.jpg
|
||||||
alt: Haydar KULEKCI Photo
|
alt: Haydar KULEKCI Photo
|
||||||
name: Haydar KULEKCI
|
name: Haydar KULEKCI
|
||||||
position: Senior Software Engineer
|
position: Senior Software Engineer
|
||||||
description: I am a senior software engineer and consultant with over 10 years of experience in data management, processing, and software development.
|
description: I am a senior software engineer and consultant with over 10 years of experience in data management, processing, and software development.
|
||||||
- id: 8
|
- id: 7
|
||||||
image:
|
image:
|
||||||
src: /img/stars/nicola-procopio.jpg
|
src: /img/stars/nicola-procopio.jpg
|
||||||
alt: Nicola Procopio Photo
|
alt: Nicola Procopio Photo
|
||||||
name: Nicola Procopio
|
name: Nicola Procopio
|
||||||
position: Senior Data Scientist @ Fincons Group
|
position: Senior Data Scientist @ Fincons Group
|
||||||
description: Nicola, a data scientist and open-source enthusiast since 2009, has used Qdrant since 2023. He developed fastembed for Haystack, vector search for Cheshire Cat A.I., and shares his expertise through articles, tutorials, and talks.
|
description: Nicola, a data scientist and open-source enthusiast since 2009, has used Qdrant since 2023. He developed fastembed for Haystack, vector search for Cheshire Cat A.I., and shares his expertise through articles, tutorials, and talks.
|
||||||
- id: 9
|
- id: 8
|
||||||
image:
|
image:
|
||||||
src: /img/stars/eduardo-vasquez.jpg
|
src: /img/stars/eduardo-vasquez.jpg
|
||||||
alt: Eduardo Vasquez Photo
|
alt: Eduardo Vasquez Photo
|
||||||
name: Eduardo Vasquez
|
name: Eduardo Vasquez
|
||||||
position: Data Scientist and MLOps Engineer
|
position: Data Scientist and MLOps Engineer
|
||||||
description: I am a Data Scientist and MLOps Engineer exploring generative AI and LLMs, creating YouTube content on RAG workflows and fine-tuning LLMs. I hold an MSc in Statistics and Data Science.
|
description: I am a Data Scientist and MLOps Engineer exploring generative AI and LLMs, creating YouTube content on RAG workflows and fine-tuning LLMs. I hold an MSc in Statistics and Data Science.
|
||||||
- id: 10
|
- id: 9
|
||||||
image:
|
image:
|
||||||
src: /img/stars/benito-martin.jpg
|
src: /img/stars/benito-martin.jpg
|
||||||
alt: Benito Martin Photo
|
alt: Benito Martin Photo
|
||||||
name: Benito Martin
|
name: Benito Martin
|
||||||
position: Independent Consultant | Data Science, ML and AI Project Implementation | Teacher and Course Content Developer
|
position: Independent Consultant | Data Science, ML and AI Project Implementation | Teacher and Course Content Developer
|
||||||
description: Over the past year, Benito developed MLOps and LLM projects. Based in Switzerland, Benito continues to advance his skills.
|
description: Over the past year, Benito developed MLOps and LLM projects. Based in Switzerland, Benito continues to advance his skills.
|
||||||
- id: 11
|
- id: 10
|
||||||
image:
|
image:
|
||||||
src: /img/stars/nirant-kasliwal.jpg
|
src: /img/stars/nirant-kasliwal.jpg
|
||||||
alt: Nirant Kasliwal Photo
|
alt: Nirant Kasliwal Photo
|
||||||
name: Nirant Kasliwal
|
name: Nirant Kasliwal
|
||||||
position: FastEmbed Creator
|
position: FastEmbed Creator
|
||||||
description: I'm a Machine Learning consultant specializing in NLP and Vision systems for early-stage products. I've authored an NLP book recommended by Dr. Andrew Ng to Stanford's CS230 students and maintain FastEmbed at Qdrant for speed.
|
description: I'm a Machine Learning consultant specializing in NLP and Vision systems for early-stage products. I've authored an NLP book recommended by Dr. Andrew Ng to Stanford's CS230 students and maintain FastEmbed at Qdrant for speed.
|
||||||
- id: 12
|
- id: 11
|
||||||
image:
|
image:
|
||||||
src: /img/stars/denzell-ford.jpg
|
src: /img/stars/denzell-ford.jpg
|
||||||
alt: Denzell Ford Photo
|
alt: Denzell Ford Photo
|
||||||
name: Denzell Ford
|
name: Denzell Ford
|
||||||
position: Founder at Trieve, has been using Qdrant since late 2022.
|
position: Founder at Trieve, has been using Qdrant since late 2022.
|
||||||
description: Denzell Ford, the founder of Trieve, has been using Qdrant since late 2022. He's passionate about helping people in the community.
|
description: Denzell Ford, the founder of Trieve, has been using Qdrant since late 2022. He's passionate about helping people in the community.
|
||||||
- id: 13
|
- id: 12
|
||||||
image:
|
image:
|
||||||
src: /img/stars/pavan-nagula.jpg
|
src: /img/stars/pavan-nagula.jpg
|
||||||
alt: Pavan Nagula Photo
|
alt: Pavan Nagula Photo
|
||||||
name: Pavan Nagula
|
name: Pavan Nagula
|
||||||
position: Data Scientist | Machine Learning and Generative AI
|
position: Data Scientist | Machine Learning and Generative AI
|
||||||
description: I'm Pavan, a data scientist specializing in AI, ML, and big data analytics. I love experimenting with new technologies in the AI and ML space, and Qdrant is a place where I've seen such innovative implementations recently.
|
description: I'm Pavan, a data scientist specializing in AI, ML, and big data analytics. I love experimenting with new technologies in the AI and ML space, and Qdrant is a place where I've seen such innovative implementations recently.
|
||||||
- id: 14
|
- id: 13
|
||||||
image:
|
image:
|
||||||
src: /img/stars/guohao-li.jpg
|
src: /img/stars/guohao-li.jpg
|
||||||
alt: Guohao Li Photo
|
alt: Guohao Li Photo
|
||||||
name: Guohao Li
|
name: Guohao Li
|
||||||
position: Founder of Eigent.AI
|
position: Founder of Eigent.AI
|
||||||
description: Guohao Li the founder of Eigent.AI, an artificial intelligence researcher and an open-source contributor working on building intelligent agents that can perceive, learn, communicate, reason, and act. He is the core lead of the open source projects CAMEL-AI.org.
|
description: Guohao Li the founder of Eigent.AI, an artificial intelligence researcher and an open-source contributor working on building intelligent agents that can perceive, learn, communicate, reason, and act. He is the core lead of the open source projects CAMEL-AI.org.
|
||||||
- id: 15
|
- id: 14
|
||||||
image:
|
image:
|
||||||
src: /img/stars/sahin-utar.jpg
|
src: /img/stars/sahin-utar.jpg
|
||||||
alt: Şahin Utar Photo
|
alt: Şahin Utar Photo
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
"anchor-js": "^5.0.0",
|
"anchor-js": "^5.0.0",
|
||||||
"bootstrap": "^5.3.3",
|
"bootstrap": "^5.3.3",
|
||||||
"clipboard": "^2.0.11",
|
"clipboard": "^2.0.11",
|
||||||
"qdrant-page-search": "^1.0.8"
|
"qdrant-page-search": "^1.0.10"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/preset-env": "^7.23.9",
|
"@babel/preset-env": "^7.23.9",
|
||||||
@@ -3173,9 +3173,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/qdrant-page-search": {
|
"node_modules/qdrant-page-search": {
|
||||||
"version": "1.0.9",
|
"version": "1.0.10",
|
||||||
"resolved": "https://registry.npmjs.org/qdrant-page-search/-/qdrant-page-search-1.0.9.tgz",
|
"resolved": "https://registry.npmjs.org/qdrant-page-search/-/qdrant-page-search-1.0.10.tgz",
|
||||||
"integrity": "sha512-297elNEhqo/ETFl4ZdoMWD92l7hSTDYckm6BYk6+iTnC9qECGoM9xnIkzbgCdNtIpfjFi6VfuLXysxzvwQha0A=="
|
"integrity": "sha512-ZNWXClp8EpfVGmI4qgcPFsSbXSAZ4iZx7hU04henwDV9x3OjjpMNY8jAbReK9/EtjraWEwGdRaArhRK0HzC/MQ=="
|
||||||
},
|
},
|
||||||
"node_modules/queue-microtask": {
|
"node_modules/queue-microtask": {
|
||||||
"version": "1.2.3",
|
"version": "1.2.3",
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
"anchor-js": "^5.0.0",
|
"anchor-js": "^5.0.0",
|
||||||
"bootstrap": "^5.3.3",
|
"bootstrap": "^5.3.3",
|
||||||
"clipboard": "^2.0.11",
|
"clipboard": "^2.0.11",
|
||||||
"qdrant-page-search": "^1.0.8"
|
"qdrant-page-search": "^1.0.10"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/preset-env": "^7.23.9",
|
"@babel/preset-env": "^7.23.9",
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 125 KiB After Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 257 KiB After Width: | Height: | Size: 59 KiB |
|
Before Width: | Height: | Size: 129 KiB After Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 109 KiB After Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 119 KiB After Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 176 KiB After Width: | Height: | Size: 78 KiB |
@@ -22,6 +22,19 @@ html {
|
|||||||
}
|
}
|
||||||
scrollbar-width: thin;
|
scrollbar-width: thin;
|
||||||
scrollbar-color: $neutral-50 $neutral-20;
|
scrollbar-color: $neutral-50 $neutral-20;
|
||||||
|
|
||||||
|
&[data-theme="light"] {
|
||||||
|
&::-webkit-scrollbar-thumb {
|
||||||
|
background: $neutral-80;
|
||||||
|
}
|
||||||
|
&::-webkit-scrollbar-track {
|
||||||
|
background: $neutral-94;
|
||||||
|
}
|
||||||
|
&::-webkit-scrollbar-thumb:hover {
|
||||||
|
background: $neutral-90;
|
||||||
|
}
|
||||||
|
scrollbar-color: $neutral-80 $neutral-94;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.scrolled {
|
.scrolled {
|
||||||
|
|||||||
@@ -1,8 +1,15 @@
|
|||||||
@import 'base';
|
@import 'base';
|
||||||
@import 'partials/theme-switch';
|
@import 'partials/theme-switch';
|
||||||
@import 'partials/docs-menu';
|
@import 'partials/documentation/documentation-menu';
|
||||||
@import 'partials/documentation';
|
@import 'partials/documentation/docs-card';
|
||||||
@import 'partials/documentation-article';
|
@import 'partials/documentation/documentation';
|
||||||
|
@import 'partials/documentation/documentation-article';
|
||||||
|
@import 'partials/documentation/docs';
|
||||||
|
@import 'partials/documentation/docs-header';
|
||||||
|
@import 'partials/documentation/docs-breadcrumbs';
|
||||||
|
@import 'partials/documentation/docs-feedback';
|
||||||
|
@import 'partials/documentation/docs-articles-posts';
|
||||||
@import 'partials/table-of-contents';
|
@import 'partials/table-of-contents';
|
||||||
@import 'partials/feedback';
|
@import 'partials/feedback';
|
||||||
|
@import 'partials/documentation/docs-footer';
|
||||||
@import 'search/dark-theme';
|
@import 'search/dark-theme';
|
||||||
|
|||||||
@@ -106,3 +106,4 @@
|
|||||||
@import 'partials/rag-evaluation-guide-kubernetes-clusters';
|
@import 'partials/rag-evaluation-guide-kubernetes-clusters';
|
||||||
@import 'partials/rag-evaluation-guide-features';
|
@import 'partials/rag-evaluation-guide-features';
|
||||||
@import 'partials/progress-bar';
|
@import 'partials/progress-bar';
|
||||||
|
@import 'partials/table-of-contents';
|
||||||
|
|||||||
@@ -1,29 +0,0 @@
|
|||||||
@use '../helpers/functions' as *;
|
|
||||||
|
|
||||||
.documentation {
|
|
||||||
padding-top: $spacer;
|
|
||||||
background-color: $neutral-10;
|
|
||||||
color: $neutral-70;
|
|
||||||
|
|
||||||
&__container {
|
|
||||||
@extend .container;
|
|
||||||
max-width: pxToRem(1440);
|
|
||||||
padding: 0 $spacer;
|
|
||||||
}
|
|
||||||
|
|
||||||
@include media-breakpoint-up(xl) {
|
|
||||||
padding-top: $spacer * 4;
|
|
||||||
padding-bottom: $spacer * 7.5;
|
|
||||||
|
|
||||||
&__container {
|
|
||||||
padding: 0 $spacer * 2.5;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[data-theme='light'] {
|
|
||||||
.documentation {
|
|
||||||
background-color: $neutral-98;
|
|
||||||
color: $neutral-30;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -6,7 +6,8 @@
|
|||||||
color: $neutral-98;
|
color: $neutral-98;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
|
||||||
&:hover {
|
&:hover,
|
||||||
|
&.active {
|
||||||
color: $primary-50;
|
color: $primary-50;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,62 +34,6 @@
|
|||||||
padding-bottom: $spacer * 5;
|
padding-bottom: $spacer * 5;
|
||||||
order: 3;
|
order: 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
&__nav {
|
|
||||||
a {
|
|
||||||
font-size: pxToRem(14);
|
|
||||||
line-height: pxToRem(21);
|
|
||||||
color: $neutral-20;
|
|
||||||
}
|
|
||||||
|
|
||||||
&-title {
|
|
||||||
display: none;
|
|
||||||
margin-bottom: $spacer * 0.5;
|
|
||||||
padding: 0 $spacer * 0.5 $spacer * 0.5;
|
|
||||||
font-size: $spacer;
|
|
||||||
line-height: $spacer * 1.5;
|
|
||||||
color: $neutral-20;
|
|
||||||
}
|
|
||||||
|
|
||||||
nav {
|
|
||||||
display: none;
|
|
||||||
margin-bottom: $spacer;
|
|
||||||
|
|
||||||
ul {
|
|
||||||
padding-left: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
li {
|
|
||||||
list-style: none;
|
|
||||||
|
|
||||||
a {
|
|
||||||
display: block;
|
|
||||||
margin-bottom: math.div($spacer, 4);
|
|
||||||
padding: math.div($spacer, 4) $spacer * 0.5;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
&-links {
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
gap: pxToRem(12);
|
|
||||||
padding-bottom: $spacer * 1.5;
|
|
||||||
border-bottom: pxToRem(1) solid $neutral-80;
|
|
||||||
|
|
||||||
a {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
gap: $spacer * 0.5;
|
|
||||||
padding-left: $spacer * 0.5;
|
|
||||||
|
|
||||||
svg {
|
|
||||||
height: $spacer;
|
|
||||||
width: $spacer;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (min-width: 1200px) {
|
@media (min-width: 1200px) {
|
||||||
@@ -123,30 +67,6 @@
|
|||||||
&__content {
|
&__content {
|
||||||
width: calc(100% - $spacer * 19);
|
width: calc(100% - $spacer * 19);
|
||||||
}
|
}
|
||||||
|
|
||||||
&__nav {
|
|
||||||
position: sticky;
|
|
||||||
top: $spacer * 4;
|
|
||||||
right: 0;
|
|
||||||
width: $spacer * 15;
|
|
||||||
padding-top: $spacer;
|
|
||||||
|
|
||||||
&-title {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
nav {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
&-links {
|
|
||||||
flex-direction: column;
|
|
||||||
padding-top: $spacer * 1.5;
|
|
||||||
padding-bottom: 0;
|
|
||||||
border-top: pxToRem(1) solid $neutral-80;
|
|
||||||
border-bottom: none;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,11 +16,16 @@
|
|||||||
z-index: 1;
|
z-index: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&__cards {
|
||||||
|
row-gap: pxToRem(30);
|
||||||
|
}
|
||||||
|
|
||||||
&__card {
|
&__card {
|
||||||
position: relative;
|
position: relative;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
max-width: pxToRem(255);
|
max-width: pxToRem(255);
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
min-height: pxToRem(375);
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
padding: $spacer * 1.5;
|
padding: $spacer * 1.5;
|
||||||
border-radius: pxToRem(12);
|
border-radius: pxToRem(12);
|
||||||
@@ -52,13 +57,6 @@
|
|||||||
color: $neutral-90;
|
color: $neutral-90;
|
||||||
}
|
}
|
||||||
|
|
||||||
&-distinguished {
|
|
||||||
margin-bottom: $spacer * 0.5;
|
|
||||||
font-size: pxToRem(12);
|
|
||||||
line-height: pxToRem(21);
|
|
||||||
color: $secondary-violet-70;
|
|
||||||
}
|
|
||||||
|
|
||||||
&-description {
|
&-description {
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
font-size: pxToRem(14);
|
font-size: pxToRem(14);
|
||||||
@@ -78,6 +76,61 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&__main-card {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column-reverse;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
max-width: none;
|
||||||
|
min-height: auto;
|
||||||
|
gap: $spacer * 1.5;
|
||||||
|
|
||||||
|
&-content {
|
||||||
|
max-width: pxToRem(431);
|
||||||
|
}
|
||||||
|
|
||||||
|
&-head {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
gap: $spacer * 0.5;
|
||||||
|
margin-bottom: $spacer;
|
||||||
|
font-size: pxToRem(14);
|
||||||
|
line-height: pxToRem(21);
|
||||||
|
color: $secondary-violet-70;
|
||||||
|
|
||||||
|
img {
|
||||||
|
width: $spacer;
|
||||||
|
height: $spacer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&-title {
|
||||||
|
margin-bottom: $spacer * 0.5;
|
||||||
|
font-size: $spacer * 2;
|
||||||
|
line-height: $spacer * 2.5;
|
||||||
|
color: $neutral-98;
|
||||||
|
}
|
||||||
|
|
||||||
|
&-subtitle {
|
||||||
|
color: $neutral-90;
|
||||||
|
}
|
||||||
|
|
||||||
|
&-description {
|
||||||
|
margin-bottom: 0;
|
||||||
|
font-size: pxToRem(14);
|
||||||
|
line-height: pxToRem(21);
|
||||||
|
color: $neutral-60;
|
||||||
|
}
|
||||||
|
|
||||||
|
&-image {
|
||||||
|
position: relative;
|
||||||
|
width: 100%;
|
||||||
|
max-width: pxToRem(431);
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
&__overlay {
|
&__overlay {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
right: 0;
|
right: 0;
|
||||||
@@ -95,30 +148,23 @@
|
|||||||
|
|
||||||
&__title {
|
&__title {
|
||||||
margin-bottom: $spacer * 5;
|
margin-bottom: $spacer * 5;
|
||||||
font-size: $spacer * 4;
|
font-size: $spacer * 3.5;
|
||||||
line-height: pxToRem(67);
|
line-height: pxToRem(67);
|
||||||
}
|
}
|
||||||
|
|
||||||
&__cards > div {
|
&__cards {
|
||||||
&:nth-of-type(1),
|
row-gap: $spacer * 2.5;
|
||||||
&:nth-of-type(3) {
|
|
||||||
.stars-list__card {
|
|
||||||
margin: 0 0 0 auto;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
&:nth-of-type(2),
|
|
||||||
&:nth-of-type(4) {
|
|
||||||
.stars-list__card {
|
|
||||||
margin: 0 auto 0 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@include media-breakpoint-up(xl) {
|
&__main-card {
|
||||||
&__card {
|
flex-direction: row;
|
||||||
margin: 0 auto !important;
|
align-items: flex-start;
|
||||||
|
padding: $spacer * 3.5 $spacer * 3;
|
||||||
|
text-align: left;
|
||||||
|
|
||||||
|
&-head {
|
||||||
|
justify-content: start;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,20 +1,28 @@
|
|||||||
@use '../helpers/functions' as *;
|
@use '../helpers/functions' as *;
|
||||||
|
@use 'sass:math';
|
||||||
|
|
||||||
.table-of-contents {
|
.table-of-contents {
|
||||||
background-color: $neutral-10;
|
scrollbar-width: none;
|
||||||
margin-bottom: -1px;
|
|
||||||
|
&__head {
|
||||||
|
display: none;
|
||||||
|
margin-bottom: 0;
|
||||||
|
padding: 0 math.div($spacer, 2) $spacer;
|
||||||
|
color: $neutral-20;
|
||||||
|
}
|
||||||
|
|
||||||
&__title {
|
&__title {
|
||||||
display: none;
|
display: none;
|
||||||
color: $neutral-98;
|
color: $neutral-30;
|
||||||
margin-bottom: $spacer;
|
margin-bottom: math.div($spacer, 4);
|
||||||
font-size: map-get($font-sizes-text, 'md');
|
padding: math.div($spacer, 4) math.div($spacer, 2);
|
||||||
line-height: pxToRem(24);
|
font-size: pxToRem(14);
|
||||||
|
line-height: pxToRem(21);
|
||||||
}
|
}
|
||||||
|
|
||||||
nav {
|
nav {
|
||||||
display: none;
|
display: none;
|
||||||
padding-bottom: pxToRem(12);
|
padding-bottom: $spacer;
|
||||||
|
|
||||||
ul {
|
ul {
|
||||||
padding-left: 0;
|
padding-left: 0;
|
||||||
@@ -27,15 +35,26 @@
|
|||||||
|
|
||||||
a {
|
a {
|
||||||
display: block;
|
display: block;
|
||||||
margin-bottom: pxToRem(12);
|
padding: math.div($spacer, 4) math.div($spacer, 2);
|
||||||
color: $neutral-70;
|
color: $neutral-30;
|
||||||
|
font-weight: 400;
|
||||||
|
font-size: pxToRem(14);
|
||||||
|
line-height: pxToRem(21);
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
|
transition: all 0.3s;
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
color: $primary-50;
|
color: $primary-50;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&.active {
|
||||||
|
font-weight: 600;
|
||||||
|
background-color: $neutral-90;
|
||||||
|
color: $neutral-30;
|
||||||
|
border-radius: $spacer * 0.5;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
& > ul > li {
|
& > ul > li {
|
||||||
@@ -45,8 +64,8 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
&__external-links {
|
&__external-links {
|
||||||
border-top: 1px solid $neutral-50;
|
border-top: 1px solid $neutral-90;
|
||||||
border-bottom: 1px solid $neutral-50;
|
border-bottom: 1px solid $neutral-90;
|
||||||
list-style: none;
|
list-style: none;
|
||||||
padding: $spacer * 1.5 0;
|
padding: $spacer * 1.5 0;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
@@ -54,6 +73,8 @@
|
|||||||
|
|
||||||
&__link {
|
&__link {
|
||||||
margin-bottom: pxToRem(12);
|
margin-bottom: pxToRem(12);
|
||||||
|
font-size: pxToRem(14);
|
||||||
|
line-height: pxToRem(21);
|
||||||
|
|
||||||
&:last-of-type {
|
&:last-of-type {
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
@@ -63,8 +84,16 @@
|
|||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
gap: calc($spacer / 2);
|
gap: calc($spacer / 2);
|
||||||
|
padding: 0 math.div($spacer, 2);
|
||||||
|
color: $neutral-30;
|
||||||
|
font-weight: 500;
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
text-decoration: underline;
|
color: $primary-50;
|
||||||
|
text-decoration: none;
|
||||||
|
svg path {
|
||||||
|
fill: $primary-50;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -72,36 +101,113 @@
|
|||||||
display: block;
|
display: block;
|
||||||
width: pxToRem(16);
|
width: pxToRem(16);
|
||||||
height: pxToRem(16);
|
height: pxToRem(16);
|
||||||
|
path {
|
||||||
|
fill: $neutral-30;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@include media-breakpoint-up(xl) {
|
@include media-breakpoint-up(xl) {
|
||||||
|
max-height: calc(100vh - 80px);
|
||||||
|
width: pxToRem(232);
|
||||||
|
position: sticky;
|
||||||
|
overflow-x: hidden;
|
||||||
|
overflow-y: auto;
|
||||||
|
top: $spacer * 5;
|
||||||
|
margin-bottom: pxToRem(220);
|
||||||
|
flex-shrink: 0;
|
||||||
|
|
||||||
|
&__external-links {
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
|
||||||
nav,
|
nav,
|
||||||
|
&__head,
|
||||||
&__title {
|
&__title {
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[data-theme='light'] & {
|
[data-theme='dark'] & {
|
||||||
background-color: $neutral-98;
|
&__title,
|
||||||
margin-bottom: $spacer * 2;
|
&__head {
|
||||||
|
color: $neutral-98;
|
||||||
&__title {
|
|
||||||
color: $neutral-30;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
a {
|
a {
|
||||||
color: $neutral-30;
|
color: $neutral-70;
|
||||||
|
transition: all 0.3s;
|
||||||
|
&:hover {
|
||||||
|
color: $neutral-98;
|
||||||
|
}
|
||||||
|
&.active {
|
||||||
|
font-weight: 600;
|
||||||
|
background-color: $neutral-30;
|
||||||
|
color: $neutral-90;
|
||||||
|
border-radius: $spacer * 0.5;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&__external-links {
|
&__external-links {
|
||||||
border-top: 1px solid $neutral-90;
|
border-top: 1px solid $neutral-20;
|
||||||
border-bottom: 1px solid $neutral-90;
|
border-bottom: 1px solid $neutral-20;
|
||||||
}
|
}
|
||||||
|
|
||||||
&__link {
|
&__link {
|
||||||
a {
|
a {
|
||||||
color: $primary-50;
|
color: $neutral-98;
|
||||||
|
transition:
|
||||||
|
color 0.3s,
|
||||||
|
fill 0.25s;
|
||||||
|
svg path {
|
||||||
|
fill: $neutral-98;
|
||||||
|
}
|
||||||
|
&:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
color: $neutral-98;
|
||||||
|
svg path {
|
||||||
|
fill: $neutral-98;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// scoped styles
|
||||||
|
.documentation & {
|
||||||
|
&__external-links {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
@include media-breakpoint-up(xl) {
|
||||||
|
padding: $spacer * 1.5 $spacer $spacer * 1.5 pxToRem(40);
|
||||||
|
&__external-links {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.qdrant-blog-post & {
|
||||||
|
&__external-links {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
column-gap: pxToRem(12);
|
||||||
|
padding-bottom: $spacer * 1.5;
|
||||||
|
}
|
||||||
|
@include media-breakpoint-down(xl) {
|
||||||
|
&__external-links {
|
||||||
|
padding-top: 0;
|
||||||
|
border-top: 0;
|
||||||
|
}
|
||||||
|
&__link {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@include media-breakpoint-up(xl) {
|
||||||
|
width: $spacer * 15;
|
||||||
|
padding-top: $spacer;
|
||||||
|
|
||||||
|
&__external-links {
|
||||||
|
flex-direction: column;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,31 @@
|
|||||||
|
@use '../../helpers/functions' as *;
|
||||||
|
@use 'sass:math';
|
||||||
|
|
||||||
|
.dev-portal-articles-posts {
|
||||||
|
.post {
|
||||||
|
&-preview {
|
||||||
|
padding-bottom: 0;
|
||||||
|
margin-bottom: $spacer;
|
||||||
|
border-radius: $spacer * 0.5;
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
&-title {
|
||||||
|
margin-bottom: math.div($spacer, 4);
|
||||||
|
font-size: pxToRem(18);
|
||||||
|
line-height: pxToRem(27);
|
||||||
|
color: $neutral-98;
|
||||||
|
}
|
||||||
|
|
||||||
|
&-description {
|
||||||
|
margin-bottom: $spacer * 0.5;
|
||||||
|
font-size: pxToRem(14);
|
||||||
|
line-height: pxToRem(21);
|
||||||
|
color: $neutral-70;
|
||||||
|
}
|
||||||
|
|
||||||
|
&-about {
|
||||||
|
color: $neutral-50;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
@use '../../helpers/functions' as *;
|
||||||
|
@use 'sass:math';
|
||||||
|
|
||||||
|
.docs-breadcrumbs {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
align-items: center;
|
||||||
|
gap: pxToRem(10);
|
||||||
|
padding: 0;
|
||||||
|
margin: 0 0 $spacer * 2.5 0;
|
||||||
|
|
||||||
|
&__crumb {
|
||||||
|
list-style: none;
|
||||||
|
text-transform: capitalize;
|
||||||
|
font-size: pxToRem(14);
|
||||||
|
line-height: pxToRem(21);
|
||||||
|
padding: math.div($spacer, 4) 0;
|
||||||
|
font-weight: 400;
|
||||||
|
|
||||||
|
&:last-child {
|
||||||
|
color: $neutral-98;
|
||||||
|
}
|
||||||
|
|
||||||
|
& > a {
|
||||||
|
color: $neutral-50;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&-separator {
|
||||||
|
list-style: none;
|
||||||
|
height: pxToRem(12);
|
||||||
|
width: pxToRem(12);
|
||||||
|
background-image: url("data:image/svg+xml,%3Csvg width='12' height='13' viewBox='0 0 12 13' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4 1.5L9 6.5L4 11.5' stroke='%23576280' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E%0A");
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: center;
|
||||||
|
background-size: cover;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-theme='light'] & {
|
||||||
|
&__crumb {
|
||||||
|
&:last-child {
|
||||||
|
color: $neutral-20;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
@use '../../helpers/functions' as *;
|
||||||
|
|
||||||
|
.docs-feedback {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: $spacer;
|
||||||
|
padding: $spacer * 2.5 0;
|
||||||
|
|
||||||
|
&__title {
|
||||||
|
color: $neutral-98;
|
||||||
|
font-size: pxToRem(18);
|
||||||
|
line-height: pxToRem(27);
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
&__buttons {
|
||||||
|
display: flex;
|
||||||
|
gap: $spacer * 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
&__button {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: $spacer * 0.5;
|
||||||
|
box-shadow: 0 0 0 pxToRem(1) $neutral-30;
|
||||||
|
}
|
||||||
|
|
||||||
|
@include media-breakpoint-up(xl) {
|
||||||
|
justify-content: flex-start;
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-theme='light'] & {
|
||||||
|
&__title {
|
||||||
|
color: $neutral-20;
|
||||||
|
}
|
||||||
|
&__button {
|
||||||
|
img {
|
||||||
|
filter: invert(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,84 @@
|
|||||||
|
@use '../../helpers/functions' as *;
|
||||||
|
|
||||||
|
.docs-footer {
|
||||||
|
&__cta {
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
padding: $spacer * 2.5 0;
|
||||||
|
border-top: 1px solid $neutral-20;
|
||||||
|
border-bottom: 1px solid $neutral-20;
|
||||||
|
color: $neutral-98;
|
||||||
|
|
||||||
|
h4 {
|
||||||
|
margin-bottom: $spacer * 1.5;
|
||||||
|
padding: 0 !important;
|
||||||
|
font-size: pxToRem(20);
|
||||||
|
line-height: pxToRem(30);
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&__bottom {
|
||||||
|
@extend .footer__bottom;
|
||||||
|
}
|
||||||
|
|
||||||
|
&__bottom-content {
|
||||||
|
@extend .footer__bottom-content;
|
||||||
|
|
||||||
|
& span,
|
||||||
|
& a {
|
||||||
|
color: $neutral-70;
|
||||||
|
font-weight: 400;
|
||||||
|
font-size: map-get($font-sizes-text, 's');
|
||||||
|
line-height: pxToRem(21);
|
||||||
|
}
|
||||||
|
|
||||||
|
& a {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&__bottom-links {
|
||||||
|
@extend .footer__bottom-links;
|
||||||
|
}
|
||||||
|
|
||||||
|
@include media-breakpoint-up(xl) {
|
||||||
|
&__bottom {
|
||||||
|
@extend .footer__bottom;
|
||||||
|
}
|
||||||
|
|
||||||
|
&__bottom-content {
|
||||||
|
@extend .footer__bottom-content;
|
||||||
|
}
|
||||||
|
|
||||||
|
&__cta {
|
||||||
|
flex-direction: row;
|
||||||
|
justify-content: space-between;
|
||||||
|
|
||||||
|
h4 {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-theme='light'] & {
|
||||||
|
color: $neutral-30;
|
||||||
|
|
||||||
|
&__bottom-content * {
|
||||||
|
color: $neutral-30;
|
||||||
|
}
|
||||||
|
|
||||||
|
&__cta {
|
||||||
|
border-top-color: $neutral-80;
|
||||||
|
border-bottom-color: $neutral-80;
|
||||||
|
color: $neutral-30;
|
||||||
|
|
||||||
|
h4 {
|
||||||
|
border-color: $neutral-20;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,75 @@
|
|||||||
|
@use '../../helpers/functions' as *;
|
||||||
|
|
||||||
|
.docs-header {
|
||||||
|
position: sticky;
|
||||||
|
top: 0;
|
||||||
|
background: $neutral-10;
|
||||||
|
z-index: 4;
|
||||||
|
|
||||||
|
.logo {
|
||||||
|
width: pxToRem(148);
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-menu {
|
||||||
|
border-bottom: pxToRem(1) solid $neutral-20;
|
||||||
|
|
||||||
|
&__links {
|
||||||
|
margin-right: auto;
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
&__buttons {
|
||||||
|
&-input {
|
||||||
|
width: pxToRem(300);
|
||||||
|
height: pxToRem(35);
|
||||||
|
position: relative;
|
||||||
|
margin-right: $spacer * 1.5;
|
||||||
|
|
||||||
|
svg {
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
left: $spacer;
|
||||||
|
transform: translateY(-50%);
|
||||||
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
height: 100%;
|
||||||
|
padding-left: $spacer * 2.5;
|
||||||
|
color: $neutral-70;
|
||||||
|
text-align: left;
|
||||||
|
font-size: pxToRem(14);
|
||||||
|
line-height: pxToRem(18);
|
||||||
|
|
||||||
|
&:after {
|
||||||
|
content: '';
|
||||||
|
display: block;
|
||||||
|
width: 1rem;
|
||||||
|
height: 1rem;
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
left: $spacer;
|
||||||
|
transform: translateY(-50%);
|
||||||
|
background-image: url("data:image/svg+xml,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg clip-path='url(%23clip0_6269_137)'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M1.8335 6.66665C1.8335 3.99727 3.99745 1.83331 6.66683 1.83331C9.33621 1.83331 11.5002 3.99727 11.5002 6.66665C11.5002 7.99157 10.9671 9.19197 10.1037 10.0651C10.097 10.0711 10.0904 10.0773 10.0839 10.0838C10.0775 10.0902 10.0713 10.0968 10.0653 10.1035C9.19215 10.9669 7.99175 11.5 6.66683 11.5C3.99745 11.5 1.8335 9.33602 1.8335 6.66665ZM10.423 11.1299C9.40815 11.9848 8.09765 12.5 6.66683 12.5C3.44517 12.5 0.833496 9.88831 0.833496 6.66665C0.833496 3.44498 3.44517 0.833313 6.66683 0.833313C9.88849 0.833313 12.5002 3.44498 12.5002 6.66665C12.5002 8.09746 11.985 9.40796 11.1301 10.4228L15.0204 14.3131C15.2156 14.5084 15.2156 14.8249 15.0204 15.0202C14.8251 15.2155 14.5085 15.2155 14.3133 15.0202L10.423 11.1299Z' fill='%238F98B3'/%3E%3C/g%3E%3Cdefs%3E%3CclipPath id='clip0_6269_137'%3E%3Crect width='16' height='16' fill='white'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E%0A");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.menu-mobile {
|
||||||
|
padding-top: pxToRem(12);
|
||||||
|
}
|
||||||
|
|
||||||
|
@include media-breakpoint-up(xl) {
|
||||||
|
.main-menu {
|
||||||
|
height: $spacer * 5;
|
||||||
|
padding: pxToRem(22) $spacer * 1.5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@include media-breakpoint-up(xl) {
|
||||||
|
.scrolled .main-menu {
|
||||||
|
padding: $spacer * 2 $spacer * 1.5 $spacer * 0.5;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,289 @@
|
|||||||
|
@use '../../helpers/functions' as *;
|
||||||
|
@use 'sass:math';
|
||||||
|
|
||||||
|
.docs {
|
||||||
|
&-core {
|
||||||
|
h2 {
|
||||||
|
padding-top: 0;
|
||||||
|
margin-bottom: $spacer * 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
margin-bottom: $spacer * 1.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.button:hover {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
section {
|
||||||
|
margin-bottom: $spacer * 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
&__overlay {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
position: absolute;
|
||||||
|
overflow: hidden;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
|
||||||
|
&:before,
|
||||||
|
&:after {
|
||||||
|
content: '';
|
||||||
|
display: block;
|
||||||
|
position: absolute;
|
||||||
|
width: pxToRem(294);
|
||||||
|
height: pxToRem(240);
|
||||||
|
background-position: bottom;
|
||||||
|
background-size: cover;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:before {
|
||||||
|
left: 0;
|
||||||
|
bottom: 0;
|
||||||
|
background-image: url('/img/blurred/blurred-light-17.svg');
|
||||||
|
}
|
||||||
|
|
||||||
|
&:after {
|
||||||
|
top: 0;
|
||||||
|
right: 0;
|
||||||
|
background-image: url('/img/blurred/blurred-light-18.svg');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&__hero {
|
||||||
|
width: 100%;
|
||||||
|
padding: $spacer * 1.5 $spacer * 1.5 $spacer * 2;
|
||||||
|
background: linear-gradient(180deg, $neutral-20 0%, rgba(14, 20, 36, 0.1) 100%);
|
||||||
|
text-align: center;
|
||||||
|
border: pxToRem(1) solid $neutral-20;
|
||||||
|
border-radius: pxToRem(12);
|
||||||
|
|
||||||
|
&-title {
|
||||||
|
padding-top: 0 !important;
|
||||||
|
margin-bottom: $spacer * 0.5 !important;
|
||||||
|
font-size: pxToRem(32); // take from variables
|
||||||
|
color: $neutral-98;
|
||||||
|
line-height: pxToRem(40);
|
||||||
|
}
|
||||||
|
|
||||||
|
&-description {
|
||||||
|
margin-bottom: $spacer * 0.5 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
&-link {
|
||||||
|
margin-bottom: $spacer * 2 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
&-buttons {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: $spacer * 1.5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&__developing {
|
||||||
|
&-block {
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
padding: $spacer * 1.5 $spacer;
|
||||||
|
background: url('/img/stars-pattern.png') $neutral-10;
|
||||||
|
border: pxToRem(1) solid $neutral-20;
|
||||||
|
border-radius: $spacer * 0.5;
|
||||||
|
|
||||||
|
&-text {
|
||||||
|
position: relative;
|
||||||
|
text-align: center;
|
||||||
|
z-index: 2;
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
font-size: pxToRem(20);
|
||||||
|
line-height: pxToRem(30);
|
||||||
|
font-weight: 500;
|
||||||
|
padding: 0;
|
||||||
|
margin-bottom: $spacer * 1.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
font-size: pxToRem(14);
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&-image {
|
||||||
|
position: relative;
|
||||||
|
height: $spacer * 10;
|
||||||
|
z-index: 2;
|
||||||
|
|
||||||
|
img {
|
||||||
|
height: 100%;
|
||||||
|
margin: $spacer * 2 auto 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&__hero {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
position: relative;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: $spacer * 2;
|
||||||
|
width: 100%;
|
||||||
|
min-height: pxToRem(240);
|
||||||
|
padding: $spacer * 1.5 $spacer;
|
||||||
|
background: url('/img/stars-pattern.png') $neutral-10;
|
||||||
|
border: pxToRem(1) solid $neutral-20;
|
||||||
|
border-radius: pxToRem(12);
|
||||||
|
|
||||||
|
&-content {
|
||||||
|
position: relative;
|
||||||
|
align-self: center;
|
||||||
|
text-align: center;
|
||||||
|
z-index: 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
&-title {
|
||||||
|
max-width: pxToRem(400);
|
||||||
|
padding-top: 0 !important;
|
||||||
|
margin-bottom: $spacer * 1.5 !important;
|
||||||
|
font-size: pxToRem(32); // take from variables
|
||||||
|
color: $neutral-98;
|
||||||
|
line-height: pxToRem(40);
|
||||||
|
}
|
||||||
|
|
||||||
|
&-image {
|
||||||
|
position: relative;
|
||||||
|
align-self: center;
|
||||||
|
width: 100%;
|
||||||
|
max-width: pxToRem(360) !important;
|
||||||
|
margin: 0 !important;
|
||||||
|
z-index: 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
font-size: pxToRem(14);
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&-cloud {
|
||||||
|
&__hero {
|
||||||
|
.dev-portal__hero-image {
|
||||||
|
max-width: pxToRem(459) !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@include media-breakpoint-up(lg) {
|
||||||
|
&__hero {
|
||||||
|
flex-direction: row;
|
||||||
|
gap: 0;
|
||||||
|
padding: 0 $spacer * 2.5;
|
||||||
|
|
||||||
|
&-content {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
&-image {
|
||||||
|
align-self: end;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&-core {
|
||||||
|
&__hero {
|
||||||
|
padding: $spacer * 1.5 pxToRem(120);
|
||||||
|
}
|
||||||
|
&__developing {
|
||||||
|
&-block {
|
||||||
|
padding: 0;
|
||||||
|
|
||||||
|
&-text {
|
||||||
|
text-align: left;
|
||||||
|
|
||||||
|
h3,
|
||||||
|
a {
|
||||||
|
margin-left: $spacer * 2.5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&-image {
|
||||||
|
img {
|
||||||
|
margin: 0 0 0 auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@include media-breakpoint-up(xl) {
|
||||||
|
&__article {
|
||||||
|
width: calc(100% - 256px);
|
||||||
|
min-height: calc(100vh - 80px);
|
||||||
|
padding: $spacer * 1.5 $spacer * 5 0;
|
||||||
|
margin: 0 0 0 pxToRem(256);
|
||||||
|
border-left: pxToRem(1) solid $neutral-20;
|
||||||
|
|
||||||
|
&-content {
|
||||||
|
width: calc(100% - 232px);
|
||||||
|
padding-right: $spacer * 2.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
&-table {
|
||||||
|
width: pxToRem(232);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
[data-theme='light'] & {
|
||||||
|
.docs-core__hero {
|
||||||
|
background: linear-gradient(180deg, $neutral-20 0%, $neutral-10 100%);
|
||||||
|
color: $neutral-70;
|
||||||
|
&-title {
|
||||||
|
color: $neutral-98;
|
||||||
|
}
|
||||||
|
.button_outlined {
|
||||||
|
color: $neutral-100;
|
||||||
|
box-shadow: 0 0 0 1px $neutral-60;
|
||||||
|
&:hover {
|
||||||
|
box-shadow: 0 0 0 2px $neutral-60;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.docs-core__developing-block {
|
||||||
|
h3 {
|
||||||
|
color: $neutral-98;
|
||||||
|
}
|
||||||
|
.button_outlined {
|
||||||
|
color: $neutral-100;
|
||||||
|
box-shadow: 0 0 0 1px $neutral-60;
|
||||||
|
&:hover {
|
||||||
|
box-shadow: 0 0 0 2px $neutral-60;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&__hero-content {
|
||||||
|
h1 {
|
||||||
|
color: $neutral-98;
|
||||||
|
}
|
||||||
|
.button_outlined {
|
||||||
|
color: $neutral-100;
|
||||||
|
box-shadow: 0 0 0 1px $neutral-60;
|
||||||
|
&:hover {
|
||||||
|
box-shadow: 0 0 0 2px $neutral-60;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@include media-breakpoint-up(xl) {
|
||||||
|
&__article {
|
||||||
|
border-left-color: $neutral-80;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
@use '../helpers/functions' as *;
|
@use '../../helpers/functions' as *;
|
||||||
@use '../mixins/mixins' as *;
|
@use '../../mixins/mixins' as *;
|
||||||
|
|
||||||
.documentation-article {
|
.documentation-article {
|
||||||
padding-top: $spacer * 2;
|
|
||||||
padding-bottom: $spacer * 1.5;
|
padding-bottom: $spacer * 1.5;
|
||||||
|
font-weight: 400;
|
||||||
|
|
||||||
h1 {
|
h1 {
|
||||||
font-size: $spacer * 2;
|
font-size: $spacer * 2;
|
||||||
@@ -17,17 +17,19 @@
|
|||||||
h3,
|
h3,
|
||||||
h4 {
|
h4 {
|
||||||
font-size: $spacer * 1.5;
|
font-size: $spacer * 1.5;
|
||||||
|
font-weight: 500;
|
||||||
line-height: pxToRem(34);
|
line-height: pxToRem(34);
|
||||||
color: $neutral-98;
|
color: $neutral-98;
|
||||||
margin-bottom: $spacer;
|
margin-bottom: $spacer;
|
||||||
padding-top: $spacer * 0.5;
|
padding-top: $spacer * 0.5;
|
||||||
}
|
}
|
||||||
|
|
||||||
p, summary {
|
p,
|
||||||
|
summary {
|
||||||
margin-bottom: $spacer;
|
margin-bottom: $spacer;
|
||||||
}
|
}
|
||||||
|
|
||||||
a:hover {
|
a:not([class]):hover {
|
||||||
text-decoration: underline;
|
text-decoration: underline;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -57,8 +59,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
@include media-breakpoint-up(xl) {
|
@include media-breakpoint-up(xl) {
|
||||||
margin: -8px 0 -16px;
|
width: 100%;
|
||||||
padding: 0 $spacer * 1.5;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1,9 +1,11 @@
|
|||||||
@use '../helpers/functions' as *;
|
@use '../../helpers/functions' as *;
|
||||||
|
@use 'sass:math';
|
||||||
|
|
||||||
.docs-menu {
|
.docs-menu {
|
||||||
background-color: $neutral-20;
|
background-color: $neutral-20;
|
||||||
border-top: 1px solid $neutral-30;
|
border-top: 1px solid $neutral-30;
|
||||||
margin: 0 -16px;
|
margin: 0 (-$spacer) $spacer * 2;
|
||||||
|
scrollbar-width: thin;
|
||||||
|
|
||||||
&__header {
|
&__header {
|
||||||
display: flex;
|
display: flex;
|
||||||
@@ -11,6 +13,9 @@
|
|||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
padding: pxToRem(15) pxToRem(20);
|
padding: pxToRem(15) pxToRem(20);
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
.docs-menu__button svg {
|
||||||
|
transition: transform 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
&.active {
|
&.active {
|
||||||
.docs-menu__button svg {
|
.docs-menu__button svg {
|
||||||
@@ -29,7 +34,7 @@
|
|||||||
|
|
||||||
&__content {
|
&__content {
|
||||||
display: none;
|
display: none;
|
||||||
padding: $spacer * 1.5 $spacer * 2 pxToRem(12);
|
padding: pxToRem(12) $spacer * 1.5;
|
||||||
|
|
||||||
&.active {
|
&.active {
|
||||||
display: block;
|
display: block;
|
||||||
@@ -38,8 +43,7 @@
|
|||||||
|
|
||||||
&__input {
|
&__input {
|
||||||
position: relative;
|
position: relative;
|
||||||
margin-top: $spacer;
|
margin: $spacer * 2 0;
|
||||||
margin-bottom: $spacer * 2;
|
|
||||||
|
|
||||||
svg {
|
svg {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
@@ -49,20 +53,19 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
button {
|
button {
|
||||||
padding-left: $spacer * 2.8;
|
padding-left: $spacer * 2.5;
|
||||||
color: $neutral-70;
|
color: $neutral-70;
|
||||||
|
|
||||||
&:after {
|
&:after {
|
||||||
content: '';
|
content: '';
|
||||||
display: block;
|
display: block;
|
||||||
width: 1rem;
|
width: $spacer;
|
||||||
height: 1rem;
|
height: $spacer;
|
||||||
margin-top: 1px;
|
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 50%;
|
top: 50%;
|
||||||
left: $spacer;
|
left: $spacer;
|
||||||
transform: translateY(-50%);
|
transform: translateY(-50%);
|
||||||
background: url('/icons/outline/search-white.svg') no-repeat;
|
background-image: url("data:image/svg+xml,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg clip-path='url(%23clip0_6269_137)'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M1.8335 6.66665C1.8335 3.99727 3.99745 1.83331 6.66683 1.83331C9.33621 1.83331 11.5002 3.99727 11.5002 6.66665C11.5002 7.99157 10.9671 9.19197 10.1037 10.0651C10.097 10.0711 10.0904 10.0773 10.0839 10.0838C10.0775 10.0902 10.0713 10.0968 10.0653 10.1035C9.19215 10.9669 7.99175 11.5 6.66683 11.5C3.99745 11.5 1.8335 9.33602 1.8335 6.66665ZM10.423 11.1299C9.40815 11.9848 8.09765 12.5 6.66683 12.5C3.44517 12.5 0.833496 9.88831 0.833496 6.66665C0.833496 3.44498 3.44517 0.833313 6.66683 0.833313C9.88849 0.833313 12.5002 3.44498 12.5002 6.66665C12.5002 8.09746 11.985 9.40796 11.1301 10.4228L15.0204 14.3131C15.2156 14.5084 15.2156 14.8249 15.0204 15.0202C14.8251 15.2155 14.5085 15.2155 14.3133 15.0202L10.423 11.1299Z' fill='%238F98B3'/%3E%3C/g%3E%3Cdefs%3E%3CclipPath id='clip0_6269_137'%3E%3Crect width='16' height='16' fill='white'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E%0A");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -80,23 +83,24 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
&__links {
|
&__links {
|
||||||
|
|
||||||
&-title {
|
&-title {
|
||||||
|
margin-bottom: 0;
|
||||||
|
padding: math.div($spacer, 2);
|
||||||
color: $neutral-98;
|
color: $neutral-98;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
font-size: pxToRem(18);
|
font-size: $spacer;
|
||||||
line-height: pxToRem(27);
|
line-height: $spacer * 1.5;
|
||||||
margin: 0 0 $spacer;
|
|
||||||
padding-top: $spacer * 0.5;
|
&:not(:nth-of-type(1)) {
|
||||||
|
margin-top: pxToRem(12);
|
||||||
|
padding-top: $spacer;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&-group {
|
&-group {
|
||||||
padding-bottom: pxToRem(4);
|
|
||||||
|
|
||||||
&-heading {
|
&-heading {
|
||||||
display: block;
|
display: block;
|
||||||
position: relative;
|
position: relative;
|
||||||
margin-bottom: $spacer * 0.5;
|
|
||||||
// hide native details marker
|
// hide native details marker
|
||||||
&::-webkit-details-marker {
|
&::-webkit-details-marker {
|
||||||
display: none;
|
display: none;
|
||||||
@@ -107,6 +111,9 @@
|
|||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
color: $neutral-70;
|
color: $neutral-70;
|
||||||
|
font-size: pxToRem(14);
|
||||||
|
line-height: pxToRem(21);
|
||||||
|
font-weight: 400;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -116,31 +123,53 @@
|
|||||||
width: pxToRem(10);
|
width: pxToRem(10);
|
||||||
height: pxToRem(10);
|
height: pxToRem(10);
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: pxToRem(7);
|
top: pxToRem(10);
|
||||||
right: pxToRem(4);
|
right: $spacer;
|
||||||
background-image: url("data:image/svg+xml,%3Csvg width='10' height='10' viewBox='0 0 10 10' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M3.16667 0.916341C3.10476 0.869913 3.03115 0.841641 2.95409 0.834692C2.87702 0.827742 2.79954 0.842391 2.73033 0.876997C2.66112 0.911602 2.60291 0.964797 2.56223 1.03062C2.52155 1.09644 2.5 1.17229 2.5 1.24967V8.74968C2.5 8.82706 2.52155 8.90291 2.56223 8.96873C2.60291 9.03455 2.66112 9.08775 2.73033 9.12235C2.79954 9.15696 2.87702 9.17161 2.95409 9.16466C3.03115 9.15771 3.10476 9.12944 3.16667 9.08301L8.16667 5.33301C8.21842 5.2942 8.26042 5.24387 8.28934 5.18601C8.31827 5.12816 8.33333 5.06436 8.33333 4.99967C8.33333 4.93499 8.31827 4.87119 8.28934 4.81334C8.26042 4.75548 8.21842 4.70515 8.16667 4.66634L3.16667 0.916341Z' fill='%238F98B3'/%3E%3C/svg%3E%0A");
|
background-image: url("data:image/svg+xml,%3Csvg width='10' height='11' viewBox='0 0 10 11' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0.832764 3.41669L4.99943 7.58335L9.1661 3.41669' stroke='%238F98B3' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E%0A");
|
||||||
background-size: cover;
|
background-size: cover;
|
||||||
background-position: center;
|
background-position: center;
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
|
transition: transform 0.3s;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.active {
|
&.active {
|
||||||
.docs-menu__links-group-heading > a {
|
.docs-menu__links-group-heading > a {
|
||||||
padding: pxToRem(4) 0 pxToRem(4) $spacer;
|
|
||||||
border-left: pxToRem(1) solid $primary-50;
|
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
background-color: $neutral-30;
|
background-color: $neutral-30;
|
||||||
color: $neutral-90;
|
color: $neutral-90;
|
||||||
|
border-radius: $spacer * 0.5;
|
||||||
}
|
}
|
||||||
|
|
||||||
summary:after {
|
summary:after {
|
||||||
top: pxToRem(11);
|
top: pxToRem(10);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&[open=''] {
|
&[open=''] {
|
||||||
summary:after {
|
summary:after {
|
||||||
background-image: url("data:image/svg+xml,%3Csvg width='10' height='10' viewBox='0 0 10 10' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4.66732 8.16667C4.70781 8.21588 4.75871 8.25552 4.81634 8.28273C4.87397 8.30995 4.93692 8.32406 5.00065 8.32406C5.06439 8.32406 5.12733 8.30995 5.18496 8.28273C5.2426 8.25552 5.29349 8.21588 5.33398 8.16667L9.08399 3.16667C9.13041 3.10476 9.15869 3.03115 9.16564 2.95409C9.17258 2.87702 9.15794 2.79954 9.12333 2.73033C9.08872 2.66112 9.03553 2.60291 8.96971 2.56223C8.90388 2.52155 8.82803 2.5 8.75065 2.5H1.25065C1.17327 2.5 1.09742 2.52155 1.0316 2.56223C0.965773 2.60291 0.912579 2.66112 0.877973 2.73033C0.843368 2.79954 0.828719 2.87702 0.835668 2.95409C0.842617 3.03115 0.87089 3.10476 0.917318 3.16667L4.66732 8.16667Z' fill='%238F98B3'/%3E%3C/svg%3E%0A");
|
transform: rotate(180deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
padding: math.div($spacer, 4) $spacer * 1.5 math.div($spacer, 4) math.div($spacer, 2);
|
||||||
|
// margin-bottom: math.div($spacer, 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
&.external-link {
|
||||||
|
.docs-menu__links-group-heading {
|
||||||
|
&:after {
|
||||||
|
content: '';
|
||||||
|
display: block;
|
||||||
|
width: pxToRem(10);
|
||||||
|
height: pxToRem(10);
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
right: $spacer;
|
||||||
|
background: url('/icons/outline/external-link.svg') no-repeat;
|
||||||
|
background-size: contain;
|
||||||
|
margin-top: $spacer * -0.5;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -150,7 +179,6 @@
|
|||||||
padding-left: $spacer;
|
padding-left: $spacer;
|
||||||
|
|
||||||
&-item {
|
&-item {
|
||||||
margin-bottom: $spacer * 0.5;
|
|
||||||
list-style: none;
|
list-style: none;
|
||||||
|
|
||||||
a {
|
a {
|
||||||
@@ -159,6 +187,7 @@
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
color: $neutral-70;
|
color: $neutral-70;
|
||||||
font-size: pxToRem(14);
|
font-size: pxToRem(14);
|
||||||
|
font-weight: 400;
|
||||||
line-height: pxToRem(21);
|
line-height: pxToRem(21);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -172,9 +201,17 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
@include media-breakpoint-up(xl) {
|
@include media-breakpoint-up(xl) {
|
||||||
background-color: $neutral-10;
|
height: calc(100vh - 80px);
|
||||||
|
width: pxToRem(256);
|
||||||
|
flex-shrink: 0;
|
||||||
|
position: sticky;
|
||||||
|
overflow-x: hidden;
|
||||||
|
top: $spacer * 5;
|
||||||
|
padding: $spacer $spacer $spacer;
|
||||||
|
background-color: transparent;
|
||||||
border-top: none;
|
border-top: none;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
|
border-right: pxToRem(1) solid $neutral-20;
|
||||||
|
|
||||||
&__header {
|
&__header {
|
||||||
display: none;
|
display: none;
|
||||||
@@ -186,11 +223,20 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
&__input {
|
&__input {
|
||||||
margin-bottom: 0;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
&__links {
|
&__links {
|
||||||
margin-top: $spacer * 1.5;
|
&-title {
|
||||||
|
&:not(:nth-of-type(1)) {
|
||||||
|
border-top: pxToRem(1) solid $neutral-20;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
& > :last-child {
|
||||||
|
padding-bottom: $spacer;
|
||||||
|
border-bottom: pxToRem(1) solid $neutral-20;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&__links-group {
|
&__links-group {
|
||||||
@@ -249,7 +295,8 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
summary:after {
|
summary:after {
|
||||||
background-image: url("data:image/svg+xml,%3Csvg width='10' height='10' viewBox='0 0 10 10' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M3.16667 0.916341C3.10476 0.869913 3.03115 0.841641 2.95409 0.834692C2.87702 0.827742 2.79954 0.842391 2.73033 0.876997C2.66112 0.911602 2.60291 0.964797 2.56223 1.03062C2.52155 1.09644 2.5 1.17229 2.5 1.24967V8.74968C2.5 8.82706 2.52155 8.90291 2.56223 8.96873C2.60291 9.03455 2.66112 9.08775 2.73033 9.12235C2.79954 9.15696 2.87702 9.17161 2.95409 9.16466C3.03115 9.15771 3.10476 9.12944 3.16667 9.08301L8.16667 5.33301C8.21842 5.2942 8.26042 5.24387 8.28934 5.18601C8.31827 5.12816 8.33333 5.06436 8.33333 4.99967C8.33333 4.93499 8.31827 4.87119 8.28934 4.81334C8.26042 4.75548 8.21842 4.70515 8.16667 4.66634L3.16667 0.916341Z' fill='%2328324d'/%3E%3C/svg%3E");
|
background-image: url("data:image/svg+xml,%3Csvg width='10' height='7' viewBox='0 0 10 7' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg id='Group'%3E%3Cpath id='Vector' d='M0.833374 1.4165L5.00004 5.58317L9.16671 1.4165' stroke='%2328324D' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/g%3E%3C/svg%3E%0A");
|
||||||
|
transition: transform 0.3s;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.active {
|
&.active {
|
||||||
@@ -261,7 +308,7 @@
|
|||||||
|
|
||||||
&[open=''] {
|
&[open=''] {
|
||||||
summary:after {
|
summary:after {
|
||||||
background-image: url("data:image/svg+xml,%3Csvg width='10' height='10' viewBox='0 0 10 10' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4.66732 8.16667C4.70781 8.21588 4.75871 8.25552 4.81634 8.28273C4.87397 8.30995 4.93692 8.32406 5.00065 8.32406C5.06439 8.32406 5.12733 8.30995 5.18496 8.28273C5.2426 8.25552 5.29349 8.21588 5.33398 8.16667L9.08399 3.16667C9.13041 3.10476 9.15869 3.03115 9.16564 2.95409C9.17258 2.87702 9.15794 2.79954 9.12333 2.73033C9.08872 2.66112 9.03553 2.60291 8.96971 2.56223C8.90388 2.52155 8.82803 2.5 8.75065 2.5H1.25065C1.17327 2.5 1.09742 2.52155 1.0316 2.56223C0.965773 2.60291 0.912579 2.66112 0.877973 2.73033C0.843368 2.79954 0.828719 2.87702 0.835668 2.95409C0.842617 3.03115 0.87089 3.10476 0.917318 3.16667L4.66732 8.16667Z' fill='%2328324d'/%3E%3C/svg%3E");
|
transform: rotate(180deg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -289,16 +336,32 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&__links > :last-child,
|
||||||
|
&__links-title:not(:nth-of-type(1)) {
|
||||||
|
border-color: $neutral-80;
|
||||||
|
}
|
||||||
|
|
||||||
@include media-breakpoint-up(xl) {
|
@include media-breakpoint-up(xl) {
|
||||||
background-color: $neutral-98;
|
border-right-color: $neutral-80;
|
||||||
|
|
||||||
&__links-group {
|
&__links-group {
|
||||||
&.active {
|
&.active {
|
||||||
.docs-menu__links-group-heading > a {
|
.docs-menu__links-group-heading > a {
|
||||||
background-color: $neutral-94;
|
|
||||||
color: $neutral-30;
|
color: $neutral-30;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&.external-link {
|
||||||
|
.docs-menu__links-group-heading {
|
||||||
|
&:after {
|
||||||
|
mask: url('/icons/outline/external-link.svg') no-repeat;
|
||||||
|
-webkit-mask: url('/icons/outline/external-link.svg') no-repeat;
|
||||||
|
mask-size: contain;
|
||||||
|
-webkit-mask-size: contain;
|
||||||
|
background: $neutral-30;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
@use '../../helpers/functions' as *;
|
||||||
|
|
||||||
|
.documentation {
|
||||||
|
background-color: $neutral-10;
|
||||||
|
min-height: calc(100vh - 80px);
|
||||||
|
color: $neutral-70;
|
||||||
|
|
||||||
|
&__container {
|
||||||
|
@extend .container;
|
||||||
|
margin: 0;
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
&__article-wrapper {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
&__content-wrapper {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
@include media-breakpoint-up(xl) {
|
||||||
|
&__container {
|
||||||
|
max-width: 100vw !important;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
&__content {
|
||||||
|
$side-menu-width: pxToRem(256);
|
||||||
|
width: calc(100% - #{$side-menu-width});
|
||||||
|
padding: $spacer * 1.5 $spacer * 2.5 $spacer * 3.5;
|
||||||
|
}
|
||||||
|
&__content-wrapper {
|
||||||
|
max-width: calc(1136px - $spacer * 2.5 * 1.5);
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
&__article-wrapper {
|
||||||
|
$toc-width: pxToRem(232);
|
||||||
|
width: calc(100% - #{$toc-width});
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-theme='light'] & {
|
||||||
|
background-color: $neutral-94;
|
||||||
|
color: $neutral-30;
|
||||||
|
|
||||||
|
.button_outlined {
|
||||||
|
color: $neutral-30;
|
||||||
|
box-shadow: 0 0 0 1px $neutral-70;
|
||||||
|
&:hover {
|
||||||
|
box-shadow: 0 0 0 2px $neutral-70;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,134 @@
|
|||||||
|
@use '../../helpers/functions' as *;
|
||||||
|
@use 'sass:math';
|
||||||
|
|
||||||
|
.docs-card {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: flex-start;
|
||||||
|
gap: pxToRem(12);
|
||||||
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
max-width: pxToRem(456);
|
||||||
|
margin: 0 auto;
|
||||||
|
padding: $spacer * 1.5;
|
||||||
|
border: pxToRem(1) solid $neutral-20;
|
||||||
|
background: linear-gradient(180deg, $neutral-20 0%, rgba(14, 20, 36, 0.1) 100%);
|
||||||
|
border-radius: pxToRem(12);
|
||||||
|
overflow: hidden;
|
||||||
|
color: $neutral-70;
|
||||||
|
|
||||||
|
&__tag {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: $spacer * 0.5;
|
||||||
|
color: $secondary-blue-50;
|
||||||
|
|
||||||
|
&_violet {
|
||||||
|
color: $secondary-violet-50;
|
||||||
|
}
|
||||||
|
&_teal {
|
||||||
|
color: $secondary-teal-50;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
img.docs-card__icon {
|
||||||
|
width: $spacer * 1.5;
|
||||||
|
height: $spacer * 1.5;
|
||||||
|
margin: 0;
|
||||||
|
// :has() selector only works in newer versions of browsers
|
||||||
|
// but in this case it has just minor visual effect
|
||||||
|
&:has(+ span) {
|
||||||
|
width: auto;
|
||||||
|
height: $spacer * 0.9;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
img.docs-card__image {
|
||||||
|
$correctingMargin: $spacer * -1.5;
|
||||||
|
width: calc(100% + $spacer * 3);
|
||||||
|
max-width: none;
|
||||||
|
margin: $correctingMargin $correctingMargin $spacer * 0.75 $correctingMargin;
|
||||||
|
}
|
||||||
|
|
||||||
|
&__title,
|
||||||
|
h3.docs-card__title {
|
||||||
|
font-size: pxToRem(20);
|
||||||
|
line-height: pxToRem(30);
|
||||||
|
color: $neutral-98;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
&__description,
|
||||||
|
p.docs-card__description {
|
||||||
|
font-size: pxToRem(14);
|
||||||
|
line-height: pxToRem(21);
|
||||||
|
margin: 0;
|
||||||
|
@include media-breakpoint-up(lg) {
|
||||||
|
flex-grow: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&__arrow {
|
||||||
|
margin: auto 0 0 auto;
|
||||||
|
|
||||||
|
&:after {
|
||||||
|
content: '';
|
||||||
|
display: block;
|
||||||
|
margin-top: pxToRem(12);
|
||||||
|
height: $spacer;
|
||||||
|
width: $spacer;
|
||||||
|
background-image: url("data:image/svg+xml,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M10 3.33337L14.6667 8.00004L10 12.6667' stroke='%238F98B3' stroke-width='1.33333' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M1.33331 8H14.6666' stroke='%238F98B3' stroke-width='1.33333' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E%0A");
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-size: cover;
|
||||||
|
background-position: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
a.docs__card-link {
|
||||||
|
margin: 0 0 $spacer * 2 $spacer * 1.5;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background: linear-gradient(180deg, $neutral-20 0%, #0e1424 100%);
|
||||||
|
|
||||||
|
.docs-card__arrow:after {
|
||||||
|
background-image: url("data:image/svg+xml,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M10.0001 3.33337L14.6667 8.00004L10.0001 12.6667' stroke='%23DC244C' stroke-width='1.33333' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M1.33337 8.00006H14.6667' stroke='%23DC244C' stroke-width='1.33333' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E%0A");
|
||||||
|
}
|
||||||
|
|
||||||
|
.docs-card__link {
|
||||||
|
$icon-width: pxToRem(20);
|
||||||
|
padding-right: calc($icon-width + 6px);
|
||||||
|
&:after {
|
||||||
|
animation: dash 0.3s ease-in-out forwards;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:before {
|
||||||
|
animation: dash 0.3s ease-in-out forwards;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@include media-breakpoint-up(lg) {
|
||||||
|
max-width: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-theme='light'] & {
|
||||||
|
background: $neutral-98;
|
||||||
|
border-color: $neutral-90;
|
||||||
|
color: $neutral-10;
|
||||||
|
|
||||||
|
.docs-card__title {
|
||||||
|
color: $neutral-10;
|
||||||
|
}
|
||||||
|
&:hover {
|
||||||
|
.docs-card__title {
|
||||||
|
color: $primary-50;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,3 +1,6 @@
|
|||||||
export const LG_BREAKPOINT = 992;
|
export const LG_BREAKPOINT = 992;
|
||||||
export const XL_BREAKPOINT = 1200;
|
export const XL_BREAKPOINT = 1200;
|
||||||
export const XXL_BREAKPOINT = 1400;
|
export const XXL_BREAKPOINT = 1400;
|
||||||
|
|
||||||
|
// Offset for content navigation from the top of the page
|
||||||
|
export const DOCS_HEADER_OFFSET = 100;
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
import ThemeSwitch from './theme-switch.js';
|
import ThemeSwitch from './theme-switch.js';
|
||||||
import { XL_BREAKPOINT } from './constants';
|
import { XL_BREAKPOINT } from './constants';
|
||||||
|
import TableOfContents from './table-of-content';
|
||||||
|
|
||||||
const themeSwitch = new ThemeSwitch();
|
const themeSwitch = new ThemeSwitch();
|
||||||
|
|
||||||
@@ -15,10 +16,10 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
sidebar.classList.toggle('active');
|
sidebar.classList.toggle('active');
|
||||||
});
|
});
|
||||||
|
|
||||||
const moveSearchButton = function() {
|
const moveSearchButton = function () {
|
||||||
const checkIfFirstChildIsSearch = (element) => {
|
const checkIfFirstChildIsSearch = (element) => {
|
||||||
return element.children.length > 0 && element.children[0].classList.contains('docs-menu__input');
|
return element.children.length > 0 && element.children[0].classList.contains('docs-menu__input');
|
||||||
}
|
};
|
||||||
|
|
||||||
const isMobile = window.innerWidth <= XL_BREAKPOINT;
|
const isMobile = window.innerWidth <= XL_BREAKPOINT;
|
||||||
if (isMobile && !checkIfFirstChildIsSearch(docsMenu)) {
|
if (isMobile && !checkIfFirstChildIsSearch(docsMenu)) {
|
||||||
@@ -26,9 +27,14 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
} else if (!isMobile && !checkIfFirstChildIsSearch(sidebar)) {
|
} else if (!isMobile && !checkIfFirstChildIsSearch(sidebar)) {
|
||||||
sidebar.before(searchbar);
|
sidebar.before(searchbar);
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
moveSearchButton();
|
moveSearchButton();
|
||||||
|
|
||||||
window.addEventListener('resize', moveSearchButton);
|
window.addEventListener('resize', moveSearchButton);
|
||||||
|
|
||||||
|
// if #TableOfContents and .documentation-article exists on the page, initialize TableOfContents class
|
||||||
|
if (document.getElementById('TableOfContents') && document.querySelector('.documentation-article')) {
|
||||||
|
new TableOfContents('#TableOfContents', '.documentation-article');
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import scrollHandler from './scroll-handler';
|
|||||||
import { XXL_BREAKPOINT } from './constants';
|
import { XXL_BREAKPOINT } from './constants';
|
||||||
import { initGoToTopButton, getCookie } from './helpers';
|
import { initGoToTopButton, getCookie } from './helpers';
|
||||||
import { loadSegment, createSegmentStoredPage } from './segment-helpers';
|
import { loadSegment, createSegmentStoredPage } from './segment-helpers';
|
||||||
|
import TableOfContents from './table-of-content';
|
||||||
|
|
||||||
createSegmentStoredPage();
|
createSegmentStoredPage();
|
||||||
|
|
||||||
@@ -31,11 +32,17 @@ document.addEventListener('DOMContentLoaded', function () {
|
|||||||
let menuOffset = window.innerWidth >= 1400 ? PADDING_PART_TO_HIDE : 0; // 24px is a PART of padding-top which we want to scroll over
|
let menuOffset = window.innerWidth >= 1400 ? PADDING_PART_TO_HIDE : 0; // 24px is a PART of padding-top which we want to scroll over
|
||||||
|
|
||||||
function addScrollStateToPage() {
|
function addScrollStateToPage() {
|
||||||
|
if (!header) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
header.style.minHeight = `${header.offsetHeight}px`;
|
header.style.minHeight = `${header.offsetHeight}px`;
|
||||||
body.classList.add('scrolled');
|
body.classList.add('scrolled');
|
||||||
}
|
}
|
||||||
|
|
||||||
function removeScrollStateFromPage() {
|
function removeScrollStateFromPage() {
|
||||||
|
if (!header) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
header.style.minHeight = '';
|
header.style.minHeight = '';
|
||||||
body.classList.remove('scrolled');
|
body.classList.remove('scrolled');
|
||||||
}
|
}
|
||||||
@@ -95,4 +102,8 @@ document.addEventListener('DOMContentLoaded', function () {
|
|||||||
});
|
});
|
||||||
|
|
||||||
initGoToTopButton('#scrollToTopBtn');
|
initGoToTopButton('#scrollToTopBtn');
|
||||||
|
|
||||||
|
if (document.getElementById('TableOfContents') && document.querySelector('.qdrant-post__body')) {
|
||||||
|
new TableOfContents('#TableOfContents', '.qdrant-post__body');
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import 'qdrant-page-search/dist/js/search.min.js';
|
import 'qdrant-page-search/dist/js/search.min.js';
|
||||||
|
|
||||||
(function () {
|
(function () {
|
||||||
if (/documentation/.test(window.location?.pathname)) {
|
if (/documentation|docs/.test(window.location?.pathname)) {
|
||||||
window.initQdrantSearch({ searchApiUrl: 'https://search.qdrant.tech/api/search', section: 'documentation' });
|
window.initQdrantSearch({ searchApiUrl: 'https://search.qdrant.tech/api/search', section: 'documentation' });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,85 @@
|
|||||||
|
import { DOCS_HEADER_OFFSET } from './constants';
|
||||||
|
|
||||||
|
class TableOfContents {
|
||||||
|
constructor(tocSelector, contentSelector) {
|
||||||
|
this.tocLinks = Array.from(document.querySelectorAll(`${tocSelector} a`));
|
||||||
|
this.headings = Array.from(
|
||||||
|
document.querySelectorAll(
|
||||||
|
`${contentSelector} h1, ${contentSelector} h2, ${contentSelector} h3`,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
this.currentActiveIndex = -1; // Track the current active heading index
|
||||||
|
this.currentActive = null; // Track the current active heading element
|
||||||
|
|
||||||
|
|
||||||
|
this.debounceTimeout = null;
|
||||||
|
|
||||||
|
this.currentlyVisibleHeaderIds = new Set();
|
||||||
|
|
||||||
|
this.headerOffset = DOCS_HEADER_OFFSET + 10;
|
||||||
|
|
||||||
|
this.init();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Initialize the Table of Contents functionality
|
||||||
|
init() {
|
||||||
|
this.setupObserver();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Clear 'active' class from all links
|
||||||
|
clearActiveClasses() {
|
||||||
|
this.tocLinks.forEach((link) => link.classList.remove('active'));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set active link with debounce
|
||||||
|
setActiveLink(index) {
|
||||||
|
if (index !== this.currentActiveIndex) {
|
||||||
|
this.clearActiveClasses();
|
||||||
|
if (this.tocLinks[index]) {
|
||||||
|
this.tocLinks[index].classList.add('active');
|
||||||
|
this.currentActiveIndex = index;
|
||||||
|
this.currentActive = this.headings[index];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Setup Intersection Observer
|
||||||
|
setupObserver() {
|
||||||
|
const observerCallback = (entries) => {
|
||||||
|
|
||||||
|
entries.forEach((entry) => {
|
||||||
|
const entryIndex = this.headings.indexOf(entry.target);
|
||||||
|
const isIntersecting = entry.isIntersecting;
|
||||||
|
|
||||||
|
if (isIntersecting) {
|
||||||
|
this.currentlyVisibleHeaderIds.add(entryIndex);
|
||||||
|
} else {
|
||||||
|
this.currentlyVisibleHeaderIds.delete(entryIndex);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (this.currentlyVisibleHeaderIds.size !== 0) {
|
||||||
|
let minimalVisibleHeaderId = Math.min(...Array.from(this.currentlyVisibleHeaderIds));
|
||||||
|
this.setActiveLink(minimalVisibleHeaderId);
|
||||||
|
} else {
|
||||||
|
// No intersection found
|
||||||
|
// If current active heading is below the viewport, then set current active to one above it
|
||||||
|
if (this.currentActive && this.currentActive.getBoundingClientRect().top > this.headerOffset) {
|
||||||
|
this.setActiveLink(this.currentActiveIndex - 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Observer options
|
||||||
|
const observerOptions = {
|
||||||
|
root: null,
|
||||||
|
rootMargin: `-${this.headerOffset}px 0px -25% 0px`,
|
||||||
|
threshold: 0.0, // Lower threshold for better visibility
|
||||||
|
};
|
||||||
|
|
||||||
|
const observer = new IntersectionObserver(observerCallback, observerOptions);
|
||||||
|
this.headings.forEach((heading) => observer.observe(heading));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default TableOfContents;
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
import AnchorJS from 'anchor-js';
|
import AnchorJS from 'anchor-js';
|
||||||
import { scrollIntoViewWithOffset } from '../helpers';
|
import { scrollIntoViewWithOffset } from '../helpers';
|
||||||
|
import { DOCS_HEADER_OFFSET } from '../constants';
|
||||||
|
|
||||||
const anchors = new AnchorJS();
|
const anchors = new AnchorJS();
|
||||||
anchors.options.placement = 'left';
|
anchors.options.placement = 'left';
|
||||||
@@ -8,19 +9,19 @@ anchors.options.class = 'text-decoration-none';
|
|||||||
document.addEventListener('DOMContentLoaded', function (event) {
|
document.addEventListener('DOMContentLoaded', function (event) {
|
||||||
anchors.add('.qdrant-post__body :is(h1, h2, h3, h4, h5, h6)');
|
anchors.add('.qdrant-post__body :is(h1, h2, h3, h4, h5, h6)');
|
||||||
if (/documentation/.test(window.location?.pathname)) {
|
if (/documentation/.test(window.location?.pathname)) {
|
||||||
anchors.add('.documentation-article :is(h1, h2, h3, h4, h5, h6)');
|
anchors.add('.documentation-article > :is(h1, h2, h3, h4, h5, h6)');
|
||||||
}
|
}
|
||||||
|
|
||||||
// scroll to anchors:
|
// scroll to anchors:
|
||||||
let offset = 100;
|
let offset = DOCS_HEADER_OFFSET;
|
||||||
|
|
||||||
if (window.location.hash) {
|
if (window.location.hash) {
|
||||||
scrollIntoViewWithOffset(window.location.hash.replace('#', ''), offset).catch((e) => {
|
scrollIntoViewWithOffset(window.location.hash.replace('#', ''), offset);
|
||||||
console.error(e);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
document.querySelectorAll('a[href^="#"]').forEach((anchor) => {
|
let allLinks = document.querySelectorAll('a[href^="#"]');
|
||||||
|
|
||||||
|
allLinks.forEach((anchor) => {
|
||||||
const target = anchor.getAttribute('href');
|
const target = anchor.getAttribute('href');
|
||||||
anchor.addEventListener('click', function (e) {
|
anchor.addEventListener('click', function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
|||||||
@@ -1,5 +1,11 @@
|
|||||||
{{ define "main" }}
|
<!doctype html>
|
||||||
{{ partial "site-header" . }}
|
<html lang="en">
|
||||||
|
{{- partial "head.html" . -}}
|
||||||
{{ partial "documentation" . }}
|
<body>
|
||||||
{{ end }}
|
<main>
|
||||||
|
{{ partial "documentation/header" . }}
|
||||||
|
{{ partial "documentation/content-layout" . }}
|
||||||
|
</main>
|
||||||
|
</body>
|
||||||
|
{{ partial "js.html" . }}
|
||||||
|
</html>
|
||||||
|
|||||||
@@ -1,5 +1,11 @@
|
|||||||
{{ define "main" }}
|
<!doctype html>
|
||||||
{{ partial "site-header" . }}
|
<html lang="en">
|
||||||
|
{{- partial "head.html" . -}}
|
||||||
{{ partial "documentation" . }}
|
<body>
|
||||||
{{ end }}
|
<main>
|
||||||
|
{{ partial "documentation/header" . }}
|
||||||
|
{{ partial "documentation/content-layout" . }}
|
||||||
|
</main>
|
||||||
|
</body>
|
||||||
|
{{ partial "js.html" . }}
|
||||||
|
</html>
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<link href="{{ $splideCss.RelPermalink }}" rel="stylesheet" integrity="{{ $splideCss.Data.Integrity }}" />
|
<link href="{{ $splideCss.RelPermalink }}" rel="stylesheet" integrity="{{ $splideCss.Data.Integrity }}" />
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
{{ if in (slice "blog" "documentation") .Section }}
|
{{ if in (slice "blog" "docs" "documentation") .Section }}
|
||||||
{{ $pageSearchCss := resources.Get "css/search/search.scss" | toCSS $opts | minify | resources.Fingerprint "sha512" }}
|
{{ $pageSearchCss := resources.Get "css/search/search.scss" | toCSS $opts | minify | resources.Fingerprint "sha512" }}
|
||||||
<link href="{{ $pageSearchCss.RelPermalink }}" rel="stylesheet" integrity="{{ $pageSearchCss.Data.Integrity }}" />
|
<link href="{{ $pageSearchCss.RelPermalink }}" rel="stylesheet" integrity="{{ $pageSearchCss.Data.Integrity }}" />
|
||||||
{{ end }}
|
{{ end }}
|
||||||
@@ -21,7 +21,7 @@
|
|||||||
/>
|
/>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
{{ if eq .Section "documentation" }}
|
{{ if in (slice "docs" "documentation") .Section }}
|
||||||
{{ $documentationCss := resources.Get "css/documentation.scss" | toCSS $opts | minify | resources.Fingerprint "sha512" }}
|
{{ $documentationCss := resources.Get "css/documentation.scss" | toCSS $opts | minify | resources.Fingerprint "sha512" }}
|
||||||
<link
|
<link
|
||||||
href="{{ $documentationCss.RelPermalink }}"
|
href="{{ $documentationCss.RelPermalink }}"
|
||||||
@@ -35,7 +35,7 @@
|
|||||||
<link href="{{ $benchmarksCss.RelPermalink }}" rel="stylesheet" integrity="{{ $benchmarksCss.Data.Integrity }}" />
|
<link href="{{ $benchmarksCss.RelPermalink }}" rel="stylesheet" integrity="{{ $benchmarksCss.Data.Integrity }}" />
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
{{ if not (in (slice "hybrid-cloud" "documentation" "benchmarks") .Section) }}
|
{{ if not (in (slice "hybrid-cloud" "docs" "documentation" "benchmarks") .Section) }}
|
||||||
{{ $mainCss := resources.Get "css/main.scss" | toCSS $opts | minify | resources.Fingerprint "sha512" }}
|
{{ $mainCss := resources.Get "css/main.scss" | toCSS $opts | minify | resources.Fingerprint "sha512" }}
|
||||||
<link href="{{ $mainCss.RelPermalink }}" rel="stylesheet" integrity="{{ .Data.Integrity }}" crossorigin="anonymous" />
|
<link href="{{ $mainCss.RelPermalink }}" rel="stylesheet" integrity="{{ .Data.Integrity }}" crossorigin="anonymous" />
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|||||||
@@ -1,5 +0,0 @@
|
|||||||
<div class="col-12 col-xl-8">
|
|
||||||
<article class="documentation-article">
|
|
||||||
{{ partial "article-content.html" . }}
|
|
||||||
</article>
|
|
||||||
</div>
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
<section class="documentation documentation_theme-light">
|
|
||||||
<div class="documentation__container">
|
|
||||||
<div class="row gx-4">
|
|
||||||
{{ partial "docs-menu" . }}
|
|
||||||
{{ partial "documentation-article" . }}
|
|
||||||
{{ partial "table-of-contents" . }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
<section class="docs-core__hero">
|
||||||
|
<h1 class="docs-core__hero-title">{{ .title }}</h1>
|
||||||
|
<p class="docs-core__hero-description">{{ .description }}</p>
|
||||||
|
<p class="docs-core__hero-link">{{ .linkDescription | safeHTML }}</p>
|
||||||
|
<div class="docs-core__hero-buttons">
|
||||||
|
<a href="{{ .cloudButton.url }}" {{ if strings.HasPrefix .cloudButton.url "https://" }}target="_blank"{{ end }} class="button button_contained button_sm">
|
||||||
|
{{ .cloudButton.text }}
|
||||||
|
</a>
|
||||||
|
<a href="{{ .localButton.url }}" {{ if strings.HasPrefix .localButton.url "https://" }}target="_blank"{{ end }} class="button button_outlined button_sm">
|
||||||
|
{{ .localButton.text }}
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
<section class="docs-cloud__hero docs__hero">
|
||||||
|
<div class="docs__hero-content">
|
||||||
|
<h1 class="docs__hero-title">{{ .title }}</h1>
|
||||||
|
<a href="{{ .startedButton.url }}" {{ if strings.HasPrefix .startedButton.url "https://" }}target="_blank"{{ end }} class="button button_outlined button_sm docs__hero-button">
|
||||||
|
{{ .startedButton.text }}
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<img class="docs__hero-image" src="{{ .image.src }}" alt="{{ .image.alt }}" />
|
||||||
|
<div class="docs-core__overlay"></div>
|
||||||
|
</section>
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
<section class="docs-build__hero docs__hero">
|
||||||
|
<div class="docs__hero-content">
|
||||||
|
<h1 class="docs__hero-title">{{ .title }}</h1>
|
||||||
|
<a href="{{ .startedButton.url }}" {{ if strings.HasPrefix .startedButton.url "https://" }}target="_blank"{{ end }} class="button button_outlined button_sm docs__hero-button">
|
||||||
|
{{ .startedButton.text }}
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<img class="docs__hero-image" src="{{ .image.src }}" alt="{{ .image.alt }}" />
|
||||||
|
<div class="docs-core__overlay"></div>
|
||||||
|
</section>
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
<section class="docs-core__developing">
|
||||||
|
<h2>{{ .developingTitle }}</h2>
|
||||||
|
<p>{{ .developingDescription | safeHTML }}</p>
|
||||||
|
|
||||||
|
<div class="docs-core__developing-block">
|
||||||
|
<div class="row align-items-center">
|
||||||
|
<div class="docs-core__developing-block-text col-12 col-lg-7">
|
||||||
|
<h3 class="docs-core__developing-bloc-title">{{ .developingBlock.title }}</h3>
|
||||||
|
<a href="{{ .developingBlock.button.url }}" {{ if strings.HasPrefix .developingBlock.url "https://" }}target="_blank"{{ end }} class="button button_outlined button_sm" target="_blank">
|
||||||
|
{{ .developingBlock.button.text }}
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="docs-core__developing-block-image col-12 col-lg-5">
|
||||||
|
<img src="{{ .developingBlock.image.src }}" alt="{{ .image.alt }}" />
|
||||||
|
</div>
|
||||||
|
<div class="docs-core__overlay"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
<ul class="docs-breadcrumbs">
|
||||||
|
{{ $rellink := "" }}
|
||||||
|
{{ $paths := (split .RelPermalink "/") }}
|
||||||
|
{{ $len := sub (len $paths) 2 }}
|
||||||
|
{{ range first $len $paths }}
|
||||||
|
{{ if gt (len . ) 0 }}
|
||||||
|
{{ $rellink = printf "%s/%s" $rellink . }}
|
||||||
|
<li class="docs-breadcrumbs__crumb"><a href="{{ $rellink }}/">{{ humanize . }}</a></li>
|
||||||
|
<li class="docs-breadcrumbs__crumb-separator"></li>
|
||||||
|
{{ end }}
|
||||||
|
{{ end }}
|
||||||
|
<li class="docs-breadcrumbs__crumb">{{ .Params.title | safeHTML }}</li>
|
||||||
|
</ul>
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{{ $cardsPerRow := .cardsPerRow }}
|
||||||
|
{{ $cardsPerRow = $cardsPerRow | int }}
|
||||||
|
{{ $cardsPerRow = div 12 $cardsPerRow }}
|
||||||
|
{{ $cardsPerRow = print $cardsPerRow }}
|
||||||
|
{{ $cardsPerRow = printf "col-12 col-lg-%s" $cardsPerRow }}
|
||||||
|
{{ $cardsPerRow = print $cardsPerRow }}
|
||||||
|
|
||||||
|
|
||||||
|
<div class="{{- $cardsPerRow -}}">
|
||||||
|
<a
|
||||||
|
href="{{ .card.link.url }}"
|
||||||
|
{{ if strings.HasPrefix .card.link.url "https://" }}target="_blank"{{ end }}
|
||||||
|
class="docs-card"
|
||||||
|
>
|
||||||
|
{{ if or (.card.tag) (.card.icon) }}
|
||||||
|
<div class="docs-card__tag {{ if .card.tagColor }}docs-card__tag_{{- .card.tagColor -}}{{ end }}">
|
||||||
|
{{ if .card.icon }}
|
||||||
|
<img class="docs-card__icon" src="{{ .card.icon.src }}" alt="{{ .card.icon.alt }}" />
|
||||||
|
{{ end }}
|
||||||
|
{{ if .card.tag }}
|
||||||
|
<span>{{ .card.tag }}</span>
|
||||||
|
{{ end }}
|
||||||
|
</div>
|
||||||
|
{{ end }}
|
||||||
|
{{ if .card.image }}
|
||||||
|
<img class="docs-card__image" src="{{ .card.image.src }}" alt="{{ .card.image.alt }}" />
|
||||||
|
{{ end }}
|
||||||
|
<h3 class="docs-card__title">{{ .card.title }}</h3>
|
||||||
|
<p class="docs-card__description">{{ .card.description }}</p>
|
||||||
|
{{ if .card.link.text }}
|
||||||
|
<span class="docs-card__link link link_sm">{{ .card.link.text }}</span>
|
||||||
|
{{ else }}
|
||||||
|
<div class="docs-card__arrow"></div>
|
||||||
|
{{ end }}
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
<!--documentation content layout, aka middle part of the documentation page where the actual content is displayed-->
|
||||||
|
<section class="docs documentation">
|
||||||
|
<div class="documentation__container">
|
||||||
|
<div class="d-flex flex-column flex-xl-row">
|
||||||
|
{{ $partition := partial "get-partition.html" (dict "page" .) }}
|
||||||
|
|
||||||
|
{{ partial "documentation/sidebar-menu" (dict "context" . "partition" $partition) }}
|
||||||
|
|
||||||
|
|
||||||
|
<div class="documentation__content">
|
||||||
|
<!-- todo: update this and styles to support both types of content on the same page-->
|
||||||
|
<div class="documentation__content-wrapper">
|
||||||
|
{{ if .Params.content }}
|
||||||
|
<div class="documentation__article-wrapper">
|
||||||
|
<div class="docs-core documentation-article">
|
||||||
|
{{ partial "documentation/custom-content.html" . }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{ else }}
|
||||||
|
|
||||||
|
<div class="documentation__article-wrapper">
|
||||||
|
{{ if not (eq .Params.breadcrumb false) }}
|
||||||
|
{{ partial "documentation/breadcrumbs" . }}
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
<article class="documentation-article">
|
||||||
|
{{ partial "article-content.html" . }}
|
||||||
|
</article>
|
||||||
|
{{ partial "documentation/feedback.html" . }}
|
||||||
|
</div>
|
||||||
|
{{ partial "table-of-contents" . }}
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{ partial "documentation/footer.html" . }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
<!--template for displaying `content` list from front matter-->
|
||||||
|
{{ if .Params.content }}
|
||||||
|
{{ range .Params.content }}
|
||||||
|
{{ partial .partial . }}
|
||||||
|
{{ end }}
|
||||||
|
{{ end }}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
<section class="dev-portal-articles-posts">
|
||||||
|
<div class="dev-portal-articles-posts__articles row gx-3 gy-5 gy-lg-4">
|
||||||
|
{{ $all := ($.Site.GetPage "articles" .Section).Pages.ByPublishDate.Reverse }}
|
||||||
|
{{ $paginator := .Paginate $all 14 }}
|
||||||
|
{{ range $paginator.Pages }}
|
||||||
|
{{ .Scratch.Set "scope" "list" }}
|
||||||
|
|
||||||
|
{{ $link := .Permalink }}
|
||||||
|
{{ if .Params.external_link }}
|
||||||
|
{{ $link = .Params.external_link }}
|
||||||
|
{{ end }}
|
||||||
|
<article class="col-12 col-lg-6 col-xl-4 post">
|
||||||
|
<a class="post-link" href="{{ .RelPermalink }}">
|
||||||
|
<div class="post-preview">
|
||||||
|
<img src="{{ .Params.preview_dir }}/preview.jpg" alt="Preview" />
|
||||||
|
</div>
|
||||||
|
<h6 class="post-title">{{ .Params.title }}</h6>
|
||||||
|
<p class="post-description">{{ .Params.description }}</p>
|
||||||
|
<div class="post-about">
|
||||||
|
<p>{{ .Params.author }}</p>
|
||||||
|
<span>·</span>
|
||||||
|
<p>{{ time.Format "January 02, 2006" .Date }}</p>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</article>
|
||||||
|
{{ end }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="qdrant-articles-posts__pagination col-12">
|
||||||
|
{{ if gt $paginator.TotalPages 1 }}
|
||||||
|
{{ partial "pagination" $paginator }}
|
||||||
|
{{ end }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
{{ with (.Site.GetPage "/headless/docs-feedback") }}
|
||||||
|
<section class="docs-feedback">
|
||||||
|
<h5 class="docs-feedback__title">{{ .Params.title }}</h5>
|
||||||
|
<div class="docs-feedback__buttons">
|
||||||
|
<a href="{{ .Params.positiveButton.url }}" class="button button_outlined button_sm docs-feedback__button">
|
||||||
|
<img src="{{ .Params.positiveButton.icon.src }}" alt="{{ .Params.positiveButton.icon.alt }}">
|
||||||
|
{{ .Params.positiveButton.text }}
|
||||||
|
</a>
|
||||||
|
<a href="{{ .Params.negativeButton.url }}" class="button button_outlined button_sm docs-feedback__button">
|
||||||
|
<img src="{{ .Params.negativeButton.icon.src }}" alt="{{ .Params.negativeButton.icon.alt }}">
|
||||||
|
{{ .Params.negativeButton.text }}
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
{{end }}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
{{ with (.Site.GetPage "/headless/footer") }}
|
||||||
|
<footer class="docs-footer w-100 py-0 pt-0 pb-4 pb-xl-0">
|
||||||
|
<div class="docs-footer__cta">
|
||||||
|
<h4>{{ .Params.question }}</h4>
|
||||||
|
<a href="{{ .Params.questionButton.url }}" class="button button_outlined button_sm" target="_blank">
|
||||||
|
{{ .Params.questionButton.text }}
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="docs-footer__bottom">
|
||||||
|
<div class="docs-footer__bottom-content">
|
||||||
|
<span>{{ .Params.copyright }}</span>
|
||||||
|
<div class="footer__bottom-links">
|
||||||
|
<a href="{{ .Params.termsLink.url }}">{{ .Params.termsLink.text }}</a>
|
||||||
|
<a href="{{ .Params.privacyLink.url }}">{{ .Params.privacyLink.text }}</a>
|
||||||
|
<a href="{{ .Params.impressumLink.url }}">{{ .Params.impressumLink.text }}</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
{{ end }}
|
||||||
@@ -0,0 +1,145 @@
|
|||||||
|
<header class="docs-header">
|
||||||
|
{{ $partition := partial "get-partition.html" (dict "page" .) }}
|
||||||
|
{{ with (.Site.GetPage "/headless/docs-header") }}
|
||||||
|
<div class="main-menu z-5">
|
||||||
|
<a href="{{ .Params.logoLink }}">
|
||||||
|
{{ partial "logo.html" . }}
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<div class="d-flex d-xl-none justify-content-end align-items-center gap-4">
|
||||||
|
<div class="d-block d-xl-none">
|
||||||
|
{{ partial "theme-switch" . }}
|
||||||
|
</div>
|
||||||
|
<button type="button" class="main-menu__trigger">{{ partial "svg" "hamburger-menu-white.svg" }}</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<ul class="main-menu__links">
|
||||||
|
{{ range $index, $element := .Params.menuItems }}
|
||||||
|
<li class="main-menu__item">
|
||||||
|
{{ if .url }}
|
||||||
|
<a
|
||||||
|
class="menu-link {{- if eq (lower .name) $partition }}active{{- end -}}"
|
||||||
|
href="{{ .url }}"
|
||||||
|
{{ if (eq $index 3) }}target="_blank"{{ end }}
|
||||||
|
>
|
||||||
|
{{ .name }}
|
||||||
|
</a>
|
||||||
|
{{ else }}
|
||||||
|
<span>{{ .name }}</span>
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{ if .subMenuItems }}
|
||||||
|
<ul class="main-menu__submenu">
|
||||||
|
{{ if .url }}
|
||||||
|
<li class="main-menu__section-link">
|
||||||
|
<a class="link link_neutral link_sm" href="{{ .url }}">
|
||||||
|
{{ .name }}
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
{{ end }}
|
||||||
|
{{ range .subMenuItems }}
|
||||||
|
<li class="main-menu__submenu-item">
|
||||||
|
<a
|
||||||
|
href="{{ .url }}"
|
||||||
|
{{ if strings.HasPrefix .url "http" }}target="_blank" rel="noopener noreferrer nofollow"{{ end }}
|
||||||
|
>
|
||||||
|
<img src="/img/menu/{{ .icon }}" draggable="false" />
|
||||||
|
<span>{{ .name }}</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
{{ end }}
|
||||||
|
</ul>
|
||||||
|
{{ end }}
|
||||||
|
</li>
|
||||||
|
{{ end }}
|
||||||
|
</ul>
|
||||||
|
<div class="main-menu__buttons">
|
||||||
|
<div class="main-menu__buttons-input">
|
||||||
|
<button
|
||||||
|
class="qdr-search-input-btn q-input input_md input_light-bg"
|
||||||
|
type="button"
|
||||||
|
name="search"
|
||||||
|
data-target="#searchModal"
|
||||||
|
>
|
||||||
|
Search
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
{{ partial "theme-switch" . }}
|
||||||
|
<a data-metric-loc="nav" href="{{ .Params.logIn.url }}" class="menu-link mx-3" target="_blank"
|
||||||
|
>{{ .Params.logIn.text }}</a
|
||||||
|
>
|
||||||
|
<a
|
||||||
|
data-metric-loc="nav"
|
||||||
|
href="{{ .Params.startFree.url }}"
|
||||||
|
class="button button_contained button_sm"
|
||||||
|
target="_blank"
|
||||||
|
>
|
||||||
|
{{ .Params.startFree.text }}
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="menu-mobile">
|
||||||
|
<div class="menu-mobile__header">
|
||||||
|
{{ partial "logo.html" . }}
|
||||||
|
<button type="button" class="menu-mobile__close">{{ partial "svg" "close.svg" }}</button>
|
||||||
|
</div>
|
||||||
|
<ul class="menu-mobile__items">
|
||||||
|
{{ range .Params.menuItems }}
|
||||||
|
<li class="menu-mobile__item" data-path="{{ .id }}">
|
||||||
|
<div class="menu-mobile__item-content">
|
||||||
|
{{ if and (not .subMenuItems) .url }}
|
||||||
|
<a href="{{ .url }}">
|
||||||
|
{{ .name }}
|
||||||
|
</a>
|
||||||
|
{{ else }}
|
||||||
|
{{ .name }}
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{ if .subMenuItems }}
|
||||||
|
<button type="button" class="menu-mobile__expand">{{ partial "svg" "arrow-sm-down.svg" }}</button>
|
||||||
|
{{ end }}
|
||||||
|
</div>
|
||||||
|
{{ if .subMenuItems }}
|
||||||
|
<ul class="menu-mobile__subitems">
|
||||||
|
{{ if .url }}
|
||||||
|
<li class="menu-mobile__section-link">
|
||||||
|
<a class="link link_neutral link_sm" href="{{ .url }}">
|
||||||
|
{{ .name }}
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
{{ end }}
|
||||||
|
{{ range .subMenuItems }}
|
||||||
|
<a href="{{ .url }}">
|
||||||
|
<li class="menu-mobile__subitem">
|
||||||
|
<span style="background-image: url(/img/menu/{{ .icon }})"> </span>
|
||||||
|
{{ .name }}
|
||||||
|
</li>
|
||||||
|
</a>
|
||||||
|
{{ end }}
|
||||||
|
</ul>
|
||||||
|
{{ end }}
|
||||||
|
</li>
|
||||||
|
{{ end }}
|
||||||
|
</ul>
|
||||||
|
<div class="menu-mobile__controls">
|
||||||
|
<a
|
||||||
|
data-metric-loc="mobile_nav"
|
||||||
|
href="{{ .Params.logIn.url }}"
|
||||||
|
class="button button_outlined button_lg menu-mobile__login"
|
||||||
|
target="_blank"
|
||||||
|
>
|
||||||
|
{{ .Params.logIn.text }}
|
||||||
|
</a>
|
||||||
|
<a
|
||||||
|
data-metric-loc="mobile_nav"
|
||||||
|
href="{{ .Params.startFree.url }}"
|
||||||
|
class="button button_contained button_lg"
|
||||||
|
target="_blank"
|
||||||
|
>
|
||||||
|
{{ .Params.startFree.text }}
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{ end }}
|
||||||
|
</header>
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
{{ $context := . }}
|
||||||
|
<section class="docs-core__data">
|
||||||
|
<div class="d-flex justify-content-between align-items-center flex-wrap column-gap-4 mb-5 mb-lg-3">
|
||||||
|
<div>
|
||||||
|
<h2>{{ .title }}</h2>
|
||||||
|
<p class="mb-3">{{ .description }}</p>
|
||||||
|
</div>
|
||||||
|
{{ if .button }}
|
||||||
|
<a
|
||||||
|
href="{{ .button.url }}"
|
||||||
|
{{ if strings.HasPrefix .button.url "https://" }}target="_blank"{{ end }}
|
||||||
|
class="button button_outlined button_sm"
|
||||||
|
>
|
||||||
|
{{ .button.text }}
|
||||||
|
</a>
|
||||||
|
{{ end }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row g-4 g-lg-3">
|
||||||
|
{{ range $index, $element := .cards }}
|
||||||
|
{{ $cardsPerRow := $context.cardsPerRow | default 3 }}
|
||||||
|
{{ partial $context.cardsPartial (dict "card" $element "cardsPerRow" $cardsPerRow) }}
|
||||||
|
{{ end }}
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||