singularity-components 0.1.140 → 0.1.193
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +36 -4
- package/dist/components/blocks/cards/blogpost-card.d.ts +13 -0
- package/dist/components/blocks/cards/blogpost-card.js +79 -0
- package/dist/components/blocks/cards/blogpost-card.js.map +1 -0
- package/dist/components/blocks/cards/card.d.ts +14 -0
- package/dist/components/blocks/cards/card.js +86 -0
- package/dist/components/blocks/cards/card.js.map +1 -0
- package/dist/components/blocks/empty-state/EmptyState.d.ts +15 -0
- package/dist/components/blocks/empty-state/EmptyState.js +36 -0
- package/dist/components/blocks/empty-state/EmptyState.js.map +1 -0
- package/dist/components/blocks/index.d.ts +5 -0
- package/dist/components/blocks/index.js +5 -0
- package/dist/components/blocks/index.js.map +1 -0
- package/dist/components/blocks/post-list/post-filters.d.ts +19 -0
- package/dist/components/blocks/post-list/post-filters.js +99 -0
- package/dist/components/blocks/post-list/post-filters.js.map +1 -0
- package/dist/components/blocks/post-list/post-list-with-filters.d.ts +19 -0
- package/dist/components/blocks/post-list/post-list-with-filters.js +439 -0
- package/dist/components/blocks/post-list/post-list-with-filters.js.map +1 -0
- package/dist/components/index.d.ts +43 -10
- package/dist/components/index.js +5 -3
- package/dist/components/index.js.map +1 -1
- package/dist/components/pages/admin/admin-page.d.ts +8 -0
- package/dist/components/pages/admin/admin-page.js +299 -0
- package/dist/components/pages/admin/admin-page.js.map +1 -0
- package/dist/components/pages/blogpost/blogpost.d.ts +5 -0
- package/dist/components/pages/blogpost/blogpost.js +440 -0
- package/dist/components/pages/blogpost/blogpost.js.map +1 -0
- package/dist/components/pages/category/category-page.d.ts +8 -0
- package/dist/components/pages/category/category-page.js +69 -0
- package/dist/components/pages/category/category-page.js.map +1 -0
- package/dist/components/pages/chat/chat-page.d.ts +5 -0
- package/dist/components/pages/chat/chat-page.js +209 -0
- package/dist/components/pages/chat/chat-page.js.map +1 -0
- package/dist/components/pages/index.d.ts +11 -0
- package/dist/components/pages/index.js +11 -0
- package/dist/components/pages/index.js.map +1 -0
- package/dist/components/pages/login/login-page.d.ts +19 -0
- package/dist/components/pages/login/login-page.js +108 -0
- package/dist/components/pages/login/login-page.js.map +1 -0
- package/dist/components/pages/maintenance/maintenance-page.d.ts +5 -0
- package/dist/components/pages/maintenance/maintenance-page.js +50 -0
- package/dist/components/pages/maintenance/maintenance-page.js.map +1 -0
- package/dist/components/pages/not-found/not-found.d.ts +10 -0
- package/dist/components/pages/not-found/not-found.js +64 -0
- package/dist/components/pages/not-found/not-found.js.map +1 -0
- package/dist/components/pages/privacy/privacy-page.d.ts +15 -0
- package/dist/components/pages/privacy/privacy-page.js +98 -0
- package/dist/components/pages/privacy/privacy-page.js.map +1 -0
- package/dist/components/pages/search/search-page.d.ts +5 -0
- package/dist/components/pages/search/search-page.js +18 -0
- package/dist/components/pages/search/search-page.js.map +1 -0
- package/dist/components/pages/startpage/startpage.d.ts +5 -0
- package/dist/components/pages/startpage/startpage.js +50 -0
- package/dist/components/pages/startpage/startpage.js.map +1 -0
- package/dist/components/pages/terms/terms-page.d.ts +15 -0
- package/dist/components/pages/terms/terms-page.js +98 -0
- package/dist/components/pages/terms/terms-page.js.map +1 -0
- package/dist/components/primitives/accordion/accordion.js +1 -1
- package/dist/components/primitives/accordion/accordion.js.map +1 -1
- package/dist/components/primitives/alert/alert.js +1 -1
- package/dist/components/primitives/alert/alert.js.map +1 -1
- package/dist/components/primitives/avatar/avatar.d.ts +14 -0
- package/dist/components/primitives/avatar/avatar.js +103 -0
- package/dist/components/primitives/avatar/avatar.js.map +1 -0
- package/dist/components/primitives/badge/badge.d.ts +12 -4
- package/dist/components/primitives/badge/badge.js +15 -15
- package/dist/components/primitives/badge/badge.js.map +1 -1
- package/dist/components/primitives/badge/badges.js +1 -1
- package/dist/components/primitives/badge/badges.js.map +1 -1
- package/dist/components/primitives/{button → buttons}/button.d.ts +15 -9
- package/dist/components/primitives/buttons/button.js +92 -0
- package/dist/components/primitives/buttons/button.js.map +1 -0
- package/dist/components/primitives/buttons/icon-button.d.ts +33 -0
- package/dist/components/primitives/buttons/icon-button.js +61 -0
- package/dist/components/primitives/buttons/icon-button.js.map +1 -0
- package/dist/components/primitives/buttons/link-button.d.ts +16 -0
- package/dist/components/primitives/buttons/link-button.js +35 -0
- package/dist/components/primitives/buttons/link-button.js.map +1 -0
- package/dist/components/primitives/collapsible/collapsible.d.ts +9 -0
- package/dist/components/primitives/collapsible/collapsible.js +53 -0
- package/dist/components/primitives/collapsible/collapsible.js.map +1 -0
- package/dist/components/primitives/dropdown-menu/dropdown-menu.d.ts +30 -0
- package/dist/components/primitives/dropdown-menu/dropdown-menu.js +164 -0
- package/dist/components/primitives/dropdown-menu/dropdown-menu.js.map +1 -0
- package/dist/components/primitives/forms/checkbox.d.ts +6 -0
- package/dist/components/primitives/forms/checkbox.js +30 -0
- package/dist/components/primitives/forms/checkbox.js.map +1 -0
- package/dist/components/primitives/forms/field.d.ts +29 -0
- package/dist/components/primitives/forms/field.js +218 -0
- package/dist/components/primitives/forms/field.js.map +1 -0
- package/dist/components/primitives/forms/input.d.ts +6 -0
- package/dist/components/primitives/forms/input.js +22 -0
- package/dist/components/primitives/forms/input.js.map +1 -0
- package/dist/components/primitives/forms/select.d.ts +22 -0
- package/dist/components/primitives/forms/select.js +169 -0
- package/dist/components/primitives/forms/select.js.map +1 -0
- package/dist/components/primitives/forms/textarea.d.ts +6 -0
- package/dist/components/primitives/forms/textarea.js +20 -0
- package/dist/components/primitives/forms/textarea.js.map +1 -0
- package/dist/components/primitives/icon/icon.d.ts +10 -3
- package/dist/components/primitives/icon/icon.js +15 -14
- package/dist/components/primitives/icon/icon.js.map +1 -1
- package/dist/components/primitives/index.d.ts +25 -7
- package/dist/components/primitives/index.js +31 -18
- package/dist/components/primitives/index.js.map +1 -1
- package/dist/components/primitives/label/label.d.ts +6 -0
- package/dist/components/primitives/label/label.js +22 -0
- package/dist/components/primitives/label/label.js.map +1 -0
- package/dist/components/primitives/layout/layout.d.ts +8 -4
- package/dist/components/primitives/layout/layout.js +35 -17
- package/dist/components/primitives/layout/layout.js.map +1 -1
- package/dist/components/primitives/link/link.d.ts +42 -0
- package/dist/components/primitives/link/link.js +83 -0
- package/dist/components/primitives/link/link.js.map +1 -0
- package/dist/components/primitives/separator/separator.js +1 -1
- package/dist/components/primitives/separator/separator.js.map +1 -1
- package/dist/components/primitives/sheet/sheet.d.ts +29 -0
- package/dist/components/primitives/sheet/sheet.js +117 -0
- package/dist/components/primitives/sheet/sheet.js.map +1 -0
- package/dist/components/primitives/skeleton/skeleton.js +1 -1
- package/dist/components/primitives/skeleton/skeleton.js.map +1 -1
- package/dist/components/primitives/sonner/sonner.d.ts +7 -0
- package/dist/components/primitives/sonner/sonner.js +42 -0
- package/dist/components/primitives/sonner/sonner.js.map +1 -0
- package/dist/components/primitives/sonner/use-toast.d.ts +24 -0
- package/dist/components/primitives/sonner/use-toast.js +21 -0
- package/dist/components/primitives/sonner/use-toast.js.map +1 -0
- package/dist/components/primitives/spinner/spinner.js +1 -1
- package/dist/components/primitives/spinner/spinner.js.map +1 -1
- package/dist/components/primitives/stack/stack.d.ts +5 -1
- package/dist/components/primitives/stack/stack.js +46 -5
- package/dist/components/primitives/stack/stack.js.map +1 -1
- package/dist/components/primitives/text/{text-heading.d.ts → heading.d.ts} +5 -5
- package/dist/components/primitives/text/heading.js +53 -0
- package/dist/components/primitives/text/heading.js.map +1 -0
- package/dist/components/primitives/text/internal/text-element.d.ts +30 -4
- package/dist/components/primitives/text/internal/text-element.js +24 -14
- package/dist/components/primitives/text/internal/text-element.js.map +1 -1
- package/dist/components/primitives/text/text-code.d.ts +26 -0
- package/dist/components/primitives/text/text-code.js +44 -0
- package/dist/components/primitives/text/text-code.js.map +1 -0
- package/dist/components/primitives/text/text-div.d.ts +1 -1
- package/dist/components/primitives/text/text-div.js +2 -2
- package/dist/components/primitives/text/text-div.js.map +1 -1
- package/dist/components/primitives/text/text-span.js +2 -2
- package/dist/components/primitives/text/text-span.js.map +1 -1
- package/dist/components/primitives/text/text-time.js +2 -2
- package/dist/components/primitives/text/text-time.js.map +1 -1
- package/dist/components/primitives/text/text.d.ts +16 -0
- package/dist/components/primitives/text/{text-paragraph.js → text.js} +16 -5
- package/dist/components/primitives/text/text.js.map +1 -0
- package/dist/components/primitives/{ui-image.d.ts → ui-image/ui-image.d.ts} +1 -1
- package/dist/components/primitives/{ui-image.js → ui-image/ui-image.js} +4 -7
- package/dist/components/primitives/ui-image/ui-image.js.map +1 -0
- package/dist/components/primitives/ui-link/ui-link.d.ts +8 -0
- package/dist/components/primitives/ui-link/ui-link.js +19 -0
- package/dist/components/primitives/ui-link/ui-link.js.map +1 -0
- package/dist/components/providers/LinkContext.d.ts +1 -1
- package/dist/components/providers/LinkContext.js +1 -1
- package/dist/components/providers/LinkContext.js.map +1 -1
- package/dist/components/providers/SingularityContext.d.ts +4 -1
- package/dist/components/providers/SingularityContext.js +7 -3
- package/dist/components/providers/SingularityContext.js.map +1 -1
- package/dist/components/providers/auth-provider.d.ts +15 -0
- package/dist/components/providers/auth-provider.js +30 -0
- package/dist/components/providers/auth-provider.js.map +1 -0
- package/dist/components/providers/index.d.ts +3 -0
- package/dist/components/providers/index.js +5 -3
- package/dist/components/providers/index.js.map +1 -1
- package/dist/components/providers/theme-provider.d.ts +27 -0
- package/dist/components/providers/theme-provider.js +75 -0
- package/dist/components/providers/theme-provider.js.map +1 -0
- package/dist/components/templates/container/container.d.ts +20 -0
- package/dist/components/templates/container/container.js +58 -0
- package/dist/components/templates/container/container.js.map +1 -0
- package/dist/components/templates/footer/footer.d.ts +5 -0
- package/dist/components/templates/footer/footer.js +12 -0
- package/dist/components/templates/footer/footer.js.map +1 -0
- package/dist/components/templates/form/form.d.ts +5 -0
- package/dist/components/templates/form/form.js +141 -0
- package/dist/components/templates/form/form.js.map +1 -0
- package/dist/components/templates/hero/hero.d.ts +18 -0
- package/dist/components/templates/hero/hero.js +301 -0
- package/dist/components/templates/hero/hero.js.map +1 -0
- package/dist/components/templates/index.d.ts +5 -0
- package/dist/components/templates/index.js +5 -0
- package/dist/components/templates/index.js.map +1 -0
- package/dist/components/templates/navigation/header.d.ts +19 -0
- package/dist/components/templates/navigation/header.js +222 -0
- package/dist/components/templates/navigation/header.js.map +1 -0
- package/dist/components/templates/navigation/index.d.ts +3 -0
- package/dist/components/templates/navigation/index.js +2 -0
- package/dist/components/templates/navigation/index.js.map +1 -0
- package/dist/css/variables.css +75 -73
- package/dist/css/variables.css.map +1 -1
- package/dist/data/authors.d.ts +12 -0
- package/dist/data/authors.js +33 -0
- package/dist/data/authors.js.map +1 -0
- package/dist/data/posts.d.ts +22 -0
- package/dist/data/posts.js +285 -0
- package/dist/data/posts.js.map +1 -0
- package/dist/index.d.ts +43 -10
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/helpers/index.js +1 -1
- package/dist/lib/helpers/index.js.map +1 -1
- package/dist/lib/hooks/useIsClient.d.ts +3 -0
- package/dist/lib/hooks/useIsClient.js +14 -0
- package/dist/lib/hooks/useIsClient.js.map +1 -0
- package/dist/lib/index.d.ts +1 -0
- package/dist/lib/index.js +2 -1
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/types.d.ts +4 -8
- package/dist/main.css +2026 -455
- package/dist/main.css.map +1 -1
- package/dist/{utils.js → utils/index.js} +1 -1
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/index.test.js +37 -0
- package/dist/utils/index.test.js.map +1 -0
- package/package.json +80 -44
- package/dist/components/primitives/accordion/accordion.stories.d.ts +0 -15
- package/dist/components/primitives/accordion/accordion.stories.js +0 -60
- package/dist/components/primitives/accordion/accordion.stories.js.map +0 -1
- package/dist/components/primitives/alert/alert.stories.d.ts +0 -22
- package/dist/components/primitives/alert/alert.stories.js +0 -37
- package/dist/components/primitives/alert/alert.stories.js.map +0 -1
- package/dist/components/primitives/button/button.js +0 -56
- package/dist/components/primitives/button/button.js.map +0 -1
- package/dist/components/primitives/button/button.stories.d.ts +0 -34
- package/dist/components/primitives/button/button.stories.js +0 -74
- package/dist/components/primitives/button/button.stories.js.map +0 -1
- package/dist/components/primitives/button/button_with_icon_variant.js +0 -1
- package/dist/components/primitives/button/button_with_icon_variant.js.map +0 -1
- package/dist/components/primitives/icon/icon.stories.d.ts +0 -27
- package/dist/components/primitives/icon/icon.stories.js +0 -30
- package/dist/components/primitives/icon/icon.stories.js.map +0 -1
- package/dist/components/primitives/layout/layout.stories.d.ts +0 -32
- package/dist/components/primitives/layout/layout.stories.js +0 -72
- package/dist/components/primitives/layout/layout.stories.js.map +0 -1
- package/dist/components/primitives/separator/separator.stories.d.ts +0 -15
- package/dist/components/primitives/separator/separator.stories.js +0 -18
- package/dist/components/primitives/separator/separator.stories.js.map +0 -1
- package/dist/components/primitives/skeleton/skeleton.stories.d.ts +0 -13
- package/dist/components/primitives/skeleton/skeleton.stories.js +0 -16
- package/dist/components/primitives/skeleton/skeleton.stories.js.map +0 -1
- package/dist/components/primitives/spinner/spinner.stories.d.ts +0 -16
- package/dist/components/primitives/spinner/spinner.stories.js +0 -34
- package/dist/components/primitives/spinner/spinner.stories.js.map +0 -1
- package/dist/components/primitives/stack/stack.stories.d.ts +0 -13
- package/dist/components/primitives/stack/stack.stories.js +0 -26
- package/dist/components/primitives/stack/stack.stories.js.map +0 -1
- package/dist/components/primitives/text/text-div.stories.d.ts +0 -32
- package/dist/components/primitives/text/text-div.stories.js +0 -59
- package/dist/components/primitives/text/text-div.stories.js.map +0 -1
- package/dist/components/primitives/text/text-heading.js +0 -53
- package/dist/components/primitives/text/text-heading.js.map +0 -1
- package/dist/components/primitives/text/text-heading.stories.d.ts +0 -27
- package/dist/components/primitives/text/text-heading.stories.js +0 -47
- package/dist/components/primitives/text/text-heading.stories.js.map +0 -1
- package/dist/components/primitives/text/text-paragraph.d.ts +0 -10
- package/dist/components/primitives/text/text-paragraph.js.map +0 -1
- package/dist/components/primitives/text/text-span.stories.d.ts +0 -31
- package/dist/components/primitives/text/text-span.stories.js +0 -59
- package/dist/components/primitives/text/text-span.stories.js.map +0 -1
- package/dist/components/primitives/ui-image.js.map +0 -1
- package/dist/components/primitives/ui-link.d.ts +0 -6
- package/dist/components/primitives/ui-link.js +0 -22
- package/dist/components/primitives/ui-link.js.map +0 -1
- package/dist/components/units/cards/blog-card.d.ts +0 -19
- package/dist/components/units/cards/blog-card.js +0 -82
- package/dist/components/units/cards/blog-card.js.map +0 -1
- package/dist/components/units/cards/card.d.ts +0 -15
- package/dist/components/units/cards/card.js +0 -89
- package/dist/components/units/cards/card.js.map +0 -1
- package/dist/components/units/cards/cards.d.ts +0 -17
- package/dist/components/units/cards/cards.js +0 -37
- package/dist/components/units/cards/cards.js.map +0 -1
- package/dist/components/units/index.d.ts +0 -5
- package/dist/components/units/index.js +0 -4
- package/dist/components/units/index.js.map +0 -1
- package/dist/utils.js.map +0 -1
- /package/dist/{utils.d.ts → utils/index.d.ts} +0 -0
- /package/dist/{components/primitives/button/button_with_icon_variant.d.ts → utils/index.test.d.ts} +0 -0
package/README.md
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
## Build
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
```bash
|
|
4
|
+
pnpm build
|
|
5
|
+
```
|
|
4
6
|
|
|
5
7
|
### Include component in build
|
|
6
8
|
|
|
@@ -8,12 +10,42 @@ Export from main.ts
|
|
|
8
10
|
|
|
9
11
|
## Publish to npm
|
|
10
12
|
|
|
11
|
-
|
|
13
|
+
```bash
|
|
14
|
+
pnpm login (if needed)
|
|
15
|
+
pnpm publish
|
|
16
|
+
```
|
|
12
17
|
|
|
13
18
|
## Start Storybook:
|
|
14
19
|
|
|
15
|
-
|
|
20
|
+
```bash
|
|
21
|
+
pnpm storybook
|
|
22
|
+
```
|
|
16
23
|
|
|
17
24
|
## Pack locally
|
|
18
25
|
|
|
19
|
-
|
|
26
|
+
```bash
|
|
27
|
+
pnpm pack singularity-components
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
OR
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
pnpm pack
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Can check with `pnpm pack --dry-run`
|
|
37
|
+
Or run `pnpm pack`
|
|
38
|
+
|
|
39
|
+
Creates a `singularity-components-1.0.0.tgz`
|
|
40
|
+
|
|
41
|
+
In other proj add:
|
|
42
|
+
|
|
43
|
+
```json
|
|
44
|
+
{
|
|
45
|
+
"dependencies": {
|
|
46
|
+
"singularity-components": "file:../path-to-tarball/singularity-components-1.X.X.tgz"
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
and `pnpm install`
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
|
|
3
|
+
interface Props {
|
|
4
|
+
id: number;
|
|
5
|
+
image: string;
|
|
6
|
+
categories: string[];
|
|
7
|
+
date: string;
|
|
8
|
+
title: string;
|
|
9
|
+
excerpt: string;
|
|
10
|
+
}
|
|
11
|
+
declare function BlogPostCard({ id, image, title, categories, date, excerpt, }: Props): react_jsx_runtime.JSX.Element;
|
|
12
|
+
|
|
13
|
+
export { BlogPostCard as default };
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Card, CardContent } from "./card.js";
|
|
3
|
+
import { Link } from "../../primitives/link/link.js";
|
|
4
|
+
import {
|
|
5
|
+
TextTime,
|
|
6
|
+
Heading,
|
|
7
|
+
Text,
|
|
8
|
+
TextSpan,
|
|
9
|
+
Badges,
|
|
10
|
+
Badge,
|
|
11
|
+
Icon,
|
|
12
|
+
UiImage
|
|
13
|
+
} from "../../primitives/index.js";
|
|
14
|
+
function BlogPostCard({
|
|
15
|
+
id,
|
|
16
|
+
image,
|
|
17
|
+
title,
|
|
18
|
+
categories,
|
|
19
|
+
date,
|
|
20
|
+
excerpt
|
|
21
|
+
}) {
|
|
22
|
+
return /* @__PURE__ */ jsx(
|
|
23
|
+
Link,
|
|
24
|
+
{
|
|
25
|
+
to: `/posts/${id}`,
|
|
26
|
+
variant: "no-decoration",
|
|
27
|
+
className: "sg:group sg:block sg:h-full",
|
|
28
|
+
children: /* @__PURE__ */ jsxs(Card, { className: "sg:overflow-hidden sg:transition-shadow sg:hover:shadow-lg sg:h-full sg:flex sg:flex-col", children: [
|
|
29
|
+
/* @__PURE__ */ jsx("div", { className: "sg:aspect-16/10 sg:overflow-hidden", children: /* @__PURE__ */ jsx(
|
|
30
|
+
UiImage,
|
|
31
|
+
{
|
|
32
|
+
src: image,
|
|
33
|
+
alt: title,
|
|
34
|
+
className: "sg:h-full sg:w-full sg:object-cover sg:transition-transform sg:duration-300 sg:group-hover:scale-105",
|
|
35
|
+
loading: "lazy"
|
|
36
|
+
}
|
|
37
|
+
) }),
|
|
38
|
+
/* @__PURE__ */ jsxs(CardContent, { className: "sg:p-5 sg:flex sg:flex-col sg:grow", children: [
|
|
39
|
+
categories && categories.length > 0 && /* @__PURE__ */ jsx(Badges, { className: "sg:mb-2", children: categories.map((cat) => /* @__PURE__ */ jsx(Badge, { variant: "secondary", children: cat }, cat)) }),
|
|
40
|
+
/* @__PURE__ */ jsx(TextTime, { size: "xs", foreground: "muted-foreground", children: date }),
|
|
41
|
+
/* @__PURE__ */ jsx(
|
|
42
|
+
Heading,
|
|
43
|
+
{
|
|
44
|
+
variant: "h6",
|
|
45
|
+
as: "h3",
|
|
46
|
+
className: "sg:mt-1 sg:group-hover:text-primary sg:transition-colors",
|
|
47
|
+
children: title
|
|
48
|
+
}
|
|
49
|
+
),
|
|
50
|
+
/* @__PURE__ */ jsx(
|
|
51
|
+
Text,
|
|
52
|
+
{
|
|
53
|
+
size: "sm",
|
|
54
|
+
foreground: "muted-foreground",
|
|
55
|
+
className: "sg:mt-2 sg:line-clamp-2",
|
|
56
|
+
children: excerpt
|
|
57
|
+
}
|
|
58
|
+
),
|
|
59
|
+
/* @__PURE__ */ jsxs(
|
|
60
|
+
TextSpan,
|
|
61
|
+
{
|
|
62
|
+
size: "sm",
|
|
63
|
+
foreground: "primary",
|
|
64
|
+
className: "sg:mt-auto sg:pt-3 sg:inline-flex sg:items-center sg:gap-1",
|
|
65
|
+
children: [
|
|
66
|
+
"Read more ",
|
|
67
|
+
/* @__PURE__ */ jsx(Icon, { icon: "ArrowRight", size: "xs" })
|
|
68
|
+
]
|
|
69
|
+
}
|
|
70
|
+
)
|
|
71
|
+
] })
|
|
72
|
+
] })
|
|
73
|
+
}
|
|
74
|
+
);
|
|
75
|
+
}
|
|
76
|
+
export {
|
|
77
|
+
BlogPostCard as default
|
|
78
|
+
};
|
|
79
|
+
//# sourceMappingURL=blogpost-card.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/blocks/cards/blogpost-card.tsx"],"sourcesContent":["import { Card, CardContent } from \"./card\";\r\nimport { Link } from \"../../primitives/link/link\";\r\nimport {\r\n TextTime,\r\n Heading,\r\n Text,\r\n TextSpan,\r\n Badges,\r\n Badge,\r\n Icon,\r\n UiImage,\r\n} from \"../../primitives/index\";\r\n\r\ninterface Props {\r\n id: number;\r\n image: string;\r\n categories: string[];\r\n date: string;\r\n title: string;\r\n excerpt: string;\r\n}\r\n\r\nexport default function BlogPostCard({\r\n id,\r\n image,\r\n title,\r\n categories,\r\n date,\r\n excerpt,\r\n}: Props) {\r\n return (\r\n <Link\r\n to={`/posts/${id}`}\r\n variant=\"no-decoration\"\r\n className=\"sg:group sg:block sg:h-full\"\r\n >\r\n <Card className=\"sg:overflow-hidden sg:transition-shadow sg:hover:shadow-lg sg:h-full sg:flex sg:flex-col\">\r\n <div className=\"sg:aspect-16/10 sg:overflow-hidden\">\r\n <UiImage\r\n src={image}\r\n alt={title}\r\n className=\"sg:h-full sg:w-full sg:object-cover sg:transition-transform sg:duration-300 sg:group-hover:scale-105\"\r\n loading=\"lazy\"\r\n />\r\n </div>\r\n <CardContent className=\"sg:p-5 sg:flex sg:flex-col sg:grow\">\r\n {categories && categories.length > 0 && (\r\n <Badges className=\"sg:mb-2\">\r\n {categories.map((cat) => (\r\n <Badge key={cat} variant=\"secondary\">\r\n {cat}\r\n </Badge>\r\n ))}\r\n </Badges>\r\n )}\r\n <TextTime size=\"xs\" foreground=\"muted-foreground\">\r\n {date}\r\n </TextTime>\r\n <Heading\r\n variant=\"h6\"\r\n as=\"h3\"\r\n className=\"sg:mt-1 sg:group-hover:text-primary sg:transition-colors\"\r\n >\r\n {title}\r\n </Heading>\r\n <Text\r\n size=\"sm\"\r\n foreground=\"muted-foreground\"\r\n className=\"sg:mt-2 sg:line-clamp-2\"\r\n >\r\n {excerpt}\r\n </Text>\r\n <TextSpan\r\n size=\"sm\"\r\n foreground=\"primary\"\r\n className=\"sg:mt-auto sg:pt-3 sg:inline-flex sg:items-center sg:gap-1\"\r\n >\r\n Read more <Icon icon=\"ArrowRight\" size=\"xs\" />\r\n </TextSpan>\r\n </CardContent>\r\n </Card>\r\n </Link>\r\n );\r\n}\r\n"],"mappings":"AAsCU,cAkCA,YAlCA;AAtCV,SAAS,MAAM,mBAAmB;AAClC,SAAS,YAAY;AACrB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAWQ,SAAR,aAA8B;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAU;AACR,SACE;AAAA,IAAC;AAAA;AAAA,MACC,IAAI,UAAU,EAAE;AAAA,MAChB,SAAQ;AAAA,MACR,WAAU;AAAA,MAEV,+BAAC,QAAK,WAAU,4FACd;AAAA,4BAAC,SAAI,WAAU,sCACb;AAAA,UAAC;AAAA;AAAA,YACC,KAAK;AAAA,YACL,KAAK;AAAA,YACL,WAAU;AAAA,YACV,SAAQ;AAAA;AAAA,QACV,GACF;AAAA,QACA,qBAAC,eAAY,WAAU,sCACpB;AAAA,wBAAc,WAAW,SAAS,KACjC,oBAAC,UAAO,WAAU,WACf,qBAAW,IAAI,CAAC,QACf,oBAAC,SAAgB,SAAQ,aACtB,iBADS,GAEZ,CACD,GACH;AAAA,UAEF,oBAAC,YAAS,MAAK,MAAK,YAAW,oBAC5B,gBACH;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,SAAQ;AAAA,cACR,IAAG;AAAA,cACH,WAAU;AAAA,cAET;AAAA;AAAA,UACH;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,YAAW;AAAA,cACX,WAAU;AAAA,cAET;AAAA;AAAA,UACH;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,YAAW;AAAA,cACX,WAAU;AAAA,cACX;AAAA;AAAA,gBACW,oBAAC,QAAK,MAAK,cAAa,MAAK,MAAK;AAAA;AAAA;AAAA,UAC9C;AAAA,WACF;AAAA,SACF;AAAA;AAAA,EACF;AAEJ;","names":[]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
|
|
4
|
+
declare function Card({ className, size, ...props }: React.ComponentProps<"div"> & {
|
|
5
|
+
size?: "default" | "sm";
|
|
6
|
+
}): react_jsx_runtime.JSX.Element;
|
|
7
|
+
declare function CardHeader({ className, ...props }: React.ComponentProps<"div">): react_jsx_runtime.JSX.Element;
|
|
8
|
+
declare function CardTitle({ className, ...props }: React.ComponentProps<"div">): react_jsx_runtime.JSX.Element;
|
|
9
|
+
declare function CardDescription({ className, ...props }: React.ComponentProps<"div">): react_jsx_runtime.JSX.Element;
|
|
10
|
+
declare function CardAction({ className, ...props }: React.ComponentProps<"div">): react_jsx_runtime.JSX.Element;
|
|
11
|
+
declare function CardContent({ className, ...props }: React.ComponentProps<"div">): react_jsx_runtime.JSX.Element;
|
|
12
|
+
declare function CardFooter({ className, ...props }: React.ComponentProps<"div">): react_jsx_runtime.JSX.Element;
|
|
13
|
+
|
|
14
|
+
export { Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle };
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
import { cn } from "../../../utils/index.js";
|
|
4
|
+
function Card({
|
|
5
|
+
className,
|
|
6
|
+
size = "default",
|
|
7
|
+
...props
|
|
8
|
+
}) {
|
|
9
|
+
return /* @__PURE__ */ jsx(
|
|
10
|
+
"div",
|
|
11
|
+
{
|
|
12
|
+
"data-slot": "card",
|
|
13
|
+
"data-size": size,
|
|
14
|
+
className: cn(
|
|
15
|
+
"sg:ring-foreground/10 sg:bg-card sg:gap-6 sg:overflow-hidden sg:rounded-2xl sg:ring-1 sg:has-[>img:first-child]:pt-0 sg:data-[size=sm]:gap-4 sg:data-[size=sm]:py-4 sg:*:[img:first-child]:rounded-t-xl sg:*:[img:last-child]:rounded-b-xl sg:group/card sg:flex sg:flex-col",
|
|
16
|
+
className
|
|
17
|
+
),
|
|
18
|
+
...props
|
|
19
|
+
}
|
|
20
|
+
);
|
|
21
|
+
}
|
|
22
|
+
function CardHeader({ className, ...props }) {
|
|
23
|
+
return /* @__PURE__ */ jsx(
|
|
24
|
+
"div",
|
|
25
|
+
{
|
|
26
|
+
"data-slot": "card-header",
|
|
27
|
+
className: cn(
|
|
28
|
+
"sg:gap-2 sg:rounded-t-xl sg:px-6 sg:group-data-[size=sm]/card:px-4 sg:[.border-b]:pb-6 sg:group-data-[size=sm]/card:[.border-b]:pb-4 sg:group/card-header sg:@container/card-header sg:grid sg:auto-rows-min sg:items-start sg:has-data-[slot=card-action]:grid-cols-[1fr_auto] sg:has-data-[slot=card-description]:grid-rows-[auto_auto]",
|
|
29
|
+
className
|
|
30
|
+
),
|
|
31
|
+
...props
|
|
32
|
+
}
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
function CardTitle({ className, ...props }) {
|
|
36
|
+
return /* @__PURE__ */ jsx("div", { "data-slot": "card-title", ...props });
|
|
37
|
+
}
|
|
38
|
+
function CardDescription({ className, ...props }) {
|
|
39
|
+
return /* @__PURE__ */ jsx("div", { "data-slot": "card-description", ...props });
|
|
40
|
+
}
|
|
41
|
+
function CardAction({ className, ...props }) {
|
|
42
|
+
return /* @__PURE__ */ jsx(
|
|
43
|
+
"div",
|
|
44
|
+
{
|
|
45
|
+
"data-slot": "card-action",
|
|
46
|
+
className: cn(
|
|
47
|
+
"sg:col-start-2 sg:row-span-2 sg:row-start-1 sg:self-start sg:justify-self-end",
|
|
48
|
+
className
|
|
49
|
+
),
|
|
50
|
+
...props
|
|
51
|
+
}
|
|
52
|
+
);
|
|
53
|
+
}
|
|
54
|
+
function CardContent({ className, ...props }) {
|
|
55
|
+
return /* @__PURE__ */ jsx(
|
|
56
|
+
"div",
|
|
57
|
+
{
|
|
58
|
+
"data-slot": "card-content",
|
|
59
|
+
className: cn("sg:px-6 sg:group-data-[size=sm]/card:px-4", className),
|
|
60
|
+
...props
|
|
61
|
+
}
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
function CardFooter({ className, ...props }) {
|
|
65
|
+
return /* @__PURE__ */ jsx(
|
|
66
|
+
"div",
|
|
67
|
+
{
|
|
68
|
+
"data-slot": "card-footer",
|
|
69
|
+
className: cn(
|
|
70
|
+
"sg:rounded-b-xl sg:px-6 sg:group-data-[size=sm]/card:px-4 sg:[.border-t]:pt-6 sg:group-data-[size=sm]/card:[.border-t]:pt-4 sg:flex sg:items-center",
|
|
71
|
+
className
|
|
72
|
+
),
|
|
73
|
+
...props
|
|
74
|
+
}
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
export {
|
|
78
|
+
Card,
|
|
79
|
+
CardAction,
|
|
80
|
+
CardContent,
|
|
81
|
+
CardDescription,
|
|
82
|
+
CardFooter,
|
|
83
|
+
CardHeader,
|
|
84
|
+
CardTitle
|
|
85
|
+
};
|
|
86
|
+
//# sourceMappingURL=card.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/blocks/cards/card.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cn } from \"../../../utils/index\";\n\nfunction Card({\n className,\n size = \"default\",\n ...props\n}: React.ComponentProps<\"div\"> & { size?: \"default\" | \"sm\" }) {\n return (\n <div\n data-slot=\"card\"\n data-size={size}\n className={cn(\n \"sg:ring-foreground/10 sg:bg-card sg:gap-6 sg:overflow-hidden sg:rounded-2xl sg:ring-1 sg:has-[>img:first-child]:pt-0 sg:data-[size=sm]:gap-4 sg:data-[size=sm]:py-4 sg:*:[img:first-child]:rounded-t-xl sg:*:[img:last-child]:rounded-b-xl sg:group/card sg:flex sg:flex-col\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\n \"sg:gap-2 sg:rounded-t-xl sg:px-6 sg:group-data-[size=sm]/card:px-4 sg:[.border-b]:pb-6 sg:group-data-[size=sm]/card:[.border-b]:pb-4 sg:group/card-header sg:@container/card-header sg:grid sg:auto-rows-min sg:items-start sg:has-data-[slot=card-action]:grid-cols-[1fr_auto] sg:has-data-[slot=card-description]:grid-rows-[auto_auto]\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div data-slot=\"card-title\" {...props} />;\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div data-slot=\"card-description\" {...props} />;\n}\n\nfunction CardAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-action\"\n className={cn(\n \"sg:col-start-2 sg:row-span-2 sg:row-start-1 sg:self-start sg:justify-self-end\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-content\"\n className={cn(\"sg:px-6 sg:group-data-[size=sm]/card:px-4\", className)}\n {...props}\n />\n );\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(\n \"sg:rounded-b-xl sg:px-6 sg:group-data-[size=sm]/card:px-4 sg:[.border-t]:pt-6 sg:group-data-[size=sm]/card:[.border-t]:pt-4 sg:flex sg:items-center\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardAction,\n CardDescription,\n CardContent,\n};\n"],"mappings":"AASI;AATJ,YAAY,WAAW;AACvB,SAAS,UAAU;AAEnB,SAAS,KAAK;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,EACP,GAAG;AACL,GAA8D;AAC5D,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,aAAW;AAAA,MACX,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,WAAW,EAAE,WAAW,GAAG,MAAM,GAAgC;AACxE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,UAAU,EAAE,WAAW,GAAG,MAAM,GAAgC;AACvE,SAAO,oBAAC,SAAI,aAAU,cAAc,GAAG,OAAO;AAChD;AAEA,SAAS,gBAAgB,EAAE,WAAW,GAAG,MAAM,GAAgC;AAC7E,SAAO,oBAAC,SAAI,aAAU,oBAAoB,GAAG,OAAO;AACtD;AAEA,SAAS,WAAW,EAAE,WAAW,GAAG,MAAM,GAAgC;AACxE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,YAAY,EAAE,WAAW,GAAG,MAAM,GAAgC;AACzE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,6CAA6C,SAAS;AAAA,MACnE,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,WAAW,EAAE,WAAW,GAAG,MAAM,GAAgC;AACxE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;","names":[]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { icons } from 'lucide-react';
|
|
3
|
+
|
|
4
|
+
interface Props {
|
|
5
|
+
icon?: keyof typeof icons;
|
|
6
|
+
title: string;
|
|
7
|
+
description?: string;
|
|
8
|
+
actionLabel?: string;
|
|
9
|
+
actionTo?: string;
|
|
10
|
+
onAction?: () => void;
|
|
11
|
+
className?: string;
|
|
12
|
+
}
|
|
13
|
+
declare function EmptyState({ icon, title, description, actionLabel, actionTo, onAction, className, }: Props): react_jsx_runtime.JSX.Element;
|
|
14
|
+
|
|
15
|
+
export { EmptyState as default };
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Button } from "../../primitives/buttons/button.js";
|
|
3
|
+
import { LinkButton } from "../../primitives/buttons/link-button.js";
|
|
4
|
+
import { Heading, Text } from "../../primitives/index.js";
|
|
5
|
+
import { cn } from "../../../utils/index.js";
|
|
6
|
+
import { icons } from "lucide-react";
|
|
7
|
+
function EmptyState({
|
|
8
|
+
icon,
|
|
9
|
+
title,
|
|
10
|
+
description,
|
|
11
|
+
actionLabel,
|
|
12
|
+
actionTo,
|
|
13
|
+
onAction,
|
|
14
|
+
className = ""
|
|
15
|
+
}) {
|
|
16
|
+
const Icon = icon && icons[icon];
|
|
17
|
+
return /* @__PURE__ */ jsxs(
|
|
18
|
+
"div",
|
|
19
|
+
{
|
|
20
|
+
className: cn(
|
|
21
|
+
"sg:flex sg:flex-col sg:items-center sg:justify-center sg:py-16 sg:text-center",
|
|
22
|
+
className
|
|
23
|
+
),
|
|
24
|
+
children: [
|
|
25
|
+
/* @__PURE__ */ jsx("div", { className: "sg:rounded-full sg:bg-muted sg:p-4 sg:mb-4", children: Icon && /* @__PURE__ */ jsx(Icon, {}) }),
|
|
26
|
+
/* @__PURE__ */ jsx(Heading, { variant: "h3", className: "sg:mb-1", children: title }),
|
|
27
|
+
description && /* @__PURE__ */ jsx(Text, { size: "sm", foreground: "muted-foreground", className: "sg:max-w-sm", children: description }),
|
|
28
|
+
actionLabel && (actionTo || onAction) && /* @__PURE__ */ jsx("div", { className: "sg:mt-5", children: actionTo ? /* @__PURE__ */ jsx(LinkButton, { to: actionTo, children: actionLabel }) : /* @__PURE__ */ jsx(Button, { variant: "outline", onClick: onAction, children: actionLabel }) })
|
|
29
|
+
]
|
|
30
|
+
}
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
export {
|
|
34
|
+
EmptyState as default
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=EmptyState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/blocks/empty-state/EmptyState.tsx"],"sourcesContent":["import { Button } from \"../../primitives/buttons/button\";\r\nimport { LinkButton } from \"../../primitives/buttons/link-button\";\r\nimport { Heading, Text } from \"../../primitives/index\";\r\nimport { cn } from \"../../../utils/index\";\r\nimport { icons } from \"lucide-react\";\r\n\r\ninterface Props {\r\n icon?: keyof typeof icons;\r\n title: string;\r\n description?: string;\r\n actionLabel?: string;\r\n actionTo?: string;\r\n onAction?: () => void;\r\n className?: string;\r\n}\r\n\r\nexport default function EmptyState({\r\n icon,\r\n title,\r\n description,\r\n actionLabel,\r\n actionTo,\r\n onAction,\r\n className = \"\",\r\n}: Props) {\r\n const Icon = icon && icons[icon];\r\n return (\r\n <div\r\n className={cn(\r\n \"sg:flex sg:flex-col sg:items-center sg:justify-center sg:py-16 sg:text-center\",\r\n className,\r\n )}\r\n >\r\n <div className=\"sg:rounded-full sg:bg-muted sg:p-4 sg:mb-4\">\r\n {Icon && <Icon />}\r\n </div>\r\n <Heading variant=\"h3\" className=\"sg:mb-1\">\r\n {title}\r\n </Heading>\r\n {description && (\r\n <Text size=\"sm\" foreground=\"muted-foreground\" className=\"sg:max-w-sm\">\r\n {description}\r\n </Text>\r\n )}\r\n {actionLabel && (actionTo || onAction) && (\r\n <div className=\"sg:mt-5\">\r\n {actionTo ? (\r\n <LinkButton to={actionTo}>{actionLabel}</LinkButton>\r\n ) : (\r\n <Button variant=\"outline\" onClick={onAction}>\r\n {actionLabel}\r\n </Button>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n"],"mappings":"AA2BI,SAOa,KAPb;AA3BJ,SAAS,cAAc;AACvB,SAAS,kBAAkB;AAC3B,SAAS,SAAS,YAAY;AAC9B,SAAS,UAAU;AACnB,SAAS,aAAa;AAYP,SAAR,WAA4B;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AACd,GAAU;AACR,QAAM,OAAO,QAAQ,MAAM,IAAI;AAC/B,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MAEA;AAAA,4BAAC,SAAI,WAAU,8CACZ,kBAAQ,oBAAC,QAAK,GACjB;AAAA,QACA,oBAAC,WAAQ,SAAQ,MAAK,WAAU,WAC7B,iBACH;AAAA,QACC,eACC,oBAAC,QAAK,MAAK,MAAK,YAAW,oBAAmB,WAAU,eACrD,uBACH;AAAA,QAED,gBAAgB,YAAY,aAC3B,oBAAC,SAAI,WAAU,WACZ,qBACC,oBAAC,cAAW,IAAI,UAAW,uBAAY,IAEvC,oBAAC,UAAO,SAAQ,WAAU,SAAS,UAChC,uBACH,GAEJ;AAAA;AAAA;AAAA,EAEJ;AAEJ;","names":[]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from './cards/card.js';
|
|
2
|
+
export { PostListWithFilters } from './post-list/post-list-with-filters.js';
|
|
3
|
+
import 'react/jsx-runtime';
|
|
4
|
+
import 'react';
|
|
5
|
+
import '../../data/posts.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/blocks/index.ts"],"sourcesContent":["/**\n * Blocks index\n *\n * Please keep exports sorted alphabetically by path!\n */\n\nexport * from \"./cards/blogpost-card\";\nexport * from \"./cards/card\";\nexport * from \"./empty-state/EmptyState\";\nexport * from \"./post-list/post-list-with-filters\";\n"],"mappings":"AAMA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;","names":[]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
|
|
3
|
+
type SortOption = "newest" | "oldest" | "a-z" | "z-a";
|
|
4
|
+
interface FilterControlsProps {
|
|
5
|
+
categories: string[];
|
|
6
|
+
authors: string[];
|
|
7
|
+
selectedCategories: string[];
|
|
8
|
+
selectedAuthors: string[];
|
|
9
|
+
toggleCategory: (cat: string) => void;
|
|
10
|
+
toggleAuthor: (author: string) => void;
|
|
11
|
+
clearFilters: () => void;
|
|
12
|
+
activeCount: number;
|
|
13
|
+
sortBy: SortOption;
|
|
14
|
+
setSortBy: (s: SortOption) => void;
|
|
15
|
+
hideAuthorFilter?: boolean;
|
|
16
|
+
}
|
|
17
|
+
declare function FilterControls({ categories, authors, selectedCategories, selectedAuthors, toggleCategory, toggleAuthor, clearFilters, activeCount, sortBy, setSortBy, hideAuthorFilter, }: FilterControlsProps): react_jsx_runtime.JSX.Element;
|
|
18
|
+
|
|
19
|
+
export { FilterControls };
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Stack, Text } from "../../primitives/index.js";
|
|
4
|
+
import { Button } from "../../primitives/buttons/button.js";
|
|
5
|
+
import {
|
|
6
|
+
Select,
|
|
7
|
+
SelectContent,
|
|
8
|
+
SelectItem,
|
|
9
|
+
SelectTrigger,
|
|
10
|
+
SelectValue
|
|
11
|
+
} from "../../primitives/forms/select.js";
|
|
12
|
+
function FilterControls({
|
|
13
|
+
categories,
|
|
14
|
+
authors,
|
|
15
|
+
selectedCategories,
|
|
16
|
+
selectedAuthors,
|
|
17
|
+
toggleCategory,
|
|
18
|
+
toggleAuthor,
|
|
19
|
+
clearFilters,
|
|
20
|
+
activeCount,
|
|
21
|
+
sortBy,
|
|
22
|
+
setSortBy,
|
|
23
|
+
hideAuthorFilter
|
|
24
|
+
}) {
|
|
25
|
+
return /* @__PURE__ */ jsxs(Stack, { gap: 5, alignItems: "start", children: [
|
|
26
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
27
|
+
/* @__PURE__ */ jsx(Text, { size: "sm", fontweight: "medium", className: "sg:mb-2", children: "Categories" }),
|
|
28
|
+
/* @__PURE__ */ jsx(Stack, { direction: "row", wrap: "wrap", gap: 2, children: categories.map((cat) => {
|
|
29
|
+
const isSelected = selectedCategories.includes(cat);
|
|
30
|
+
return /* @__PURE__ */ jsx(
|
|
31
|
+
Button,
|
|
32
|
+
{
|
|
33
|
+
variant: isSelected ? "default" : "outline",
|
|
34
|
+
size: "xs",
|
|
35
|
+
onClick: () => toggleCategory(cat),
|
|
36
|
+
children: cat
|
|
37
|
+
},
|
|
38
|
+
cat
|
|
39
|
+
);
|
|
40
|
+
}) })
|
|
41
|
+
] }),
|
|
42
|
+
!hideAuthorFilter && authors.length > 1 && /* @__PURE__ */ jsxs("div", { children: [
|
|
43
|
+
/* @__PURE__ */ jsx(Text, { size: "sm", fontweight: "medium", className: "sg:mb-2", children: "Authors" }),
|
|
44
|
+
/* @__PURE__ */ jsx(Stack, { direction: "row", wrap: "wrap", gap: 2, children: authors.map((author) => {
|
|
45
|
+
const isSelected = selectedAuthors.includes(author);
|
|
46
|
+
return /* @__PURE__ */ jsx(
|
|
47
|
+
Button,
|
|
48
|
+
{
|
|
49
|
+
variant: isSelected ? "default" : "outline",
|
|
50
|
+
size: "xs",
|
|
51
|
+
onClick: () => toggleAuthor(author),
|
|
52
|
+
children: author
|
|
53
|
+
},
|
|
54
|
+
author
|
|
55
|
+
);
|
|
56
|
+
}) })
|
|
57
|
+
] }),
|
|
58
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
59
|
+
/* @__PURE__ */ jsx(
|
|
60
|
+
Text,
|
|
61
|
+
{
|
|
62
|
+
id: "sortby_dropdown",
|
|
63
|
+
size: "sm",
|
|
64
|
+
fontweight: "medium",
|
|
65
|
+
className: "sg:mb-2",
|
|
66
|
+
children: "Sort by"
|
|
67
|
+
}
|
|
68
|
+
),
|
|
69
|
+
/* @__PURE__ */ jsxs(
|
|
70
|
+
Select,
|
|
71
|
+
{
|
|
72
|
+
value: sortBy,
|
|
73
|
+
onValueChange: (v) => setSortBy(v),
|
|
74
|
+
children: [
|
|
75
|
+
/* @__PURE__ */ jsx(
|
|
76
|
+
SelectTrigger,
|
|
77
|
+
{
|
|
78
|
+
className: "sg:w-full",
|
|
79
|
+
"aria-labelledby": "sortby_dropdown",
|
|
80
|
+
children: /* @__PURE__ */ jsx(SelectValue, {})
|
|
81
|
+
}
|
|
82
|
+
),
|
|
83
|
+
/* @__PURE__ */ jsxs(SelectContent, { children: [
|
|
84
|
+
/* @__PURE__ */ jsx(SelectItem, { value: "newest", children: "Newest first" }),
|
|
85
|
+
/* @__PURE__ */ jsx(SelectItem, { value: "oldest", children: "Oldest first" }),
|
|
86
|
+
/* @__PURE__ */ jsx(SelectItem, { value: "a-z", children: "Title A\u2013Z" }),
|
|
87
|
+
/* @__PURE__ */ jsx(SelectItem, { value: "z-a", children: "Title Z\u2013A" })
|
|
88
|
+
] })
|
|
89
|
+
]
|
|
90
|
+
}
|
|
91
|
+
)
|
|
92
|
+
] }),
|
|
93
|
+
activeCount > 0 && /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "xs", onClick: clearFilters, iconStart: "X", children: "Clear all filters" })
|
|
94
|
+
] });
|
|
95
|
+
}
|
|
96
|
+
export {
|
|
97
|
+
FilterControls
|
|
98
|
+
};
|
|
99
|
+
//# sourceMappingURL=post-filters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/blocks/post-list/post-filters.tsx"],"sourcesContent":["\"use client\";\nimport { Stack, Text } from \"../../primitives/index\";\nimport { Button } from \"../../primitives/buttons/button\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../../primitives/forms/select\";\n\ntype SortOption = \"newest\" | \"oldest\" | \"a-z\" | \"z-a\";\n\ninterface FilterControlsProps {\n categories: string[];\n authors: string[];\n selectedCategories: string[];\n selectedAuthors: string[];\n toggleCategory: (cat: string) => void;\n toggleAuthor: (author: string) => void;\n clearFilters: () => void;\n activeCount: number;\n sortBy: SortOption;\n setSortBy: (s: SortOption) => void;\n hideAuthorFilter?: boolean;\n}\n\nexport function FilterControls({\n categories,\n authors,\n selectedCategories,\n selectedAuthors,\n toggleCategory,\n toggleAuthor,\n clearFilters,\n activeCount,\n sortBy,\n setSortBy,\n hideAuthorFilter,\n}: FilterControlsProps) {\n return (\n <Stack gap={5} alignItems=\"start\">\n <div>\n <Text size=\"sm\" fontweight=\"medium\" className=\"sg:mb-2\">\n Categories\n </Text>\n <Stack direction=\"row\" wrap=\"wrap\" gap={2}>\n {categories.map((cat) => {\n const isSelected = selectedCategories.includes(cat);\n return (\n <Button\n key={cat}\n variant={isSelected ? \"default\" : \"outline\"}\n size=\"xs\"\n onClick={() => toggleCategory(cat)}\n >\n {cat}\n </Button>\n );\n })}\n </Stack>\n </div>\n {!hideAuthorFilter && authors.length > 1 && (\n <div>\n <Text size=\"sm\" fontweight=\"medium\" className=\"sg:mb-2\">\n Authors\n </Text>\n <Stack direction=\"row\" wrap=\"wrap\" gap={2}>\n {authors.map((author) => {\n const isSelected = selectedAuthors.includes(author);\n return (\n <Button\n key={author}\n variant={isSelected ? \"default\" : \"outline\"}\n size=\"xs\"\n onClick={() => toggleAuthor(author)}\n >\n {author}\n </Button>\n );\n })}\n </Stack>\n </div>\n )}\n <div>\n <Text\n id=\"sortby_dropdown\"\n size=\"sm\"\n fontweight=\"medium\"\n className=\"sg:mb-2\"\n >\n Sort by\n </Text>\n <Select\n value={sortBy}\n onValueChange={(v) => setSortBy(v as SortOption)}\n >\n <SelectTrigger\n className=\"sg:w-full\"\n aria-labelledby=\"sortby_dropdown\"\n >\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"newest\">Newest first</SelectItem>\n <SelectItem value=\"oldest\">Oldest first</SelectItem>\n <SelectItem value=\"a-z\">Title A–Z</SelectItem>\n <SelectItem value=\"z-a\">Title Z–A</SelectItem>\n </SelectContent>\n </Select>\n </div>\n {activeCount > 0 && (\n <Button variant=\"ghost\" size=\"xs\" onClick={clearFilters} iconStart=\"X\">\n Clear all filters\n </Button>\n )}\n </Stack>\n );\n}\n"],"mappings":";AA0CM,SACE,KADF;AAzCN,SAAS,OAAO,YAAY;AAC5B,SAAS,cAAc;AACvB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAkBA,SAAS,eAAe;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAwB;AACtB,SACE,qBAAC,SAAM,KAAK,GAAG,YAAW,SACxB;AAAA,yBAAC,SACC;AAAA,0BAAC,QAAK,MAAK,MAAK,YAAW,UAAS,WAAU,WAAU,wBAExD;AAAA,MACA,oBAAC,SAAM,WAAU,OAAM,MAAK,QAAO,KAAK,GACrC,qBAAW,IAAI,CAAC,QAAQ;AACvB,cAAM,aAAa,mBAAmB,SAAS,GAAG;AAClD,eACE;AAAA,UAAC;AAAA;AAAA,YAEC,SAAS,aAAa,YAAY;AAAA,YAClC,MAAK;AAAA,YACL,SAAS,MAAM,eAAe,GAAG;AAAA,YAEhC;AAAA;AAAA,UALI;AAAA,QAMP;AAAA,MAEJ,CAAC,GACH;AAAA,OACF;AAAA,IACC,CAAC,oBAAoB,QAAQ,SAAS,KACrC,qBAAC,SACC;AAAA,0BAAC,QAAK,MAAK,MAAK,YAAW,UAAS,WAAU,WAAU,qBAExD;AAAA,MACA,oBAAC,SAAM,WAAU,OAAM,MAAK,QAAO,KAAK,GACrC,kBAAQ,IAAI,CAAC,WAAW;AACvB,cAAM,aAAa,gBAAgB,SAAS,MAAM;AAClD,eACE;AAAA,UAAC;AAAA;AAAA,YAEC,SAAS,aAAa,YAAY;AAAA,YAClC,MAAK;AAAA,YACL,SAAS,MAAM,aAAa,MAAM;AAAA,YAEjC;AAAA;AAAA,UALI;AAAA,QAMP;AAAA,MAEJ,CAAC,GACH;AAAA,OACF;AAAA,IAEF,qBAAC,SACC;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,IAAG;AAAA,UACH,MAAK;AAAA,UACL,YAAW;AAAA,UACX,WAAU;AAAA,UACX;AAAA;AAAA,MAED;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,OAAO;AAAA,UACP,eAAe,CAAC,MAAM,UAAU,CAAe;AAAA,UAE/C;AAAA;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBACV,mBAAgB;AAAA,gBAEhB,8BAAC,eAAY;AAAA;AAAA,YACf;AAAA,YACA,qBAAC,iBACC;AAAA,kCAAC,cAAW,OAAM,UAAS,0BAAY;AAAA,cACvC,oBAAC,cAAW,OAAM,UAAS,0BAAY;AAAA,cACvC,oBAAC,cAAW,OAAM,OAAM,4BAAS;AAAA,cACjC,oBAAC,cAAW,OAAM,OAAM,4BAAS;AAAA,eACnC;AAAA;AAAA;AAAA,MACF;AAAA,OACF;AAAA,IACC,cAAc,KACb,oBAAC,UAAO,SAAQ,SAAQ,MAAK,MAAK,SAAS,cAAc,WAAU,KAAI,+BAEvE;AAAA,KAEJ;AAEJ;","names":[]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { BlogPost } from '../../../data/posts.js';
|
|
3
|
+
|
|
4
|
+
type LoadMode = "pagination" | "load-more";
|
|
5
|
+
type FilterMode = "sidebar" | "drawer";
|
|
6
|
+
interface PostListWithFiltersProps {
|
|
7
|
+
posts: BlogPost[];
|
|
8
|
+
/** Hide the search bar */
|
|
9
|
+
hideSearch?: boolean;
|
|
10
|
+
/** Hide the author filter badges */
|
|
11
|
+
hideAuthorFilter?: boolean;
|
|
12
|
+
/** "sidebar" = inline on desktop, sheet on mobile (default). "drawer" = always behind a button/sheet. */
|
|
13
|
+
filterMode?: FilterMode;
|
|
14
|
+
/** Default load mode. "load-more" (default) or "pagination". User can still toggle. */
|
|
15
|
+
defaultLoadMode?: LoadMode;
|
|
16
|
+
}
|
|
17
|
+
declare function PostListWithFilters({ posts: sourcePosts, hideSearch, hideAuthorFilter, filterMode, defaultLoadMode, }: PostListWithFiltersProps): react_jsx_runtime.JSX.Element;
|
|
18
|
+
|
|
19
|
+
export { PostListWithFilters };
|