@jant/core 0.1.2 → 0.2.0
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/dist/app.d.ts +34 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +474 -0
- package/dist/assets/datastar.min.js +1775 -0
- package/dist/auth.d.ts +23 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +34 -0
- package/{src/client.ts → dist/client.d.ts} +1 -1
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +4 -0
- package/dist/db/index.d.ts +10 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +10 -0
- package/dist/db/schema.d.ts +1507 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +183 -0
- package/{src/i18n/Trans.tsx → dist/i18n/Trans.d.ts} +4 -10
- package/dist/i18n/Trans.d.ts.map +1 -0
- package/dist/i18n/Trans.js +24 -0
- package/dist/i18n/context.d.ts +69 -0
- package/dist/i18n/context.d.ts.map +1 -0
- package/dist/i18n/context.js +61 -0
- package/dist/i18n/detect.d.ts +31 -0
- package/dist/i18n/detect.d.ts.map +1 -0
- package/dist/i18n/detect.js +77 -0
- package/{src/i18n/i18n.ts → dist/i18n/i18n.d.ts} +5 -25
- package/dist/i18n/i18n.d.ts.map +1 -0
- package/dist/i18n/i18n.js +55 -0
- package/dist/i18n/index.d.ts +41 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/{src/i18n/index.ts → dist/i18n/index.js} +3 -24
- package/dist/i18n/locales/en.d.ts +3 -0
- package/dist/i18n/locales/en.d.ts.map +1 -0
- package/dist/i18n/locales/en.js +1 -0
- package/dist/i18n/locales/zh-Hans.d.ts +3 -0
- package/dist/i18n/locales/zh-Hans.d.ts.map +1 -0
- package/dist/i18n/locales/zh-Hans.js +1 -0
- package/dist/i18n/locales/zh-Hant.d.ts +3 -0
- package/dist/i18n/locales/zh-Hant.d.ts.map +1 -0
- package/dist/i18n/locales/zh-Hant.js +1 -0
- package/dist/i18n/locales.d.ts +11 -0
- package/dist/i18n/locales.d.ts.map +1 -0
- package/dist/i18n/locales.js +13 -0
- package/dist/i18n/middleware.d.ts +24 -0
- package/dist/i18n/middleware.d.ts.map +1 -0
- package/dist/i18n/middleware.js +41 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/{src/index.ts → dist/index.js} +1 -28
- package/dist/lib/assets.d.ts +19 -0
- package/dist/lib/assets.d.ts.map +1 -0
- package/dist/lib/assets.js +33 -0
- package/dist/lib/constants.d.ts +36 -0
- package/dist/lib/constants.d.ts.map +1 -0
- package/dist/lib/constants.js +50 -0
- package/{src/lib/image.ts → dist/lib/image.d.ts} +13 -47
- package/dist/lib/image.d.ts.map +1 -0
- package/dist/lib/image.js +77 -0
- package/{src/lib/index.ts → dist/lib/index.d.ts} +1 -1
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +7 -0
- package/dist/lib/markdown.d.ts +60 -0
- package/dist/lib/markdown.d.ts.map +1 -0
- package/{src/lib/markdown.ts → dist/lib/markdown.js} +16 -26
- package/dist/lib/schemas.d.ts +113 -0
- package/dist/lib/schemas.d.ts.map +1 -0
- package/dist/lib/schemas.js +71 -0
- package/dist/lib/sqid.d.ts +60 -0
- package/dist/lib/sqid.d.ts.map +1 -0
- package/{src/lib/sqid.ts → dist/lib/sqid.js} +15 -22
- package/dist/lib/sse.d.ts +95 -0
- package/dist/lib/sse.d.ts.map +1 -0
- package/dist/lib/sse.js +81 -0
- package/dist/lib/time.d.ts +90 -0
- package/dist/lib/time.d.ts.map +1 -0
- package/{src/lib/time.ts → dist/lib/time.js} +20 -33
- package/{src/lib/url.ts → dist/lib/url.d.ts} +5 -30
- package/dist/lib/url.d.ts.map +1 -0
- package/dist/lib/url.js +89 -0
- package/dist/middleware/auth.d.ts +24 -0
- package/dist/middleware/auth.d.ts.map +1 -0
- package/dist/middleware/auth.js +52 -0
- package/dist/routes/api/posts.d.ts +13 -0
- package/dist/routes/api/posts.d.ts.map +1 -0
- package/dist/routes/api/posts.js +124 -0
- package/dist/routes/api/search.d.ts +13 -0
- package/dist/routes/api/search.d.ts.map +1 -0
- package/dist/routes/api/search.js +49 -0
- package/dist/routes/api/upload.d.ts +16 -0
- package/dist/routes/api/upload.d.ts.map +1 -0
- package/dist/routes/api/upload.js +227 -0
- package/dist/routes/dash/collections.d.ts +13 -0
- package/dist/routes/dash/collections.d.ts.map +1 -0
- package/dist/routes/dash/collections.js +512 -0
- package/dist/routes/dash/index.d.ts +15 -0
- package/dist/routes/dash/index.d.ts.map +1 -0
- package/dist/routes/dash/index.js +117 -0
- package/dist/routes/dash/media.d.ts +16 -0
- package/dist/routes/dash/media.d.ts.map +1 -0
- package/dist/routes/dash/media.js +589 -0
- package/dist/routes/dash/pages.d.ts +15 -0
- package/dist/routes/dash/pages.d.ts.map +1 -0
- package/dist/routes/dash/pages.js +290 -0
- package/dist/routes/dash/posts.d.ts +13 -0
- package/dist/routes/dash/posts.d.ts.map +1 -0
- package/dist/routes/dash/posts.js +226 -0
- package/dist/routes/dash/redirects.d.ts +13 -0
- package/dist/routes/dash/redirects.d.ts.map +1 -0
- package/dist/routes/dash/redirects.js +237 -0
- package/dist/routes/dash/settings.d.ts +13 -0
- package/dist/routes/dash/settings.d.ts.map +1 -0
- package/dist/routes/dash/settings.js +154 -0
- package/dist/routes/feed/rss.d.ts +13 -0
- package/dist/routes/feed/rss.d.ts.map +1 -0
- package/dist/routes/feed/rss.js +95 -0
- package/dist/routes/feed/sitemap.d.ts +13 -0
- package/dist/routes/feed/sitemap.d.ts.map +1 -0
- package/dist/routes/feed/sitemap.js +59 -0
- package/dist/routes/pages/archive.d.ts +15 -0
- package/dist/routes/pages/archive.d.ts.map +1 -0
- package/dist/routes/pages/archive.js +255 -0
- package/dist/routes/pages/collection.d.ts +13 -0
- package/dist/routes/pages/collection.d.ts.map +1 -0
- package/dist/routes/pages/collection.js +93 -0
- package/dist/routes/pages/home.d.ts +13 -0
- package/dist/routes/pages/home.d.ts.map +1 -0
- package/dist/routes/pages/home.js +122 -0
- package/dist/routes/pages/page.d.ts +15 -0
- package/dist/routes/pages/page.d.ts.map +1 -0
- package/dist/routes/pages/page.js +69 -0
- package/dist/routes/pages/post.d.ts +13 -0
- package/dist/routes/pages/post.d.ts.map +1 -0
- package/dist/routes/pages/post.js +90 -0
- package/dist/routes/pages/search.d.ts +13 -0
- package/dist/routes/pages/search.d.ts.map +1 -0
- package/dist/routes/pages/search.js +180 -0
- package/dist/services/collection.d.ts +31 -0
- package/dist/services/collection.d.ts.map +1 -0
- package/dist/services/collection.js +108 -0
- package/dist/services/index.d.ts +28 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +20 -0
- package/dist/services/media.d.ts +27 -0
- package/dist/services/media.d.ts.map +1 -0
- package/dist/services/media.js +62 -0
- package/dist/services/post.d.ts +31 -0
- package/dist/services/post.d.ts.map +1 -0
- package/dist/services/post.js +191 -0
- package/dist/services/redirect.d.ts +15 -0
- package/dist/services/redirect.d.ts.map +1 -0
- package/dist/services/redirect.js +48 -0
- package/dist/services/search.d.ts +26 -0
- package/dist/services/search.d.ts.map +1 -0
- package/dist/services/search.js +61 -0
- package/dist/services/settings.d.ts +17 -0
- package/dist/services/settings.d.ts.map +1 -0
- package/dist/services/settings.js +65 -0
- package/dist/theme/components/ActionButtons.d.ts +43 -0
- package/dist/theme/components/ActionButtons.d.ts.map +1 -0
- package/dist/theme/components/ActionButtons.js +50 -0
- package/dist/theme/components/CrudPageHeader.d.ts +23 -0
- package/dist/theme/components/CrudPageHeader.d.ts.map +1 -0
- package/dist/theme/components/CrudPageHeader.js +22 -0
- package/dist/theme/components/DangerZone.d.ts +36 -0
- package/dist/theme/components/DangerZone.d.ts.map +1 -0
- package/dist/theme/components/DangerZone.js +39 -0
- package/dist/theme/components/EmptyState.d.ts +27 -0
- package/dist/theme/components/EmptyState.d.ts.map +1 -0
- package/dist/theme/components/EmptyState.js +27 -0
- package/dist/theme/components/ListItemRow.d.ts +15 -0
- package/dist/theme/components/ListItemRow.d.ts.map +1 -0
- package/dist/theme/components/ListItemRow.js +21 -0
- package/dist/theme/components/PageForm.d.ts +14 -0
- package/dist/theme/components/PageForm.d.ts.map +1 -0
- package/dist/theme/components/PageForm.js +173 -0
- package/dist/theme/components/Pagination.d.ts +46 -0
- package/dist/theme/components/Pagination.d.ts.map +1 -0
- package/dist/theme/components/Pagination.js +159 -0
- package/dist/theme/components/PostForm.d.ts +12 -0
- package/dist/theme/components/PostForm.d.ts.map +1 -0
- package/dist/theme/components/PostForm.js +230 -0
- package/dist/theme/components/PostList.d.ts +10 -0
- package/dist/theme/components/PostList.d.ts.map +1 -0
- package/dist/theme/components/PostList.js +73 -0
- package/dist/theme/components/ThreadView.d.ts +15 -0
- package/dist/theme/components/ThreadView.d.ts.map +1 -0
- package/dist/theme/components/ThreadView.js +111 -0
- package/dist/theme/components/TypeBadge.d.ts +12 -0
- package/dist/theme/components/TypeBadge.d.ts.map +1 -0
- package/dist/theme/components/TypeBadge.js +39 -0
- package/dist/theme/components/VisibilityBadge.d.ts +12 -0
- package/dist/theme/components/VisibilityBadge.d.ts.map +1 -0
- package/dist/theme/components/VisibilityBadge.js +37 -0
- package/{src/theme/components/index.ts → dist/theme/components/index.d.ts} +1 -0
- package/dist/theme/components/index.d.ts.map +1 -0
- package/dist/theme/components/index.js +12 -0
- package/dist/theme/index.d.ts +21 -0
- package/dist/theme/index.d.ts.map +1 -0
- package/{src/theme/index.ts → dist/theme/index.js} +1 -4
- package/dist/theme/layouts/BaseLayout.d.ts +16 -0
- package/dist/theme/layouts/BaseLayout.d.ts.map +1 -0
- package/dist/theme/layouts/BaseLayout.js +58 -0
- package/dist/theme/layouts/DashLayout.d.ts +15 -0
- package/dist/theme/layouts/DashLayout.d.ts.map +1 -0
- package/dist/theme/layouts/DashLayout.js +139 -0
- package/{src/theme/layouts/index.ts → dist/theme/layouts/index.d.ts} +1 -0
- package/dist/theme/layouts/index.d.ts.map +1 -0
- package/dist/theme/layouts/index.js +2 -0
- package/dist/theme/styles/main.css +2 -0
- package/dist/types.d.ts +179 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +19 -0
- package/package.json +26 -26
- package/drizzle.config.ts +0 -10
- package/lingui.config.ts +0 -16
- package/src/app.tsx +0 -377
- package/src/assets/datastar.min.js +0 -8
- package/src/auth.ts +0 -38
- package/src/db/index.ts +0 -14
- package/src/db/migrations/0000_solid_moon_knight.sql +0 -118
- package/src/db/migrations/0001_add_search_fts.sql +0 -40
- package/src/db/migrations/0002_collection_path.sql +0 -2
- package/src/db/migrations/0003_collection_path_nullable.sql +0 -21
- package/src/db/migrations/0004_media_uuid.sql +0 -35
- package/src/db/migrations/meta/0000_snapshot.json +0 -784
- package/src/db/migrations/meta/_journal.json +0 -41
- package/src/db/schema.ts +0 -159
- package/src/i18n/EXAMPLES.md +0 -235
- package/src/i18n/README.md +0 -296
- package/src/i18n/context.tsx +0 -101
- package/src/i18n/detect.ts +0 -100
- package/src/i18n/locales/en.po +0 -875
- package/src/i18n/locales/en.ts +0 -1
- package/src/i18n/locales/zh-Hans.po +0 -875
- package/src/i18n/locales/zh-Hans.ts +0 -1
- package/src/i18n/locales/zh-Hant.po +0 -875
- package/src/i18n/locales/zh-Hant.ts +0 -1
- package/src/i18n/locales.ts +0 -14
- package/src/i18n/middleware.ts +0 -59
- package/src/lib/assets.ts +0 -47
- package/src/lib/constants.ts +0 -67
- package/src/lib/schemas.ts +0 -92
- package/src/lib/sse.ts +0 -152
- package/src/middleware/auth.ts +0 -59
- package/src/routes/api/posts.ts +0 -127
- package/src/routes/api/search.ts +0 -53
- package/src/routes/api/upload.ts +0 -240
- package/src/routes/dash/collections.tsx +0 -341
- package/src/routes/dash/index.tsx +0 -89
- package/src/routes/dash/media.tsx +0 -551
- package/src/routes/dash/pages.tsx +0 -245
- package/src/routes/dash/posts.tsx +0 -202
- package/src/routes/dash/redirects.tsx +0 -155
- package/src/routes/dash/settings.tsx +0 -93
- package/src/routes/feed/rss.ts +0 -119
- package/src/routes/feed/sitemap.ts +0 -75
- package/src/routes/pages/archive.tsx +0 -223
- package/src/routes/pages/collection.tsx +0 -79
- package/src/routes/pages/home.tsx +0 -93
- package/src/routes/pages/page.tsx +0 -64
- package/src/routes/pages/post.tsx +0 -81
- package/src/routes/pages/search.tsx +0 -162
- package/src/services/collection.ts +0 -180
- package/src/services/index.ts +0 -40
- package/src/services/media.ts +0 -97
- package/src/services/post.ts +0 -279
- package/src/services/redirect.ts +0 -74
- package/src/services/search.ts +0 -117
- package/src/services/settings.ts +0 -76
- package/src/theme/components/ActionButtons.tsx +0 -98
- package/src/theme/components/CrudPageHeader.tsx +0 -48
- package/src/theme/components/DangerZone.tsx +0 -77
- package/src/theme/components/EmptyState.tsx +0 -56
- package/src/theme/components/ListItemRow.tsx +0 -24
- package/src/theme/components/PageForm.tsx +0 -114
- package/src/theme/components/Pagination.tsx +0 -196
- package/src/theme/components/PostForm.tsx +0 -122
- package/src/theme/components/PostList.tsx +0 -68
- package/src/theme/components/ThreadView.tsx +0 -118
- package/src/theme/components/TypeBadge.tsx +0 -28
- package/src/theme/components/VisibilityBadge.tsx +0 -33
- package/src/theme/layouts/BaseLayout.tsx +0 -49
- package/src/theme/layouts/DashLayout.tsx +0 -108
- package/src/theme/styles/main.css +0 -52
- package/src/types.ts +0 -222
- package/tsconfig.json +0 -16
- package/vite.config.ts +0 -82
- package/wrangler.toml +0 -21
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Empty State Component
|
|
3
|
+
*
|
|
4
|
+
* Displays a message when a list or collection has no items,
|
|
5
|
+
* optionally with a call-to-action button
|
|
6
|
+
*/
|
|
7
|
+
import type { FC } from "hono/jsx";
|
|
8
|
+
export interface EmptyStateProps {
|
|
9
|
+
/**
|
|
10
|
+
* Message to display when empty
|
|
11
|
+
*/
|
|
12
|
+
message: string;
|
|
13
|
+
/**
|
|
14
|
+
* Optional call-to-action button text
|
|
15
|
+
*/
|
|
16
|
+
ctaText?: string;
|
|
17
|
+
/**
|
|
18
|
+
* Optional call-to-action button href
|
|
19
|
+
*/
|
|
20
|
+
ctaHref?: string;
|
|
21
|
+
/**
|
|
22
|
+
* Whether to center the content with padding (default: true)
|
|
23
|
+
*/
|
|
24
|
+
centered?: boolean;
|
|
25
|
+
}
|
|
26
|
+
export declare const EmptyState: FC<EmptyStateProps>;
|
|
27
|
+
//# sourceMappingURL=EmptyState.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmptyState.d.ts","sourceRoot":"","sources":["../../../src/theme/components/EmptyState.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAEnC,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,eAAO,MAAM,UAAU,EAAE,EAAE,CAAC,eAAe,CAwB1C,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Empty State Component
|
|
3
|
+
*
|
|
4
|
+
* Displays a message when a list or collection has no items,
|
|
5
|
+
* optionally with a call-to-action button
|
|
6
|
+
*/ import { jsx as _jsx, jsxs as _jsxs } from "hono/jsx/jsx-runtime";
|
|
7
|
+
export const EmptyState = ({ message, ctaText, ctaHref, centered = true })=>{
|
|
8
|
+
if (!centered) {
|
|
9
|
+
return /*#__PURE__*/ _jsx("p", {
|
|
10
|
+
class: "text-muted-foreground",
|
|
11
|
+
children: message
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
return /*#__PURE__*/ _jsxs("div", {
|
|
15
|
+
class: "text-center py-12 text-muted-foreground",
|
|
16
|
+
children: [
|
|
17
|
+
/*#__PURE__*/ _jsx("p", {
|
|
18
|
+
children: message
|
|
19
|
+
}),
|
|
20
|
+
ctaText && ctaHref && /*#__PURE__*/ _jsx("a", {
|
|
21
|
+
href: ctaHref,
|
|
22
|
+
class: "btn mt-4",
|
|
23
|
+
children: ctaText
|
|
24
|
+
})
|
|
25
|
+
]
|
|
26
|
+
});
|
|
27
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* List Item Row Component
|
|
3
|
+
*
|
|
4
|
+
* Provides consistent layout for list items in dashboard CRUD pages.
|
|
5
|
+
* Handles responsive spacing, overflow, and action button placement.
|
|
6
|
+
*/
|
|
7
|
+
import type { FC, PropsWithChildren } from "hono/jsx";
|
|
8
|
+
export interface ListItemRowProps extends PropsWithChildren {
|
|
9
|
+
/**
|
|
10
|
+
* Action buttons to display on the right side
|
|
11
|
+
*/
|
|
12
|
+
actions?: unknown;
|
|
13
|
+
}
|
|
14
|
+
export declare const ListItemRow: FC<ListItemRowProps>;
|
|
15
|
+
//# sourceMappingURL=ListItemRow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ListItemRow.d.ts","sourceRoot":"","sources":["../../../src/theme/components/ListItemRow.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,EAAE,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAEtD,MAAM,WAAW,gBAAiB,SAAQ,iBAAiB;IACzD;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,eAAO,MAAM,WAAW,EAAE,EAAE,CAAC,gBAAgB,CAO5C,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* List Item Row Component
|
|
3
|
+
*
|
|
4
|
+
* Provides consistent layout for list items in dashboard CRUD pages.
|
|
5
|
+
* Handles responsive spacing, overflow, and action button placement.
|
|
6
|
+
*/ import { jsx as _jsx, jsxs as _jsxs } from "hono/jsx/jsx-runtime";
|
|
7
|
+
export const ListItemRow = ({ children, actions })=>{
|
|
8
|
+
return /*#__PURE__*/ _jsxs("div", {
|
|
9
|
+
class: "py-4 flex items-start gap-4",
|
|
10
|
+
children: [
|
|
11
|
+
/*#__PURE__*/ _jsx("div", {
|
|
12
|
+
class: "flex-1 min-w-0",
|
|
13
|
+
children: children
|
|
14
|
+
}),
|
|
15
|
+
actions && /*#__PURE__*/ _jsx("div", {
|
|
16
|
+
class: "flex items-center gap-2",
|
|
17
|
+
children: actions
|
|
18
|
+
})
|
|
19
|
+
]
|
|
20
|
+
});
|
|
21
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Page Creation/Edit Form
|
|
3
|
+
*
|
|
4
|
+
* For managing custom pages (posts with type="page")
|
|
5
|
+
*/
|
|
6
|
+
import type { FC } from "hono/jsx";
|
|
7
|
+
import type { Post } from "../../types.js";
|
|
8
|
+
export interface PageFormProps {
|
|
9
|
+
page?: Post;
|
|
10
|
+
action: string;
|
|
11
|
+
cancelUrl?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare const PageForm: FC<PageFormProps>;
|
|
14
|
+
//# sourceMappingURL=PageForm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PageForm.d.ts","sourceRoot":"","sources":["../../../src/theme/components/PageForm.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAG3C,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,QAAQ,EAAE,EAAE,CAAC,aAAa,CAiGtC,CAAC"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Page Creation/Edit Form
|
|
3
|
+
*
|
|
4
|
+
* For managing custom pages (posts with type="page")
|
|
5
|
+
*/ import { jsx as _jsx, jsxs as _jsxs } from "hono/jsx/jsx-runtime";
|
|
6
|
+
import { useLingui } from "../../i18n/index.js";
|
|
7
|
+
export const PageForm = ({ page, action, cancelUrl = "/dash/pages" })=>{
|
|
8
|
+
const { t } = useLingui();
|
|
9
|
+
const isEdit = !!page;
|
|
10
|
+
return /*#__PURE__*/ _jsxs("form", {
|
|
11
|
+
method: "post",
|
|
12
|
+
action: action,
|
|
13
|
+
class: "flex flex-col gap-4",
|
|
14
|
+
children: [
|
|
15
|
+
/*#__PURE__*/ _jsx("input", {
|
|
16
|
+
type: "hidden",
|
|
17
|
+
name: "type",
|
|
18
|
+
value: "page"
|
|
19
|
+
}),
|
|
20
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
21
|
+
class: "field",
|
|
22
|
+
children: [
|
|
23
|
+
/*#__PURE__*/ _jsx("label", {
|
|
24
|
+
class: "label",
|
|
25
|
+
children: t({
|
|
26
|
+
message: "Title",
|
|
27
|
+
comment: "@context: Page form field label - title"
|
|
28
|
+
})
|
|
29
|
+
}),
|
|
30
|
+
/*#__PURE__*/ _jsx("input", {
|
|
31
|
+
type: "text",
|
|
32
|
+
name: "title",
|
|
33
|
+
class: "input",
|
|
34
|
+
placeholder: t({
|
|
35
|
+
message: "Page title...",
|
|
36
|
+
comment: "@context: Page title placeholder"
|
|
37
|
+
}),
|
|
38
|
+
value: page?.title ?? "",
|
|
39
|
+
required: true
|
|
40
|
+
})
|
|
41
|
+
]
|
|
42
|
+
}),
|
|
43
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
44
|
+
class: "field",
|
|
45
|
+
children: [
|
|
46
|
+
/*#__PURE__*/ _jsx("label", {
|
|
47
|
+
class: "label",
|
|
48
|
+
children: t({
|
|
49
|
+
message: "Path",
|
|
50
|
+
comment: "@context: Page form field label - URL path"
|
|
51
|
+
})
|
|
52
|
+
}),
|
|
53
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
54
|
+
class: "flex items-center gap-2",
|
|
55
|
+
children: [
|
|
56
|
+
/*#__PURE__*/ _jsx("span", {
|
|
57
|
+
class: "text-muted-foreground",
|
|
58
|
+
children: "/"
|
|
59
|
+
}),
|
|
60
|
+
/*#__PURE__*/ _jsx("input", {
|
|
61
|
+
type: "text",
|
|
62
|
+
name: "path",
|
|
63
|
+
class: "input flex-1",
|
|
64
|
+
placeholder: "about",
|
|
65
|
+
value: page?.path ?? "",
|
|
66
|
+
pattern: "[a-z0-9\\-]+",
|
|
67
|
+
title: t({
|
|
68
|
+
message: "Lowercase letters, numbers, and hyphens only",
|
|
69
|
+
comment: "@context: Page path validation message"
|
|
70
|
+
}),
|
|
71
|
+
required: true
|
|
72
|
+
})
|
|
73
|
+
]
|
|
74
|
+
}),
|
|
75
|
+
/*#__PURE__*/ _jsx("p", {
|
|
76
|
+
class: "text-xs text-muted-foreground mt-1",
|
|
77
|
+
children: t({
|
|
78
|
+
message: "The URL path for this page. Use lowercase letters, numbers, and hyphens.",
|
|
79
|
+
comment: "@context: Page path helper text"
|
|
80
|
+
})
|
|
81
|
+
})
|
|
82
|
+
]
|
|
83
|
+
}),
|
|
84
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
85
|
+
class: "field",
|
|
86
|
+
children: [
|
|
87
|
+
/*#__PURE__*/ _jsx("label", {
|
|
88
|
+
class: "label",
|
|
89
|
+
children: t({
|
|
90
|
+
message: "Content",
|
|
91
|
+
comment: "@context: Page form field label - content"
|
|
92
|
+
})
|
|
93
|
+
}),
|
|
94
|
+
/*#__PURE__*/ _jsx("textarea", {
|
|
95
|
+
name: "content",
|
|
96
|
+
class: "textarea min-h-48",
|
|
97
|
+
placeholder: t({
|
|
98
|
+
message: "Page content (Markdown supported)...",
|
|
99
|
+
comment: "@context: Page content placeholder"
|
|
100
|
+
}),
|
|
101
|
+
required: true,
|
|
102
|
+
children: page?.content ?? ""
|
|
103
|
+
})
|
|
104
|
+
]
|
|
105
|
+
}),
|
|
106
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
107
|
+
class: "field",
|
|
108
|
+
children: [
|
|
109
|
+
/*#__PURE__*/ _jsx("label", {
|
|
110
|
+
class: "label",
|
|
111
|
+
children: t({
|
|
112
|
+
message: "Status",
|
|
113
|
+
comment: "@context: Page form field label - publish status"
|
|
114
|
+
})
|
|
115
|
+
}),
|
|
116
|
+
/*#__PURE__*/ _jsxs("select", {
|
|
117
|
+
name: "visibility",
|
|
118
|
+
class: "select",
|
|
119
|
+
children: [
|
|
120
|
+
/*#__PURE__*/ _jsx("option", {
|
|
121
|
+
value: "unlisted",
|
|
122
|
+
selected: page?.visibility === "unlisted" || !page,
|
|
123
|
+
children: t({
|
|
124
|
+
message: "Published",
|
|
125
|
+
comment: "@context: Page status option - published"
|
|
126
|
+
})
|
|
127
|
+
}),
|
|
128
|
+
/*#__PURE__*/ _jsx("option", {
|
|
129
|
+
value: "draft",
|
|
130
|
+
selected: page?.visibility === "draft",
|
|
131
|
+
children: t({
|
|
132
|
+
message: "Draft",
|
|
133
|
+
comment: "@context: Page status option - draft"
|
|
134
|
+
})
|
|
135
|
+
})
|
|
136
|
+
]
|
|
137
|
+
}),
|
|
138
|
+
/*#__PURE__*/ _jsx("p", {
|
|
139
|
+
class: "text-xs text-muted-foreground mt-1",
|
|
140
|
+
children: t({
|
|
141
|
+
message: "Published pages are accessible via their path. Drafts are not visible.",
|
|
142
|
+
comment: "@context: Page status helper text"
|
|
143
|
+
})
|
|
144
|
+
})
|
|
145
|
+
]
|
|
146
|
+
}),
|
|
147
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
148
|
+
class: "flex gap-2",
|
|
149
|
+
children: [
|
|
150
|
+
/*#__PURE__*/ _jsx("button", {
|
|
151
|
+
type: "submit",
|
|
152
|
+
class: "btn",
|
|
153
|
+
children: isEdit ? t({
|
|
154
|
+
message: "Update Page",
|
|
155
|
+
comment: "@context: Button to update existing page"
|
|
156
|
+
}) : t({
|
|
157
|
+
message: "Create Page",
|
|
158
|
+
comment: "@context: Button to create new page"
|
|
159
|
+
})
|
|
160
|
+
}),
|
|
161
|
+
/*#__PURE__*/ _jsx("a", {
|
|
162
|
+
href: cancelUrl,
|
|
163
|
+
class: "btn-outline",
|
|
164
|
+
children: t({
|
|
165
|
+
message: "Cancel",
|
|
166
|
+
comment: "@context: Button to cancel and go back"
|
|
167
|
+
})
|
|
168
|
+
})
|
|
169
|
+
]
|
|
170
|
+
})
|
|
171
|
+
]
|
|
172
|
+
});
|
|
173
|
+
};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pagination Component
|
|
3
|
+
*
|
|
4
|
+
* Cursor-based pagination for post lists
|
|
5
|
+
*/
|
|
6
|
+
import type { FC } from "hono/jsx";
|
|
7
|
+
export interface PaginationProps {
|
|
8
|
+
/** Base URL for pagination links (e.g., "/archive", "/search?q=test") */
|
|
9
|
+
baseUrl: string;
|
|
10
|
+
/** Whether there are more items after the current page */
|
|
11
|
+
hasMore: boolean;
|
|
12
|
+
/** Cursor for the next page (typically the last item's ID) */
|
|
13
|
+
nextCursor?: number | string;
|
|
14
|
+
/** Cursor for the previous page */
|
|
15
|
+
prevCursor?: number | string;
|
|
16
|
+
/** Parameter name for cursor (default: "cursor") */
|
|
17
|
+
cursorParam?: string;
|
|
18
|
+
}
|
|
19
|
+
export declare const Pagination: FC<PaginationProps>;
|
|
20
|
+
/**
|
|
21
|
+
* Simple "Load More" style pagination
|
|
22
|
+
*/
|
|
23
|
+
export interface LoadMoreProps {
|
|
24
|
+
/** URL for loading more items */
|
|
25
|
+
href: string;
|
|
26
|
+
/** Whether there are more items to load */
|
|
27
|
+
hasMore: boolean;
|
|
28
|
+
/** Button text */
|
|
29
|
+
text?: string;
|
|
30
|
+
}
|
|
31
|
+
export declare const LoadMore: FC<LoadMoreProps>;
|
|
32
|
+
/**
|
|
33
|
+
* Page-based pagination (for search results etc.)
|
|
34
|
+
*/
|
|
35
|
+
export interface PagePaginationProps {
|
|
36
|
+
/** Base URL (query params will be added) */
|
|
37
|
+
baseUrl: string;
|
|
38
|
+
/** Current page (1-indexed) */
|
|
39
|
+
currentPage: number;
|
|
40
|
+
/** Whether there are more pages */
|
|
41
|
+
hasMore: boolean;
|
|
42
|
+
/** Page parameter name (default: "page") */
|
|
43
|
+
pageParam?: string;
|
|
44
|
+
}
|
|
45
|
+
export declare const PagePagination: FC<PagePaginationProps>;
|
|
46
|
+
//# sourceMappingURL=Pagination.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Pagination.d.ts","sourceRoot":"","sources":["../../../src/theme/components/Pagination.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAGnC,MAAM,WAAW,eAAe;IAC9B,yEAAyE;IACzE,OAAO,EAAE,MAAM,CAAC;IAChB,0DAA0D;IAC1D,OAAO,EAAE,OAAO,CAAC;IACjB,8DAA8D;IAC9D,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,mCAAmC;IACnC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,oDAAoD;IACpD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,UAAU,EAAE,EAAE,CAAC,eAAe,CA0D1C,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,OAAO,EAAE,OAAO,CAAC;IACjB,kBAAkB;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,QAAQ,EAAE,EAAE,CAAC,aAAa,CAmBtC,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,4CAA4C;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,+BAA+B;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,cAAc,EAAE,EAAE,CAAC,mBAAmB,CAkElD,CAAC"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pagination Component
|
|
3
|
+
*
|
|
4
|
+
* Cursor-based pagination for post lists
|
|
5
|
+
*/ import { jsx as _jsx, jsxs as _jsxs } from "hono/jsx/jsx-runtime";
|
|
6
|
+
import { useLingui } from "../../i18n/index.js";
|
|
7
|
+
export const Pagination = ({ baseUrl, hasMore, nextCursor, prevCursor, cursorParam = "cursor" })=>{
|
|
8
|
+
const { t } = useLingui();
|
|
9
|
+
const hasPrev = prevCursor !== undefined;
|
|
10
|
+
const hasNext = hasMore && nextCursor !== undefined;
|
|
11
|
+
if (!hasPrev && !hasNext) {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
// Build URL with cursor parameter
|
|
15
|
+
const buildUrl = (cursor)=>{
|
|
16
|
+
const url = new URL(baseUrl, "http://localhost");
|
|
17
|
+
url.searchParams.set(cursorParam, String(cursor));
|
|
18
|
+
return `${url.pathname}${url.search}`;
|
|
19
|
+
};
|
|
20
|
+
const prevText = t({
|
|
21
|
+
message: "Previous",
|
|
22
|
+
comment: "@context: Pagination button - previous page"
|
|
23
|
+
});
|
|
24
|
+
const nextText = t({
|
|
25
|
+
message: "Next",
|
|
26
|
+
comment: "@context: Pagination button - next page"
|
|
27
|
+
});
|
|
28
|
+
return /*#__PURE__*/ _jsxs("nav", {
|
|
29
|
+
class: "flex items-center justify-between py-4",
|
|
30
|
+
"aria-label": "Pagination",
|
|
31
|
+
children: [
|
|
32
|
+
/*#__PURE__*/ _jsx("div", {
|
|
33
|
+
children: hasPrev ? /*#__PURE__*/ _jsxs("a", {
|
|
34
|
+
href: buildUrl(prevCursor),
|
|
35
|
+
class: "btn-outline text-sm",
|
|
36
|
+
children: [
|
|
37
|
+
"← ",
|
|
38
|
+
prevText
|
|
39
|
+
]
|
|
40
|
+
}) : /*#__PURE__*/ _jsxs("span", {
|
|
41
|
+
class: "btn-outline text-sm opacity-50 cursor-not-allowed",
|
|
42
|
+
children: [
|
|
43
|
+
"← ",
|
|
44
|
+
prevText
|
|
45
|
+
]
|
|
46
|
+
})
|
|
47
|
+
}),
|
|
48
|
+
/*#__PURE__*/ _jsx("div", {
|
|
49
|
+
children: hasNext ? /*#__PURE__*/ _jsxs("a", {
|
|
50
|
+
href: buildUrl(nextCursor),
|
|
51
|
+
class: "btn-outline text-sm",
|
|
52
|
+
children: [
|
|
53
|
+
nextText,
|
|
54
|
+
" →"
|
|
55
|
+
]
|
|
56
|
+
}) : /*#__PURE__*/ _jsxs("span", {
|
|
57
|
+
class: "btn-outline text-sm opacity-50 cursor-not-allowed",
|
|
58
|
+
children: [
|
|
59
|
+
nextText,
|
|
60
|
+
" →"
|
|
61
|
+
]
|
|
62
|
+
})
|
|
63
|
+
})
|
|
64
|
+
]
|
|
65
|
+
});
|
|
66
|
+
};
|
|
67
|
+
export const LoadMore = ({ href, hasMore, text })=>{
|
|
68
|
+
const { t } = useLingui();
|
|
69
|
+
if (!hasMore) {
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
const buttonText = text ?? t({
|
|
73
|
+
message: "Load more",
|
|
74
|
+
comment: "@context: Pagination button - load more items"
|
|
75
|
+
});
|
|
76
|
+
return /*#__PURE__*/ _jsx("div", {
|
|
77
|
+
class: "text-center py-4",
|
|
78
|
+
children: /*#__PURE__*/ _jsx("a", {
|
|
79
|
+
href: href,
|
|
80
|
+
class: "btn-outline",
|
|
81
|
+
children: buttonText
|
|
82
|
+
})
|
|
83
|
+
});
|
|
84
|
+
};
|
|
85
|
+
export const PagePagination = ({ baseUrl, currentPage, hasMore, pageParam = "page" })=>{
|
|
86
|
+
const { t } = useLingui();
|
|
87
|
+
const hasPrev = currentPage > 1;
|
|
88
|
+
const hasNext = hasMore;
|
|
89
|
+
if (!hasPrev && !hasNext) {
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
// Build URL with page parameter
|
|
93
|
+
const buildUrl = (page)=>{
|
|
94
|
+
const url = new URL(baseUrl, "http://localhost");
|
|
95
|
+
if (page > 1) {
|
|
96
|
+
url.searchParams.set(pageParam, String(page));
|
|
97
|
+
} else {
|
|
98
|
+
url.searchParams.delete(pageParam);
|
|
99
|
+
}
|
|
100
|
+
return `${url.pathname}${url.search}`;
|
|
101
|
+
};
|
|
102
|
+
const prevText = t({
|
|
103
|
+
message: "Previous",
|
|
104
|
+
comment: "@context: Pagination button - previous page"
|
|
105
|
+
});
|
|
106
|
+
const nextText = t({
|
|
107
|
+
message: "Next",
|
|
108
|
+
comment: "@context: Pagination button - next page"
|
|
109
|
+
});
|
|
110
|
+
const pageText = t({
|
|
111
|
+
message: "Page {page}",
|
|
112
|
+
comment: "@context: Pagination - current page indicator",
|
|
113
|
+
values: {
|
|
114
|
+
page: String(currentPage)
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
return /*#__PURE__*/ _jsxs("nav", {
|
|
118
|
+
class: "flex items-center justify-between py-4",
|
|
119
|
+
"aria-label": "Pagination",
|
|
120
|
+
children: [
|
|
121
|
+
/*#__PURE__*/ _jsx("div", {
|
|
122
|
+
children: hasPrev ? /*#__PURE__*/ _jsxs("a", {
|
|
123
|
+
href: buildUrl(currentPage - 1),
|
|
124
|
+
class: "btn-outline text-sm",
|
|
125
|
+
children: [
|
|
126
|
+
"← ",
|
|
127
|
+
prevText
|
|
128
|
+
]
|
|
129
|
+
}) : /*#__PURE__*/ _jsxs("span", {
|
|
130
|
+
class: "btn-outline text-sm opacity-50 cursor-not-allowed",
|
|
131
|
+
children: [
|
|
132
|
+
"← ",
|
|
133
|
+
prevText
|
|
134
|
+
]
|
|
135
|
+
})
|
|
136
|
+
}),
|
|
137
|
+
/*#__PURE__*/ _jsx("span", {
|
|
138
|
+
class: "text-sm text-muted-foreground",
|
|
139
|
+
children: pageText
|
|
140
|
+
}),
|
|
141
|
+
/*#__PURE__*/ _jsx("div", {
|
|
142
|
+
children: hasNext ? /*#__PURE__*/ _jsxs("a", {
|
|
143
|
+
href: buildUrl(currentPage + 1),
|
|
144
|
+
class: "btn-outline text-sm",
|
|
145
|
+
children: [
|
|
146
|
+
nextText,
|
|
147
|
+
" →"
|
|
148
|
+
]
|
|
149
|
+
}) : /*#__PURE__*/ _jsxs("span", {
|
|
150
|
+
class: "btn-outline text-sm opacity-50 cursor-not-allowed",
|
|
151
|
+
children: [
|
|
152
|
+
nextText,
|
|
153
|
+
" →"
|
|
154
|
+
]
|
|
155
|
+
})
|
|
156
|
+
})
|
|
157
|
+
]
|
|
158
|
+
});
|
|
159
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Post Creation/Edit Form
|
|
3
|
+
*/
|
|
4
|
+
import type { FC } from "hono/jsx";
|
|
5
|
+
import type { Post } from "../../types.js";
|
|
6
|
+
export interface PostFormProps {
|
|
7
|
+
post?: Post;
|
|
8
|
+
action: string;
|
|
9
|
+
method?: "get" | "post";
|
|
10
|
+
}
|
|
11
|
+
export declare const PostForm: FC<PostFormProps>;
|
|
12
|
+
//# sourceMappingURL=PostForm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PostForm.d.ts","sourceRoot":"","sources":["../../../src/theme/components/PostForm.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAG3C,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;CACzB;AAED,eAAO,MAAM,QAAQ,EAAE,EAAE,CAAC,aAAa,CA2GtC,CAAC"}
|