@jant/core 0.3.32 → 0.3.34

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.
Files changed (97) hide show
  1. package/dist/client/client.css +1 -1
  2. package/dist/client/client.js +1442 -989
  3. package/dist/index.js +1431 -1057
  4. package/package.json +1 -1
  5. package/src/__tests__/helpers/app.ts +6 -3
  6. package/src/__tests__/helpers/db.ts +3 -0
  7. package/src/app.tsx +1 -1
  8. package/src/client.ts +2 -1
  9. package/src/db/migrations/0011_add_path_registry.sql +23 -0
  10. package/src/db/schema.ts +12 -1
  11. package/src/i18n/locales/en.po +225 -91
  12. package/src/i18n/locales/en.ts +1 -1
  13. package/src/i18n/locales/zh-Hans.po +201 -152
  14. package/src/i18n/locales/zh-Hans.ts +1 -1
  15. package/src/i18n/locales/zh-Hant.po +201 -152
  16. package/src/i18n/locales/zh-Hant.ts +1 -1
  17. package/src/lib/__tests__/excerpt.test.ts +25 -0
  18. package/src/lib/__tests__/resolve-config.test.ts +26 -2
  19. package/src/lib/__tests__/timeline.test.ts +2 -1
  20. package/src/lib/compose-bridge.ts +30 -1
  21. package/src/lib/excerpt.ts +16 -7
  22. package/src/lib/nav-manager-bridge.ts +54 -0
  23. package/src/lib/navigation.ts +7 -4
  24. package/src/lib/render.tsx +5 -2
  25. package/src/lib/resolve-config.ts +7 -0
  26. package/src/lib/view.ts +42 -10
  27. package/src/middleware/error-handler.ts +16 -0
  28. package/src/routes/api/__tests__/posts.test.ts +80 -0
  29. package/src/routes/api/__tests__/settings.test.ts +1 -1
  30. package/src/routes/api/posts.ts +6 -29
  31. package/src/routes/api/upload.ts +2 -14
  32. package/src/routes/auth/__tests__/setup.test.ts +3 -2
  33. package/src/routes/auth/setup.tsx +1 -1
  34. package/src/routes/compose.tsx +13 -5
  35. package/src/routes/dash/__tests__/pages.test.ts +2 -1
  36. package/src/routes/dash/__tests__/settings-avatar.test.ts +151 -33
  37. package/src/routes/dash/appearance.tsx +71 -4
  38. package/src/routes/dash/collections.tsx +15 -21
  39. package/src/routes/dash/media.tsx +1 -13
  40. package/src/routes/dash/pages.tsx +5 -150
  41. package/src/routes/dash/posts.tsx +25 -32
  42. package/src/routes/dash/redirects.tsx +9 -11
  43. package/src/routes/dash/settings.tsx +29 -111
  44. package/src/routes/feed/__tests__/rss.test.ts +5 -1
  45. package/src/routes/pages/__tests__/collections.test.ts +2 -1
  46. package/src/routes/pages/__tests__/featured.test.ts +2 -1
  47. package/src/routes/pages/page.tsx +20 -25
  48. package/src/services/__tests__/collection.test.ts +2 -1
  49. package/src/services/__tests__/media.test.ts +78 -1
  50. package/src/services/__tests__/navigation.test.ts +2 -1
  51. package/src/services/__tests__/page.test.ts +78 -1
  52. package/src/services/__tests__/path-registry.test.ts +165 -0
  53. package/src/services/__tests__/post-timeline.test.ts +2 -1
  54. package/src/services/__tests__/post.test.ts +103 -1
  55. package/src/services/__tests__/redirect.test.ts +53 -4
  56. package/src/services/__tests__/search.test.ts +2 -1
  57. package/src/services/__tests__/settings.test.ts +153 -0
  58. package/src/services/index.ts +12 -4
  59. package/src/services/media.ts +72 -4
  60. package/src/services/page.ts +64 -17
  61. package/src/services/path-registry.ts +160 -0
  62. package/src/services/post.ts +119 -24
  63. package/src/services/redirect.ts +23 -3
  64. package/src/services/settings.ts +181 -0
  65. package/src/styles/components.css +135 -0
  66. package/src/styles/tokens.css +6 -1
  67. package/src/styles/ui.css +70 -26
  68. package/src/types/bindings.ts +1 -0
  69. package/src/types/config.ts +7 -2
  70. package/src/types/constants.ts +9 -1
  71. package/src/types/sortablejs.d.ts +8 -2
  72. package/src/types/views.ts +1 -1
  73. package/src/ui/color-themes.ts +31 -31
  74. package/src/ui/components/__tests__/jant-settings-avatar.test.ts +0 -3
  75. package/src/ui/components/__tests__/jant-settings-general.test.ts +2 -6
  76. package/src/ui/components/jant-compose-dialog.ts +3 -2
  77. package/src/ui/components/jant-compose-editor.ts +17 -2
  78. package/src/ui/components/jant-nav-manager.ts +1067 -0
  79. package/src/ui/components/jant-settings-general.ts +2 -35
  80. package/src/ui/components/nav-manager-types.ts +72 -0
  81. package/src/ui/components/settings-types.ts +0 -3
  82. package/src/ui/compose/ComposePrompt.tsx +3 -11
  83. package/src/ui/dash/appearance/AdvancedContent.tsx +0 -3
  84. package/src/ui/dash/appearance/AppearanceNav.tsx +12 -8
  85. package/src/ui/dash/appearance/ColorThemeContent.tsx +1 -4
  86. package/src/ui/dash/appearance/FontThemeContent.tsx +0 -3
  87. package/src/ui/dash/appearance/NavigationContent.tsx +302 -0
  88. package/src/ui/dash/pages/PagesContent.tsx +74 -0
  89. package/src/ui/dash/settings/AccountContent.tsx +0 -3
  90. package/src/ui/dash/settings/GeneralContent.tsx +1 -19
  91. package/src/ui/dash/settings/SettingsNav.tsx +2 -6
  92. package/src/ui/feed/NoteCard.tsx +2 -2
  93. package/src/ui/layouts/DashLayout.tsx +83 -86
  94. package/src/ui/layouts/SiteLayout.tsx +82 -21
  95. package/src/lib/nav-reorder.ts +0 -26
  96. package/src/ui/dash/pages/LinkFormContent.tsx +0 -119
  97. package/src/ui/dash/pages/UnifiedPagesContent.tsx +0 -203
@@ -1,203 +0,0 @@
1
- /**
2
- * Unified pages list - navigation items + other pages
3
- */
4
-
5
- import { useLingui } from "@lingui/react/macro";
6
- import type { Page, NavItem } from "../../../types.js";
7
- import { ListItemRow, ActionButtons, CrudPageHeader } from "../index.js";
8
-
9
- export function UnifiedPagesContent({
10
- navItems,
11
- otherPages,
12
- }: {
13
- navItems: NavItem[];
14
- otherPages: Page[];
15
- }) {
16
- const { t } = useLingui();
17
-
18
- return (
19
- <>
20
- <CrudPageHeader
21
- title={t({
22
- message: "Pages",
23
- comment: "@context: Pages main heading",
24
- })}
25
- >
26
- <div class="flex gap-2">
27
- <a href="/dash/pages/links/new" class="btn-outline">
28
- {t({
29
- message: "Add Link",
30
- comment: "@context: Button to add a navigation link",
31
- })}
32
- </a>
33
- <a href="/dash/pages/new" class="btn">
34
- {t({
35
- message: "New Page",
36
- comment: "@context: Button to create new page",
37
- })}
38
- </a>
39
- </div>
40
- </CrudPageHeader>
41
-
42
- {/* Navigation section */}
43
- <section class="mb-8">
44
- <h2 class="text-lg font-medium mb-3">
45
- {t({
46
- message: "Your site navigation",
47
- comment: "@context: Section heading for navigation items",
48
- })}
49
- </h2>
50
- {navItems.length === 0 ? (
51
- <p class="text-sm text-muted-foreground py-4">
52
- {t({
53
- message:
54
- "No navigation links yet. Add pages to navigation or create links.",
55
- comment: "@context: Empty state for navigation section",
56
- })}
57
- </p>
58
- ) : (
59
- <div id="nav-links-list" class="flex flex-col divide-y">
60
- {navItems.map((item) => (
61
- <ListItemRow
62
- key={item.id}
63
- actions={
64
- item.type === "page" ? (
65
- <>
66
- <ActionButtons
67
- editHref={
68
- item.pageId
69
- ? `/dash/pages/${item.pageId}/edit`
70
- : undefined
71
- }
72
- editLabel={t({
73
- message: "Edit",
74
- comment: "@context: Button to edit page",
75
- })}
76
- />
77
- <button
78
- type="button"
79
- class="btn-sm-ghost"
80
- data-on:click__prevent={`@post('/dash/pages/${item.pageId}/remove-from-nav')`}
81
- >
82
- {t({
83
- message: "Un-nav",
84
- comment:
85
- "@context: Button to remove page from navigation",
86
- })}
87
- </button>
88
- </>
89
- ) : (
90
- <>
91
- <ActionButtons
92
- editHref={`/dash/pages/links/${item.id}/edit`}
93
- editLabel={t({
94
- message: "Edit",
95
- comment: "@context: Button to edit link",
96
- })}
97
- deleteAction={`/dash/pages/links/${item.id}/delete`}
98
- deleteLabel={t({
99
- message: "Delete",
100
- comment: "@context: Button to delete link",
101
- })}
102
- />
103
- </>
104
- )
105
- }
106
- >
107
- <div
108
- class="flex items-center gap-3 cursor-grab"
109
- data-id={item.id}
110
- >
111
- <span class="text-muted-foreground select-none">⠿</span>
112
- <div class="flex items-center gap-2">
113
- <span class="font-medium">{item.label}</span>
114
- <code class="text-sm text-muted-foreground bg-muted px-1 rounded">
115
- {item.url}
116
- </code>
117
- <span class="badge-secondary">
118
- {item.type === "page"
119
- ? t({
120
- message: "page",
121
- comment: "@context: Nav item type badge",
122
- })
123
- : t({
124
- message: "link",
125
- comment: "@context: Nav item type badge",
126
- })}
127
- </span>
128
- </div>
129
- </div>
130
- </ListItemRow>
131
- ))}
132
- </div>
133
- )}
134
- </section>
135
-
136
- {/* Other pages section */}
137
- <section>
138
- <h2 class="text-lg font-medium mb-3">
139
- {t({
140
- message: "Other pages",
141
- comment: "@context: Section heading for pages not in navigation",
142
- })}
143
- </h2>
144
- {otherPages.length === 0 ? (
145
- <p class="text-sm text-muted-foreground py-4">
146
- {t({
147
- message: "All pages are in your navigation.",
148
- comment: "@context: Empty state when all pages are in nav",
149
- })}
150
- </p>
151
- ) : (
152
- <div class="flex flex-col divide-y">
153
- {otherPages.map((page) => (
154
- <ListItemRow
155
- key={page.id}
156
- actions={
157
- <>
158
- <button
159
- type="button"
160
- class="btn-sm-outline"
161
- data-on:click__prevent={`@post('/dash/pages/${page.id}/add-to-nav')`}
162
- >
163
- {t({
164
- message: "Add to nav",
165
- comment: "@context: Button to add page to navigation",
166
- })}
167
- </button>
168
- <ActionButtons
169
- editHref={`/dash/pages/${page.id}/edit`}
170
- editLabel={t({
171
- message: "Edit",
172
- comment: "@context: Button to edit page",
173
- })}
174
- viewHref={
175
- page.status !== "draft" ? `/${page.slug}` : undefined
176
- }
177
- viewLabel={t({
178
- message: "View",
179
- comment: "@context: Button to view page on public site",
180
- })}
181
- />
182
- </>
183
- }
184
- >
185
- <a
186
- href={`/dash/pages/${page.id}`}
187
- class="font-medium hover:underline"
188
- >
189
- {page.title ||
190
- t({
191
- message: "Untitled",
192
- comment: "@context: Default title for untitled page",
193
- })}
194
- </a>
195
- <p class="text-sm text-muted-foreground mt-1">/{page.slug}</p>
196
- </ListItemRow>
197
- ))}
198
- </div>
199
- )}
200
- </section>
201
- </>
202
- );
203
- }