@jant/core 0.3.35 → 0.3.37
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/bin/commands/export.js +1 -1
- package/bin/commands/import-site.js +529 -0
- package/bin/commands/reset-password.js +3 -2
- package/dist/client/assets/heic-to-DIRPI3VF.js +1 -0
- package/dist/client/assets/module-RjUF93sV.js +716 -0
- package/dist/client/assets/native-48B9X9Wg.js +1 -0
- package/dist/client/assets/url-FWFqPJPb.js +1 -0
- package/dist/client/client.css +1 -1
- package/dist/client/client.js +4564 -3013
- package/dist/index.js +12885 -8161
- package/package.json +23 -6
- package/src/__tests__/helpers/app.ts +10 -10
- package/src/__tests__/helpers/db.ts +91 -87
- package/src/app.tsx +157 -31
- package/src/auth.ts +20 -2
- package/src/client/archive-nav.js +187 -0
- package/src/client/audio-player.ts +478 -0
- package/src/client/audio-processor.ts +84 -0
- package/src/{lib → client}/avatar-upload.ts +4 -3
- package/src/{lib → client}/collection-form-bridge.ts +2 -2
- package/src/{ui → client}/components/__tests__/jant-collection-form.test.ts +26 -9
- package/src/client/components/__tests__/jant-compose-dialog.test.ts +1140 -0
- package/src/client/components/__tests__/jant-compose-editor.test.ts +504 -0
- package/src/{ui → client}/components/__tests__/jant-post-form.test.ts +37 -17
- package/src/{ui → client}/components/__tests__/jant-settings-avatar.test.ts +2 -2
- package/src/{ui → client}/components/__tests__/jant-settings-general.test.ts +3 -3
- package/src/client/components/collection-sidebar-types.ts +43 -0
- package/src/{ui → client}/components/collection-types.ts +3 -4
- package/src/client/components/compose-types.ts +174 -0
- package/src/client/components/jant-collection-form.ts +667 -0
- package/src/client/components/jant-collection-sidebar.ts +805 -0
- package/src/client/components/jant-compose-dialog.ts +2161 -0
- package/src/client/components/jant-compose-editor.ts +1813 -0
- package/src/client/components/jant-compose-fullscreen.ts +283 -0
- package/src/client/components/jant-media-lightbox.ts +259 -0
- package/src/{ui → client}/components/jant-nav-manager.ts +97 -298
- package/src/{ui → client}/components/jant-post-form.ts +141 -12
- package/src/client/components/jant-post-menu.ts +1019 -0
- package/src/{ui → client}/components/jant-settings-avatar.ts +3 -3
- package/src/{ui → client}/components/jant-settings-general.ts +38 -4
- package/src/client/components/jant-text-preview.ts +232 -0
- package/src/{ui → client}/components/nav-manager-types.ts +6 -18
- package/src/{ui → client}/components/post-form-template.ts +137 -38
- package/src/{ui → client}/components/post-form-types.ts +15 -4
- package/src/client/compose-bridge.ts +583 -0
- package/src/{lib → client}/image-processor.ts +26 -8
- package/src/client/lazy-slugify.ts +51 -0
- package/src/client/media-metadata.ts +247 -0
- package/src/client/multipart-upload.ts +160 -0
- package/src/{lib → client}/nav-manager-bridge.ts +1 -1
- package/src/{lib → client}/post-form-bridge.ts +53 -2
- package/src/{lib → client}/settings-bridge.ts +3 -15
- package/src/client/thread-context.ts +140 -0
- package/src/client/tiptap/bubble-menu.ts +205 -0
- package/src/client/tiptap/create-editor.ts +86 -0
- package/src/client/tiptap/exitable-marks.ts +73 -0
- package/src/client/tiptap/extensions.ts +65 -0
- package/src/client/tiptap/image-node.ts +482 -0
- package/src/client/tiptap/link-toolbar.ts +371 -0
- package/src/client/tiptap/more-break.ts +50 -0
- package/src/client/tiptap/paste-image.ts +129 -0
- package/src/client/tiptap/slash-commands.ts +438 -0
- package/src/{lib → client}/toast.ts +101 -3
- package/src/client/types/sortablejs.d.ts +44 -0
- package/src/client/upload-with-metadata.ts +54 -0
- package/src/client/video-processor.ts +207 -0
- package/src/client.ts +27 -17
- package/src/db/__tests__/migrations.test.ts +118 -0
- package/src/db/index.ts +52 -0
- package/src/db/migrations/0000_baseline.sql +269 -0
- package/src/db/migrations/0001_fts_setup.sql +31 -0
- package/src/db/migrations/meta/0000_snapshot.json +703 -119
- package/src/db/migrations/meta/0001_snapshot.json +1337 -0
- package/src/db/migrations/meta/_journal.json +4 -39
- package/src/db/schema.ts +409 -140
- package/src/i18n/__tests__/detect.test.ts +115 -0
- package/src/i18n/context.tsx +2 -2
- package/src/i18n/detect.ts +85 -1
- package/src/i18n/i18n.ts +1 -1
- package/src/i18n/index.ts +2 -1
- package/src/i18n/locales/en.po +783 -1087
- package/src/i18n/locales/en.ts +1 -1
- package/src/i18n/locales/zh-Hans.po +867 -812
- package/src/i18n/locales/zh-Hans.ts +1 -1
- package/src/i18n/locales/zh-Hant.po +878 -823
- package/src/i18n/locales/zh-Hant.ts +1 -1
- package/src/i18n/middleware.ts +6 -0
- package/src/index.ts +5 -7
- package/src/lib/__tests__/blurhash-placeholder.test.ts +75 -0
- package/src/lib/__tests__/constants.test.ts +0 -1
- package/src/lib/__tests__/markdown-to-tiptap.test.ts +358 -0
- package/src/lib/__tests__/nanoid.test.ts +26 -0
- package/src/lib/__tests__/resolve-config.test.ts +2 -2
- package/src/lib/__tests__/schemas.test.ts +186 -65
- package/src/lib/__tests__/slug.test.ts +126 -0
- package/src/lib/__tests__/sse.test.ts +6 -6
- package/src/lib/__tests__/summary.test.ts +264 -0
- package/src/lib/__tests__/theme.test.ts +1 -1
- package/src/lib/__tests__/timeline.test.ts +33 -30
- package/src/lib/__tests__/tiptap-to-markdown.test.ts +346 -0
- package/src/lib/__tests__/url.test.ts +2 -2
- package/src/lib/__tests__/view.test.ts +140 -65
- package/src/lib/blurhash-placeholder.ts +102 -0
- package/src/lib/constants.ts +3 -1
- package/src/lib/emoji-catalog.ts +963 -0
- package/src/lib/errors.ts +11 -8
- package/src/lib/feed.ts +77 -31
- package/src/lib/html.ts +2 -1
- package/src/lib/icon-catalog.ts +5033 -1
- package/src/lib/icons.ts +3 -2
- package/src/lib/index.ts +0 -1
- package/src/lib/markdown-to-tiptap.ts +286 -0
- package/src/lib/media-helpers.ts +22 -12
- package/src/lib/nanoid.ts +29 -0
- package/src/lib/navigation.ts +1 -1
- package/src/lib/render.tsx +24 -5
- package/src/lib/resolve-config.ts +13 -2
- package/src/lib/schemas.ts +226 -58
- package/src/lib/search-snippet.ts +34 -0
- package/src/lib/slug.ts +96 -0
- package/src/lib/sse.ts +6 -6
- package/src/lib/storage.ts +115 -7
- package/src/lib/summary.ts +158 -0
- package/src/lib/theme.ts +11 -8
- package/src/lib/timeline.ts +76 -34
- package/src/lib/tiptap-render.ts +191 -0
- package/src/lib/tiptap-to-markdown.ts +305 -0
- package/src/lib/upload.ts +263 -14
- package/src/lib/url.ts +37 -22
- package/src/lib/view.ts +236 -55
- package/src/middleware/__tests__/auth.test.ts +191 -11
- package/src/middleware/__tests__/onboarding.test.ts +12 -10
- package/src/middleware/auth.ts +63 -9
- package/src/middleware/error-handler.ts +3 -3
- package/src/middleware/onboarding.ts +1 -1
- package/src/middleware/secure-headers.ts +40 -0
- package/src/preset.css +83 -2
- package/src/routes/__tests__/compose.test.ts +17 -24
- package/src/routes/api/__tests__/collections.test.ts +109 -61
- package/src/routes/api/__tests__/nav-items.test.ts +46 -29
- package/src/routes/api/__tests__/posts.test.ts +132 -68
- package/src/routes/api/__tests__/search.test.ts +15 -2
- package/src/routes/api/__tests__/upload-multipart.test.ts +534 -0
- package/src/routes/api/collections.ts +57 -31
- package/src/routes/api/custom-urls.ts +80 -0
- package/src/routes/api/export.ts +31 -0
- package/src/routes/api/nav-items.ts +23 -19
- package/src/routes/api/posts.ts +81 -62
- package/src/routes/api/search.ts +3 -4
- package/src/routes/api/upload-multipart.ts +245 -0
- package/src/routes/api/upload.ts +92 -24
- package/src/routes/auth/__tests__/setup.test.ts +20 -60
- package/src/routes/auth/reset.tsx +5 -4
- package/src/routes/auth/setup.tsx +39 -31
- package/src/routes/auth/signin.tsx +13 -14
- package/src/routes/compose.tsx +27 -63
- package/src/routes/dash/__tests__/settings-avatar.test.ts +44 -9
- package/src/routes/dash/custom-urls.tsx +414 -0
- package/src/routes/dash/settings.tsx +475 -99
- package/src/routes/feed/__tests__/rss.test.ts +22 -23
- package/src/routes/feed/rss.ts +6 -2
- package/src/routes/feed/sitemap.ts +2 -12
- package/src/routes/pages/__tests__/collections.test.ts +5 -6
- package/src/routes/pages/__tests__/featured.test.ts +36 -18
- package/src/routes/pages/archive.tsx +177 -37
- package/src/routes/pages/collection.tsx +43 -14
- package/src/routes/pages/collections.tsx +11 -2
- package/src/routes/pages/featured.tsx +27 -3
- package/src/routes/pages/home.tsx +15 -14
- package/src/routes/pages/latest.tsx +1 -11
- package/src/routes/pages/new.tsx +39 -0
- package/src/routes/pages/page.tsx +95 -49
- package/src/routes/pages/search.tsx +1 -1
- package/src/services/__tests__/api-token.test.ts +135 -0
- package/src/services/__tests__/collection.test.ts +275 -227
- package/src/services/__tests__/custom-url.test.ts +213 -0
- package/src/services/__tests__/media.test.ts +162 -22
- package/src/services/__tests__/navigation.test.ts +109 -68
- package/src/services/__tests__/post-timeline.test.ts +205 -32
- package/src/services/__tests__/post.test.ts +800 -230
- package/src/services/__tests__/search.test.ts +67 -10
- package/src/services/__tests__/settings.test.ts +3 -3
- package/src/services/api-token.ts +166 -0
- package/src/services/auth.ts +17 -2
- package/src/services/collection.ts +397 -131
- package/src/services/custom-url.ts +188 -0
- package/src/services/export.ts +802 -0
- package/src/services/index.ts +26 -19
- package/src/services/media.ts +100 -22
- package/src/services/navigation.ts +158 -47
- package/src/services/path.ts +339 -0
- package/src/services/post.ts +764 -172
- package/src/services/search.ts +161 -74
- package/src/services/settings.ts +6 -2
- package/src/styles/components.css +293 -62
- package/src/styles/tokens.css +93 -5
- package/src/styles/ui.css +4349 -766
- package/src/types/bindings.ts +8 -0
- package/src/types/config.ts +34 -4
- package/src/types/constants.ts +17 -2
- package/src/types/entities.ts +83 -37
- package/src/types/operations.ts +20 -27
- package/src/types/props.ts +52 -17
- package/src/types/views.ts +48 -24
- package/src/ui/color-themes.ts +133 -23
- package/src/ui/compose/ComposeDialog.tsx +255 -16
- package/src/ui/compose/ComposePrompt.tsx +1 -1
- package/src/ui/dash/CrudPageHeader.tsx +1 -1
- package/src/ui/dash/ListItemRow.tsx +1 -1
- package/src/ui/dash/StatusBadge.tsx +12 -2
- package/src/ui/dash/appearance/AdvancedContent.tsx +71 -59
- package/src/ui/dash/appearance/ColorThemeContent.tsx +48 -33
- package/src/ui/dash/appearance/FontThemeContent.tsx +65 -73
- package/src/ui/dash/appearance/NavigationContent.tsx +106 -135
- package/src/ui/dash/index.ts +0 -3
- package/src/ui/dash/settings/AccountContent.tsx +87 -146
- package/src/ui/dash/settings/AccountMenuContent.tsx +147 -0
- package/src/ui/dash/settings/ApiTokensContent.tsx +232 -0
- package/src/ui/dash/settings/AvatarContent.tsx +78 -0
- package/src/ui/dash/settings/GeneralContent.tsx +3 -62
- package/src/ui/dash/settings/SessionsContent.tsx +159 -0
- package/src/ui/dash/settings/SettingsRootContent.tsx +266 -0
- package/src/ui/feed/LinkCard.tsx +89 -40
- package/src/ui/feed/NoteCard.tsx +39 -25
- package/src/ui/feed/PostStatusBadges.tsx +67 -0
- package/src/ui/feed/QuoteCard.tsx +38 -23
- package/src/ui/feed/ThreadPreview.tsx +90 -26
- package/src/ui/feed/TimelineFeed.tsx +3 -2
- package/src/ui/feed/TimelineItem.tsx +15 -6
- package/src/ui/feed/__tests__/thread-preview.test.ts +107 -0
- package/src/ui/feed/thread-preview-state.ts +61 -0
- package/src/ui/font-themes.ts +2 -2
- package/src/ui/layouts/BaseLayout.tsx +2 -2
- package/src/ui/layouts/SiteLayout.tsx +116 -103
- package/src/ui/pages/ArchivePage.tsx +923 -95
- package/src/ui/pages/CollectionPage.tsx +6 -35
- package/src/ui/pages/CollectionsPage.tsx +2 -1
- package/src/ui/pages/ComposePage.tsx +54 -0
- package/src/ui/pages/FeaturedPage.tsx +2 -1
- package/src/ui/pages/HomePage.tsx +1 -1
- package/src/ui/pages/PostPage.tsx +30 -45
- package/src/ui/pages/SearchPage.tsx +182 -38
- package/src/ui/shared/AdminBreadcrumb.tsx +29 -0
- package/src/ui/shared/CollectionsSidebar.tsx +239 -4
- package/src/ui/shared/MediaGallery.tsx +475 -41
- package/src/ui/shared/PostFooter.tsx +204 -0
- package/src/ui/shared/StarRating.tsx +27 -0
- package/src/ui/shared/__tests__/format-chars.test.ts +35 -0
- package/src/ui/shared/index.ts +0 -1
- package/src/db/migrations/0000_square_wallflower.sql +0 -118
- package/src/db/migrations/0001_add_search_fts.sql +0 -34
- package/src/db/migrations/0002_add_media_attachments.sql +0 -3
- package/src/db/migrations/0003_add_navigation_links.sql +0 -8
- package/src/db/migrations/0004_add_storage_provider.sql +0 -3
- package/src/db/migrations/0005_v2_schema_migration.sql +0 -268
- package/src/db/migrations/0006_rename_slug_to_path.sql +0 -5
- package/src/db/migrations/0007_post_collections_m2m.sql +0 -94
- package/src/db/migrations/0008_add_collection_dividers.sql +0 -8
- package/src/db/migrations/0009_drop_collection_show_divider.sql +0 -2
- package/src/db/migrations/0010_add_performance_indexes.sql +0 -16
- package/src/db/migrations/0011_add_path_registry.sql +0 -23
- package/src/db/migrations/meta/0003_snapshot.json +0 -821
- package/src/lib/__tests__/sqid.test.ts +0 -65
- package/src/lib/collections-reorder.ts +0 -28
- package/src/lib/compose-bridge.ts +0 -280
- package/src/lib/media-upload.ts +0 -148
- package/src/lib/sqid.ts +0 -79
- package/src/routes/api/__tests__/pages.test.ts +0 -218
- package/src/routes/api/pages.ts +0 -73
- package/src/routes/dash/__tests__/pages.test.ts +0 -226
- package/src/routes/dash/appearance.tsx +0 -240
- package/src/routes/dash/collections.tsx +0 -211
- package/src/routes/dash/index.tsx +0 -103
- package/src/routes/dash/media.tsx +0 -132
- package/src/routes/dash/pages.tsx +0 -239
- package/src/routes/dash/posts.tsx +0 -334
- package/src/routes/dash/redirects.tsx +0 -257
- package/src/routes/pages/post.tsx +0 -59
- package/src/services/__tests__/page.test.ts +0 -298
- package/src/services/__tests__/path-registry.test.ts +0 -165
- package/src/services/__tests__/redirect.test.ts +0 -159
- package/src/services/page.ts +0 -203
- package/src/services/path-registry.ts +0 -160
- package/src/services/redirect.ts +0 -97
- package/src/types/sortablejs.d.ts +0 -29
- package/src/ui/components/__tests__/jant-compose-dialog.test.ts +0 -512
- package/src/ui/components/__tests__/jant-compose-editor.test.ts +0 -272
- package/src/ui/components/compose-types.ts +0 -75
- package/src/ui/components/jant-collection-form.ts +0 -512
- package/src/ui/components/jant-compose-dialog.ts +0 -495
- package/src/ui/components/jant-compose-editor.ts +0 -814
- package/src/ui/dash/PageForm.tsx +0 -185
- package/src/ui/dash/PostList.tsx +0 -95
- package/src/ui/dash/appearance/AppearanceNav.tsx +0 -60
- package/src/ui/dash/collections/CollectionForm.tsx +0 -166
- package/src/ui/dash/collections/CollectionsListContent.tsx +0 -146
- package/src/ui/dash/collections/IconPickerGrid.tsx +0 -50
- package/src/ui/dash/collections/ViewCollectionContent.tsx +0 -103
- package/src/ui/dash/media/MediaListContent.tsx +0 -201
- package/src/ui/dash/media/ViewMediaContent.tsx +0 -208
- package/src/ui/dash/pages/PagesContent.tsx +0 -74
- package/src/ui/dash/posts/PostForm.tsx +0 -248
- package/src/ui/dash/settings/SettingsNav.tsx +0 -52
- package/src/ui/layouts/DashLayout.tsx +0 -165
- package/src/ui/pages/SinglePage.tsx +0 -23
- package/src/ui/shared/ThreadView.tsx +0 -136
- /package/src/{ui → client}/components/settings-types.ts +0 -0
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
|
|
5
5
|
import { useLingui } from "@lingui/react/macro";
|
|
6
6
|
import type { FontTheme } from "../../font-themes.js";
|
|
7
|
-
import { AppearanceNav } from "./AppearanceNav.js";
|
|
8
7
|
|
|
9
8
|
export function FontThemeContent({
|
|
10
9
|
fontThemes,
|
|
@@ -16,80 +15,73 @@ export function FontThemeContent({
|
|
|
16
15
|
const { t } = useLingui();
|
|
17
16
|
|
|
18
17
|
return (
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
class="
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
18
|
+
<div
|
|
19
|
+
data-signals={JSON.stringify({ fontTheme: currentFontThemeId }).replace(
|
|
20
|
+
/</g,
|
|
21
|
+
"\\u003c",
|
|
22
|
+
)}
|
|
23
|
+
data-on:change="@post('/settings/font-theme')"
|
|
24
|
+
class="max-w-3xl"
|
|
25
|
+
>
|
|
26
|
+
<fieldset>
|
|
27
|
+
<legend class="text-lg font-semibold">
|
|
28
|
+
{t({
|
|
29
|
+
message: "Font theme",
|
|
30
|
+
comment: "@context: Appearance settings heading for font theme",
|
|
31
|
+
})}
|
|
32
|
+
</legend>
|
|
33
|
+
<p class="text-sm text-muted-foreground mb-4">
|
|
34
|
+
{t({
|
|
35
|
+
message:
|
|
36
|
+
"Choose a font pairing for your site. All options use system fonts for fast loading.",
|
|
37
|
+
comment: "@context: Font theme settings description",
|
|
38
|
+
})}
|
|
39
|
+
</p>
|
|
40
|
+
<div class="flex flex-col gap-2">
|
|
41
|
+
{fontThemes.map((ft) => (
|
|
42
|
+
<label
|
|
43
|
+
key={ft.id}
|
|
44
|
+
class={`flex items-start gap-3 p-3 rounded-lg border cursor-pointer transition-colors ${ft.id === currentFontThemeId ? "border-primary" : "border-border"}`}
|
|
45
|
+
data-class:border-primary={`$fontTheme === '${ft.id}'`}
|
|
46
|
+
data-class:border-border={`$fontTheme !== '${ft.id}'`}
|
|
47
|
+
>
|
|
48
|
+
<input
|
|
49
|
+
type="radio"
|
|
50
|
+
name="fontTheme"
|
|
51
|
+
value={ft.id}
|
|
52
|
+
data-bind="fontTheme"
|
|
53
|
+
checked={ft.id === currentFontThemeId || undefined}
|
|
54
|
+
class="mt-1"
|
|
55
|
+
/>
|
|
56
|
+
<div>
|
|
57
|
+
<div class="font-medium">{t(ft.name)}</div>
|
|
58
|
+
<div class="text-sm text-muted-foreground">
|
|
59
|
+
{t(ft.description)}
|
|
60
|
+
</div>
|
|
61
|
+
<div class="mt-1 text-sm leading-relaxed">
|
|
62
|
+
<div
|
|
63
|
+
class="font-semibold"
|
|
64
|
+
style={`font-family:${ft.headingFontFamily}`}
|
|
65
|
+
>
|
|
66
|
+
{t({
|
|
67
|
+
message: "The quick brown fox jumps over the lazy dog.",
|
|
68
|
+
comment:
|
|
69
|
+
"@context: Font theme preview sentence for headings",
|
|
70
|
+
})}
|
|
64
71
|
</div>
|
|
65
|
-
<div class="mt-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
message: "The quick brown fox jumps over the lazy dog.",
|
|
72
|
-
comment:
|
|
73
|
-
"@context: Font theme preview sentence for headings",
|
|
74
|
-
})}
|
|
75
|
-
</div>
|
|
76
|
-
<div
|
|
77
|
-
class="mt-2"
|
|
78
|
-
style={`font-family:${ft.bodyFontFamily}`}
|
|
79
|
-
>
|
|
80
|
-
{t({
|
|
81
|
-
message: "The quick brown fox jumps over the lazy dog.",
|
|
82
|
-
comment:
|
|
83
|
-
"@context: Font theme preview sentence for body text",
|
|
84
|
-
})}
|
|
85
|
-
</div>
|
|
72
|
+
<div class="mt-2" style={`font-family:${ft.bodyFontFamily}`}>
|
|
73
|
+
{t({
|
|
74
|
+
message: "The quick brown fox jumps over the lazy dog.",
|
|
75
|
+
comment:
|
|
76
|
+
"@context: Font theme preview sentence for body text",
|
|
77
|
+
})}
|
|
86
78
|
</div>
|
|
87
79
|
</div>
|
|
88
|
-
</
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
</
|
|
92
|
-
</
|
|
93
|
-
|
|
80
|
+
</div>
|
|
81
|
+
</label>
|
|
82
|
+
))}
|
|
83
|
+
</div>
|
|
84
|
+
</fieldset>
|
|
85
|
+
</div>
|
|
94
86
|
);
|
|
95
87
|
}
|
|
@@ -3,21 +3,19 @@
|
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
5
|
import { useLingui } from "@lingui/react/macro";
|
|
6
|
-
import type { NavItem,
|
|
6
|
+
import type { NavItem, SystemNavKey } from "../../../types.js";
|
|
7
7
|
import { SYSTEM_NAV_KEYS } from "../../../types.js";
|
|
8
8
|
import type {
|
|
9
9
|
NavManagerLabels,
|
|
10
10
|
SystemNavConfig,
|
|
11
|
-
} from "
|
|
12
|
-
import { AppearanceNav } from "./AppearanceNav.js";
|
|
13
|
-
|
|
11
|
+
} from "../../../client/components/nav-manager-types.js";
|
|
14
12
|
// =============================================================================
|
|
15
13
|
// System descriptions (used to build the config passed to the Lit component)
|
|
16
14
|
// =============================================================================
|
|
17
15
|
|
|
18
16
|
const SYSTEM_DESCRIPTIONS: Record<SystemNavKey, string> = {
|
|
19
17
|
rss: "Add a link to your RSS feed",
|
|
20
|
-
|
|
18
|
+
settings: "Shows 'Settings' when logged in, 'Sign in' when logged out",
|
|
21
19
|
collections: "Link to your collections page",
|
|
22
20
|
archive: "Link to the post archive",
|
|
23
21
|
};
|
|
@@ -28,13 +26,11 @@ const SYSTEM_DESCRIPTIONS: Record<SystemNavKey, string> = {
|
|
|
28
26
|
|
|
29
27
|
export function NavigationContent({
|
|
30
28
|
navItems,
|
|
31
|
-
availablePages,
|
|
32
29
|
headerNavMaxVisible,
|
|
33
30
|
homeDefaultView,
|
|
34
31
|
siteName,
|
|
35
32
|
}: {
|
|
36
33
|
navItems: NavItem[];
|
|
37
|
-
availablePages: Page[];
|
|
38
34
|
headerNavMaxVisible: number;
|
|
39
35
|
homeDefaultView: string;
|
|
40
36
|
siteName: string;
|
|
@@ -47,7 +43,6 @@ export function NavigationContent({
|
|
|
47
43
|
type: item.type,
|
|
48
44
|
label: item.label,
|
|
49
45
|
url: item.url,
|
|
50
|
-
pageId: item.pageId,
|
|
51
46
|
}));
|
|
52
47
|
|
|
53
48
|
// Build system nav config array for the Lit component
|
|
@@ -60,16 +55,9 @@ export function NavigationContent({
|
|
|
60
55
|
description: SYSTEM_DESCRIPTIONS[key],
|
|
61
56
|
}));
|
|
62
57
|
|
|
63
|
-
// Serialize available pages for the Lit component
|
|
64
|
-
const pagesData = availablePages.map((page) => ({
|
|
65
|
-
id: page.id,
|
|
66
|
-
title: page.title,
|
|
67
|
-
slug: page.slug,
|
|
68
|
-
}));
|
|
69
|
-
|
|
70
58
|
const labels: NavManagerLabels = {
|
|
71
59
|
preview: t({
|
|
72
|
-
message: "Preview",
|
|
60
|
+
message: "Navigation Preview",
|
|
73
61
|
comment: "@context: Label for nav preview section",
|
|
74
62
|
}),
|
|
75
63
|
navigationItems: t({
|
|
@@ -78,10 +66,9 @@ export function NavigationContent({
|
|
|
78
66
|
}),
|
|
79
67
|
emptyState: t({
|
|
80
68
|
message:
|
|
81
|
-
"No navigation items yet. Add
|
|
69
|
+
"No navigation items yet. Add links or enable system items below.",
|
|
82
70
|
comment: "@context: Empty state for navigation items",
|
|
83
71
|
}),
|
|
84
|
-
page: t({ message: "page", comment: "@context: Nav item type badge" }),
|
|
85
72
|
link: t({ message: "link", comment: "@context: Nav item type badge" }),
|
|
86
73
|
system: t({
|
|
87
74
|
message: "system",
|
|
@@ -104,13 +91,9 @@ export function NavigationContent({
|
|
|
104
91
|
message: "Delete",
|
|
105
92
|
comment: "@context: Delete nav item",
|
|
106
93
|
}),
|
|
107
|
-
editPage: t({
|
|
108
|
-
message: "Edit Page",
|
|
109
|
-
comment: "@context: Link to edit the page",
|
|
110
|
-
}),
|
|
111
94
|
remove: t({
|
|
112
95
|
message: "Remove",
|
|
113
|
-
comment: "@context: Remove
|
|
96
|
+
comment: "@context: Remove system item from navigation",
|
|
114
97
|
}),
|
|
115
98
|
orderSaved: t({
|
|
116
99
|
message: "Order saved",
|
|
@@ -121,11 +104,11 @@ export function NavigationContent({
|
|
|
121
104
|
comment: "@context: Error toast when nav label is empty",
|
|
122
105
|
}),
|
|
123
106
|
saveFailed: t({
|
|
124
|
-
message: "
|
|
107
|
+
message: "Couldn't save. Try again in a moment.",
|
|
125
108
|
comment: "@context: Error toast when nav save fails",
|
|
126
109
|
}),
|
|
127
110
|
deleteFailed: t({
|
|
128
|
-
message: "
|
|
111
|
+
message: "Couldn't delete. Try again in a moment.",
|
|
129
112
|
comment: "@context: Error toast when nav delete fails",
|
|
130
113
|
}),
|
|
131
114
|
systemLinks: t({
|
|
@@ -134,29 +117,13 @@ export function NavigationContent({
|
|
|
134
117
|
}),
|
|
135
118
|
systemLinksDescription: t({
|
|
136
119
|
message:
|
|
137
|
-
"Toggle built-in navigation items. Enabled items appear in your navigation alongside
|
|
120
|
+
"Toggle built-in navigation items. Enabled items appear in your navigation alongside links.",
|
|
138
121
|
comment: "@context: Description for system nav toggles",
|
|
139
122
|
}),
|
|
140
|
-
addPageToNavigation: t({
|
|
141
|
-
message: "Add page to navigation",
|
|
142
|
-
comment: "@context: Section heading for adding page to nav",
|
|
143
|
-
}),
|
|
144
123
|
addCustomLinkToNavigation: t({
|
|
145
124
|
message: "Add custom link to navigation",
|
|
146
125
|
comment: "@context: Section heading for adding custom link to nav",
|
|
147
126
|
}),
|
|
148
|
-
choosePage: t({
|
|
149
|
-
message: "Choose a page…",
|
|
150
|
-
comment: "@context: Placeholder for page select combobox trigger",
|
|
151
|
-
}),
|
|
152
|
-
searchPages: t({
|
|
153
|
-
message: "Search pages…",
|
|
154
|
-
comment: "@context: Placeholder for page search input in combobox",
|
|
155
|
-
}),
|
|
156
|
-
noPagesFound: t({
|
|
157
|
-
message: "No pages found.",
|
|
158
|
-
comment: "@context: Empty state when page search has no results",
|
|
159
|
-
}),
|
|
160
127
|
addLink: t({
|
|
161
128
|
message: "Add Link",
|
|
162
129
|
comment: "@context: Button and heading for adding custom link",
|
|
@@ -165,24 +132,30 @@ export function NavigationContent({
|
|
|
165
132
|
message: "Add a custom link to any URL",
|
|
166
133
|
comment: "@context: Description in link popover form",
|
|
167
134
|
}),
|
|
168
|
-
allPagesInNav: t({
|
|
169
|
-
message: "All pages are already in navigation.",
|
|
170
|
-
comment: "@context: Message when no pages available to add",
|
|
171
|
-
}),
|
|
172
135
|
urlPlaceholder: "/archive or https://...",
|
|
173
136
|
maxVisibleLinks: t({
|
|
174
|
-
message: "
|
|
137
|
+
message: "Links shown in header",
|
|
175
138
|
comment: "@context: Label for max visible nav links number input",
|
|
176
139
|
}),
|
|
140
|
+
maxVisibleLinksDescription: t({
|
|
141
|
+
message: "The rest will be tucked into a ··· menu",
|
|
142
|
+
comment:
|
|
143
|
+
"@context: Description for max visible nav links, explains overflow behavior",
|
|
144
|
+
}),
|
|
177
145
|
maxVisibleSaved: t({
|
|
178
146
|
message: "Max visible links saved",
|
|
179
147
|
comment: "@context: Toast after saving max visible nav links setting",
|
|
180
148
|
}),
|
|
181
149
|
useFeaturedAsDefault: t({
|
|
182
|
-
message: "
|
|
150
|
+
message: "Open with Featured posts",
|
|
183
151
|
comment:
|
|
184
152
|
"@context: Switch label for setting featured posts as default homepage",
|
|
185
153
|
}),
|
|
154
|
+
useFeaturedAsDefaultDescription: t({
|
|
155
|
+
message: "When off, visitors see your latest posts first",
|
|
156
|
+
comment:
|
|
157
|
+
"@context: Description for featured default toggle, explains what happens when off",
|
|
158
|
+
}),
|
|
186
159
|
homeViewSaved: t({
|
|
187
160
|
message: "Home view saved",
|
|
188
161
|
comment: "@context: Toast after saving home default view setting",
|
|
@@ -205,98 +178,96 @@ export function NavigationContent({
|
|
|
205
178
|
JSON.stringify(data).replace(/</g, "\\u003c");
|
|
206
179
|
|
|
207
180
|
return (
|
|
208
|
-
|
|
209
|
-
<
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
181
|
+
<div class="max-w-3xl flex flex-col gap-8">
|
|
182
|
+
<jant-nav-manager
|
|
183
|
+
items={escapeJson(itemsData)}
|
|
184
|
+
labels={escapeJson(labels)}
|
|
185
|
+
system-nav-items={escapeJson(systemNavData)}
|
|
186
|
+
site-name={siteName}
|
|
187
|
+
max-visible={headerNavMaxVisible}
|
|
188
|
+
home-default-view={homeDefaultView}
|
|
189
|
+
>
|
|
190
|
+
{/* SSR fallback: static preview until JS hydrates */}
|
|
191
|
+
<div class="nav-preview">
|
|
192
|
+
<div class="nav-preview-chrome">
|
|
193
|
+
<div class="nav-preview-dots">
|
|
194
|
+
<span />
|
|
195
|
+
<span />
|
|
196
|
+
<span />
|
|
197
|
+
</div>
|
|
198
|
+
<span class="nav-preview-label">
|
|
224
199
|
{t({
|
|
225
|
-
message: "Preview",
|
|
200
|
+
message: "Navigation Preview",
|
|
226
201
|
comment: "@context: Label for nav preview section",
|
|
227
202
|
})}
|
|
228
|
-
</
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
<circle cx="11" cy="11" r="8" />
|
|
264
|
-
<path d="m21 21-4.35-4.35" />
|
|
265
|
-
</svg>
|
|
266
|
-
</span>
|
|
267
|
-
</div>
|
|
268
|
-
</div>
|
|
269
|
-
<nav class="site-browse-nav">
|
|
270
|
-
<span class="site-browse-link site-browse-link-active">
|
|
271
|
-
{homeDefaultView === "featured"
|
|
272
|
-
? t({
|
|
273
|
-
message: "Featured",
|
|
274
|
-
comment: "@context: Browse filter label",
|
|
275
|
-
})
|
|
276
|
-
: t({
|
|
277
|
-
message: "Latest",
|
|
278
|
-
comment: "@context: Browse filter label",
|
|
279
|
-
})}
|
|
280
|
-
</span>
|
|
281
|
-
<span class="site-browse-sep" aria-hidden="true">
|
|
282
|
-
/
|
|
283
|
-
</span>
|
|
284
|
-
<span class="site-browse-link">
|
|
285
|
-
{homeDefaultView === "featured"
|
|
286
|
-
? t({
|
|
287
|
-
message: "Latest",
|
|
288
|
-
comment: "@context: Browse filter label",
|
|
289
|
-
})
|
|
290
|
-
: t({
|
|
291
|
-
message: "Featured",
|
|
292
|
-
comment: "@context: Browse filter label",
|
|
293
|
-
})}
|
|
203
|
+
</span>
|
|
204
|
+
</div>
|
|
205
|
+
<div class="nav-preview-content">
|
|
206
|
+
<div class="site-header-top">
|
|
207
|
+
<a href="/" class="site-logo">
|
|
208
|
+
{siteName}
|
|
209
|
+
</a>
|
|
210
|
+
<div class="site-header-right">
|
|
211
|
+
{navItems.length > 0 && (
|
|
212
|
+
<nav class="site-header-nav">
|
|
213
|
+
{navItems.slice(0, headerNavMaxVisible).map((item) => (
|
|
214
|
+
<a key={item.id} href={item.url} class="site-header-link">
|
|
215
|
+
{item.label}
|
|
216
|
+
</a>
|
|
217
|
+
))}
|
|
218
|
+
{navItems.length > headerNavMaxVisible && (
|
|
219
|
+
<span class="text-muted-foreground">…</span>
|
|
220
|
+
)}
|
|
221
|
+
</nav>
|
|
222
|
+
)}
|
|
223
|
+
<span class="site-header-search" aria-hidden="true">
|
|
224
|
+
<svg
|
|
225
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
226
|
+
width="16"
|
|
227
|
+
height="16"
|
|
228
|
+
viewBox="0 0 24 24"
|
|
229
|
+
fill="none"
|
|
230
|
+
stroke="currentColor"
|
|
231
|
+
stroke-width="2"
|
|
232
|
+
stroke-linecap="round"
|
|
233
|
+
stroke-linejoin="round"
|
|
234
|
+
>
|
|
235
|
+
<circle cx="11" cy="11" r="8" />
|
|
236
|
+
<path d="m21 21-4.35-4.35" />
|
|
237
|
+
</svg>
|
|
294
238
|
</span>
|
|
295
|
-
</
|
|
239
|
+
</div>
|
|
296
240
|
</div>
|
|
241
|
+
<nav class="site-browse-nav">
|
|
242
|
+
<span class="site-browse-link site-browse-link-active">
|
|
243
|
+
{homeDefaultView === "featured"
|
|
244
|
+
? t({
|
|
245
|
+
message: "Featured",
|
|
246
|
+
comment: "@context: Browse filter label",
|
|
247
|
+
})
|
|
248
|
+
: t({
|
|
249
|
+
message: "Latest",
|
|
250
|
+
comment: "@context: Browse filter label",
|
|
251
|
+
})}
|
|
252
|
+
</span>
|
|
253
|
+
<span class="site-browse-sep" aria-hidden="true">
|
|
254
|
+
/
|
|
255
|
+
</span>
|
|
256
|
+
<span class="site-browse-link">
|
|
257
|
+
{homeDefaultView === "featured"
|
|
258
|
+
? t({
|
|
259
|
+
message: "Latest",
|
|
260
|
+
comment: "@context: Browse filter label",
|
|
261
|
+
})
|
|
262
|
+
: t({
|
|
263
|
+
message: "Featured",
|
|
264
|
+
comment: "@context: Browse filter label",
|
|
265
|
+
})}
|
|
266
|
+
</span>
|
|
267
|
+
</nav>
|
|
297
268
|
</div>
|
|
298
|
-
</
|
|
299
|
-
</
|
|
300
|
-
|
|
269
|
+
</div>
|
|
270
|
+
</jant-nav-manager>
|
|
271
|
+
</div>
|
|
301
272
|
);
|
|
302
273
|
}
|
package/src/ui/dash/index.ts
CHANGED
|
@@ -4,7 +4,4 @@ export { DangerZone, type DangerZoneProps } from "./DangerZone.js";
|
|
|
4
4
|
export { EmptyState, type EmptyStateProps } from "../shared/EmptyState.js";
|
|
5
5
|
export { FormatBadge, type FormatBadgeProps } from "./FormatBadge.js";
|
|
6
6
|
export { ListItemRow, type ListItemRowProps } from "./ListItemRow.js";
|
|
7
|
-
export { PageForm, type PageFormProps } from "./PageForm.js";
|
|
8
|
-
export { PostForm, type PostFormProps } from "./posts/PostForm.js";
|
|
9
|
-
export { PostList, type PostListProps } from "./PostList.js";
|
|
10
7
|
export { StatusBadge, type StatusBadgeProps } from "./StatusBadge.js";
|