{{ snippet.title }}
+{{ snippet.description }}
+-
+ {% for tag in snippet.tags.all %}
+
- {{ tag.name }} + {% endfor %} +
diff --git a/base/components/components.py b/base/components/components.py
index 9dee4bb1..9cc72c7d 100644
--- a/base/components/components.py
+++ b/base/components/components.py
@@ -7,6 +7,25 @@
from base.templatetags.base_templatetags import querystring
+@register("icon")
+class Icon(Component):
+
+ class Kwargs(BaseModel):
+ kind: Literal["heart", "bookmark"]
+ color: str
+ label: str
+
+ template_file = "icon.html"
+
+ def get_template_data(self, args, kwargs, slots, context):
+ return {
+ "kind": kwargs.kind,
+ "label": kwargs.label,
+ "color": kwargs.color,
+ "classes": "w-[18px] h-[18px]",
+ }
+
+
class PaginationItem(BaseModel):
kind: Literal["current", "ellipsis", "number"]
text: Optional[str | int] = None
diff --git a/base/components/icon.html b/base/components/icon.html
new file mode 100644
index 00000000..067c9ce6
--- /dev/null
+++ b/base/components/icon.html
@@ -0,0 +1,5 @@
+{% if kind == 'heart' %}
+
+{% elif kind == 'bookmark' %}
+
+{% endif %}
diff --git a/base/main.py b/base/main.py
new file mode 100644
index 00000000..ec29a514
--- /dev/null
+++ b/base/main.py
@@ -0,0 +1,31 @@
+from .pagination import PAGE_VAR, Pagination
+
+
+class ObjectList:
+ pagination_class = Pagination
+
+ def __init__(self, request, model, queryset, list_per_page):
+ self.model = model
+ self.queryset = queryset
+ self.list_per_page = list_per_page
+ self.params = dict(request.GET.lists())
+ if PAGE_VAR in self.params:
+ del self.params[PAGE_VAR]
+ self.result_objects = self.get_objects(request)
+
+ def __iter__(self):
+ return iter(self.result_objects)
+
+ def paginate(self, request, queryset):
+ pagination = self.pagination_class(
+ request,
+ self.model,
+ queryset,
+ self.list_per_page,
+ )
+ self.pagination = pagination
+ return pagination.get_objects()
+
+ def get_objects(self, request):
+ paginate_result = self.paginate(request, self.queryset)
+ return paginate_result
diff --git a/cab/components/components.py b/cab/components/components.py
new file mode 100644
index 00000000..2138a5e1
--- /dev/null
+++ b/cab/components/components.py
@@ -0,0 +1,19 @@
+from django_components import Component, register
+from pydantic import BaseModel
+
+from base.main import ObjectList
+
+
+@register("snippet_list")
+class SnippetListComponent(Component):
+
+ template_file = "snippet_list.html"
+
+ class Kwargs(BaseModel):
+ snippet_list: ObjectList
+ model_config = {"arbitrary_types_allowed": True}
+
+ def get_template_data(self, args, kwargs, slots, context):
+ return {
+ "snippet_list": kwargs.snippet_list.result_objects,
+ }
diff --git a/cab/components/snippet_list.html b/cab/components/snippet_list.html
new file mode 100644
index 00000000..a79277e9
--- /dev/null
+++ b/cab/components/snippet_list.html
@@ -0,0 +1,46 @@
+ {{ snippet.description }}Snippet List
+ {{ snippet.title }}
+
+ {% for tag in snippet.tags.all %}
+
+