@meith/theme-raidframe 0.7.0 → 0.8.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/package.json +4 -4
- package/src/copy.ts +286 -0
- package/src/index.ts +2 -2
- package/src/messages/en.json +144 -0
- package/src/messages/index.ts +5 -0
- package/src/shared.tsx +1 -2
- package/src/slots/announcement.tsx +16 -6
- package/src/slots/auth-page.tsx +12 -3
- package/src/slots/board-index.tsx +10 -3
- package/src/slots/board-stats.tsx +18 -12
- package/src/slots/category-block.tsx +13 -6
- package/src/slots/discovery-view.tsx +17 -8
- package/src/slots/error-notice.tsx +17 -5
- package/src/slots/footer.tsx +16 -4
- package/src/slots/forum-display.tsx +20 -11
- package/src/slots/forum-row.tsx +26 -10
- package/src/slots/header.tsx +13 -3
- package/src/slots/latest-posts.tsx +12 -6
- package/src/slots/latest-threads.tsx +18 -8
- package/src/slots/member-profile.tsx +14 -10
- package/src/slots/navigation.tsx +6 -3
- package/src/slots/notice.tsx +7 -4
- package/src/slots/pagination.tsx +10 -6
- package/src/slots/panel-nav.tsx +40 -13
- package/src/slots/panel-page.tsx +12 -11
- package/src/slots/post-actions.tsx +17 -10
- package/src/slots/post-bit.tsx +29 -18
- package/src/slots/post-form.tsx +14 -4
- package/src/slots/redirect-notice.tsx +16 -8
- package/src/slots/search-form.tsx +12 -8
- package/src/slots/search-results.tsx +26 -16
- package/src/slots/shell.tsx +6 -3
- package/src/slots/subforum-list.tsx +8 -5
- package/src/slots/thread-row.tsx +19 -11
- package/src/slots/thread-view.tsx +22 -8
- package/src/slots/user-panel.tsx +14 -14
- package/src/slots/who-is-online.tsx +19 -10
- package/src/theme.ts +66 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@meith/theme-raidframe",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"description": "A gaming theme for Meith — guild, raid and match boards — built on the default theme's slots.",
|
|
5
5
|
"license": "LGPL-3.0-or-later",
|
|
6
6
|
"repository": {
|
|
@@ -20,9 +20,9 @@
|
|
|
20
20
|
"access": "public"
|
|
21
21
|
},
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"@meith/theme-default": "^0.
|
|
24
|
-
"@meith/
|
|
25
|
-
"@meith/
|
|
23
|
+
"@meith/theme-default": "^0.8.0",
|
|
24
|
+
"@meith/ui": "^0.8.0",
|
|
25
|
+
"@meith/theme-kit": "^0.8.0"
|
|
26
26
|
},
|
|
27
27
|
"peerDependencies": {
|
|
28
28
|
"react": "^19.2.0"
|
package/src/copy.ts
ADDED
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
import type { SlotCopy, Translator } from '@meith/theme-kit'
|
|
2
|
+
|
|
3
|
+
function copyFor(t: Translator, keys: readonly string[]): SlotCopy {
|
|
4
|
+
const copy: Record<string, string> = {}
|
|
5
|
+
for (const key of keys) copy[key] = t.t(key)
|
|
6
|
+
return copy
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export function announcementCopy(t: Translator): SlotCopy {
|
|
10
|
+
return copyFor(t, [
|
|
11
|
+
'raidframe.announcement.kicker',
|
|
12
|
+
'raidframe.announcement.postedFallback',
|
|
13
|
+
'raidframe.announcement.postedByPrefix',
|
|
14
|
+
'raidframe.announcement.separator',
|
|
15
|
+
])
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export function authPageCopy(t: Translator): SlotCopy {
|
|
19
|
+
return copyFor(t, ['raidframe.authPage.kicker'])
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export function boardIndexCopy(t: Translator): SlotCopy {
|
|
23
|
+
return copyFor(t, ['raidframe.boardIndex.markAllRead'])
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export function boardStatsCopy(t: Translator): SlotCopy {
|
|
27
|
+
return copyFor(t, [
|
|
28
|
+
'raidframe.boardStats.heading',
|
|
29
|
+
'raidframe.boardStats.threads',
|
|
30
|
+
'raidframe.boardStats.posts',
|
|
31
|
+
'raidframe.boardStats.members',
|
|
32
|
+
'raidframe.boardStats.newestMember',
|
|
33
|
+
'raidframe.boardStats.none',
|
|
34
|
+
'raidframe.boardStats.notCountedYet',
|
|
35
|
+
'raidframe.boardStats.counted',
|
|
36
|
+
])
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export function categoryBlockCopy(t: Translator): SlotCopy {
|
|
40
|
+
return copyFor(t, [
|
|
41
|
+
'raidframe.categoryBlock.forum',
|
|
42
|
+
'raidframe.categoryBlock.threads',
|
|
43
|
+
'raidframe.categoryBlock.posts',
|
|
44
|
+
'raidframe.categoryBlock.lastPost',
|
|
45
|
+
])
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export function discoveryViewCopy(t: Translator): SlotCopy {
|
|
49
|
+
return copyFor(t, [
|
|
50
|
+
'raidframe.discoveryView.kicker',
|
|
51
|
+
'raidframe.discoveryView.reply.one',
|
|
52
|
+
'raidframe.discoveryView.reply.other',
|
|
53
|
+
'raidframe.discoveryView.startedBy',
|
|
54
|
+
'raidframe.discoveryView.lastPostByPrefix',
|
|
55
|
+
])
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export function errorNoticeCopy(t: Translator): SlotCopy {
|
|
59
|
+
return copyFor(t, [
|
|
60
|
+
'raidframe.errorNotice.errorLabel',
|
|
61
|
+
'raidframe.errorNotice.forumHome',
|
|
62
|
+
'raidframe.errorNotice.requestId',
|
|
63
|
+
])
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export function footerCopy(t: Translator): SlotCopy {
|
|
67
|
+
return copyFor(t, ['raidframe.footer.linksAriaLabel', 'raidframe.footer.allTimesPrefix'])
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export function forumDisplayCopy(t: Translator): SlotCopy {
|
|
71
|
+
return copyFor(t, [
|
|
72
|
+
'raidframe.forumDisplay.kicker',
|
|
73
|
+
'raidframe.forumDisplay.threadHeader',
|
|
74
|
+
'raidframe.forumDisplay.repliesHeader',
|
|
75
|
+
'raidframe.forumDisplay.viewsHeader',
|
|
76
|
+
'raidframe.forumDisplay.lastPostHeader',
|
|
77
|
+
'raidframe.forumDisplay.threads',
|
|
78
|
+
'raidframe.forumDisplay.posts',
|
|
79
|
+
'raidframe.forumDisplay.newThread',
|
|
80
|
+
'raidframe.forumDisplay.markRead',
|
|
81
|
+
])
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export function forumRowCopy(t: Translator): SlotCopy {
|
|
85
|
+
return copyFor(t, [
|
|
86
|
+
'raidframe.forumRow.newPosts',
|
|
87
|
+
'raidframe.forumRow.linkBadge',
|
|
88
|
+
'raidframe.forumRow.none',
|
|
89
|
+
'raidframe.forumRow.noPostsYet',
|
|
90
|
+
'raidframe.forumRow.separator',
|
|
91
|
+
])
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export function headerCopy(t: Translator): SlotCopy {
|
|
95
|
+
return copyFor(t, ['raidframe.header.sectionsAriaLabel'])
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
export function latestPostsCopy(t: Translator): SlotCopy {
|
|
99
|
+
return copyFor(t, [
|
|
100
|
+
'raidframe.latestPosts.heading',
|
|
101
|
+
'raidframe.latestPosts.empty',
|
|
102
|
+
'raidframe.latestPosts.asOf',
|
|
103
|
+
])
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export function latestThreadsCopy(t: Translator): SlotCopy {
|
|
107
|
+
return copyFor(t, [
|
|
108
|
+
'raidframe.latestThreads.heading',
|
|
109
|
+
'raidframe.latestThreads.empty',
|
|
110
|
+
'raidframe.latestThreads.asOf',
|
|
111
|
+
'raidframe.latestThreads.replies',
|
|
112
|
+
])
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
export function memberProfileCopy(t: Translator): SlotCopy {
|
|
116
|
+
return copyFor(t, [
|
|
117
|
+
'raidframe.memberProfile.kicker',
|
|
118
|
+
'raidframe.memberProfile.statsHeading',
|
|
119
|
+
'raidframe.memberProfile.posts',
|
|
120
|
+
'raidframe.memberProfile.joined',
|
|
121
|
+
'raidframe.memberProfile.lastVisit',
|
|
122
|
+
'raidframe.memberProfile.never',
|
|
123
|
+
'raidframe.memberProfile.signatureHeading',
|
|
124
|
+
'raidframe.memberProfile.actionsAriaLabel',
|
|
125
|
+
])
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
export function navigationCopy(t: Translator): SlotCopy {
|
|
129
|
+
return copyFor(t, ['raidframe.navigation.ariaLabel'])
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
export function noticeCopy(t: Translator): SlotCopy {
|
|
133
|
+
return copyFor(t, [
|
|
134
|
+
'raidframe.notice.info',
|
|
135
|
+
'raidframe.notice.success',
|
|
136
|
+
'raidframe.notice.warning',
|
|
137
|
+
'raidframe.notice.error',
|
|
138
|
+
'raidframe.notice.dismiss',
|
|
139
|
+
])
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
export function paginationCopy(t: Translator): SlotCopy {
|
|
143
|
+
return copyFor(t, [
|
|
144
|
+
'raidframe.pagination.ariaLabel',
|
|
145
|
+
'raidframe.pagination.prev',
|
|
146
|
+
'raidframe.pagination.next',
|
|
147
|
+
'raidframe.pagination.page',
|
|
148
|
+
])
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
export function panelNavCopy(t: Translator): SlotCopy {
|
|
152
|
+
return copyFor(t, ['raidframe.panelNav.waiting'])
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
export function panelPageCopy(t: Translator): SlotCopy {
|
|
156
|
+
return copyFor(t, [
|
|
157
|
+
'raidframe.panelPage.panelLabel.usercp',
|
|
158
|
+
'raidframe.panelPage.panelLabel.modcp',
|
|
159
|
+
'raidframe.panelPage.panelLabel.admincp',
|
|
160
|
+
])
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
export function postActionsCopy(t: Translator): SlotCopy {
|
|
164
|
+
return copyFor(t, [
|
|
165
|
+
'raidframe.postActions.quote',
|
|
166
|
+
'raidframe.postActions.edit',
|
|
167
|
+
'raidframe.postActions.restore',
|
|
168
|
+
'raidframe.postActions.rate',
|
|
169
|
+
'raidframe.postActions.report',
|
|
170
|
+
'raidframe.postActions.warn',
|
|
171
|
+
'raidframe.postActions.moderate',
|
|
172
|
+
'raidframe.postActions.ariaLabel',
|
|
173
|
+
])
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
export function postBitCopy(t: Translator): SlotCopy {
|
|
177
|
+
return copyFor(t, [
|
|
178
|
+
'raidframe.postBit.deletedNotice',
|
|
179
|
+
'raidframe.postBit.awaitingApprovalNotice',
|
|
180
|
+
'raidframe.postBit.posts',
|
|
181
|
+
'raidframe.postBit.rep',
|
|
182
|
+
'raidframe.postBit.joined',
|
|
183
|
+
'raidframe.postBit.online',
|
|
184
|
+
'raidframe.postBit.ignoredPrefix',
|
|
185
|
+
'raidframe.postBit.ignoredSuffix',
|
|
186
|
+
'raidframe.postBit.showIt',
|
|
187
|
+
])
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
export function postFormCopy(t: Translator): SlotCopy {
|
|
191
|
+
return copyFor(t, [
|
|
192
|
+
'raidframe.postForm.mode.edit',
|
|
193
|
+
'raidframe.postForm.mode.reply',
|
|
194
|
+
'raidframe.postForm.mode.newThread',
|
|
195
|
+
'raidframe.postForm.cannotPost',
|
|
196
|
+
])
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
export function redirectNoticeCopy(t: Translator): SlotCopy {
|
|
200
|
+
return copyFor(t, [
|
|
201
|
+
'raidframe.redirectNotice.kicker',
|
|
202
|
+
'raidframe.redirectNotice.title',
|
|
203
|
+
'raidframe.redirectNotice.continueNow',
|
|
204
|
+
'raidframe.redirectNotice.continuingIn',
|
|
205
|
+
'raidframe.redirectNotice.second.one',
|
|
206
|
+
'raidframe.redirectNotice.second.other',
|
|
207
|
+
])
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
export function searchFormCopy(t: Translator): SlotCopy {
|
|
211
|
+
return copyFor(t, [
|
|
212
|
+
'raidframe.searchForm.heading',
|
|
213
|
+
'raidframe.searchForm.searchForLabel',
|
|
214
|
+
'raidframe.searchForm.placeholder',
|
|
215
|
+
'raidframe.searchForm.inLabel',
|
|
216
|
+
'raidframe.searchForm.sortByLabel',
|
|
217
|
+
'raidframe.searchForm.submit',
|
|
218
|
+
])
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
export function searchResultsCopy(t: Translator): SlotCopy {
|
|
222
|
+
return copyFor(t, [
|
|
223
|
+
'raidframe.searchResults.kicker',
|
|
224
|
+
'raidframe.searchResults.resultsForPrefix',
|
|
225
|
+
'raidframe.searchResults.resultsForSuffix',
|
|
226
|
+
'raidframe.searchResults.run',
|
|
227
|
+
'raidframe.searchResults.accessNotice',
|
|
228
|
+
'raidframe.searchResults.nothingMatched',
|
|
229
|
+
'raidframe.searchResults.nothingMatchedHint',
|
|
230
|
+
'raidframe.searchResults.startNewSearch',
|
|
231
|
+
'raidframe.searchResults.removeFilter',
|
|
232
|
+
'raidframe.searchResults.clearFilters',
|
|
233
|
+
])
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
export function shellCopy(t: Translator): SlotCopy {
|
|
237
|
+
return copyFor(t, ['raidframe.shell.skipToContent'])
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
export function subforumListCopy(t: Translator): SlotCopy {
|
|
241
|
+
return copyFor(t, ['raidframe.subforumList.ariaLabel', 'raidframe.subforumList.label'])
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
export function threadRowCopy(t: Translator): SlotCopy {
|
|
245
|
+
return copyFor(t, [
|
|
246
|
+
'raidframe.threadRow.newPosts',
|
|
247
|
+
'raidframe.threadRow.pinned',
|
|
248
|
+
'raidframe.threadRow.locked',
|
|
249
|
+
'raidframe.threadRow.moved',
|
|
250
|
+
'raidframe.threadRow.startedBy',
|
|
251
|
+
'raidframe.threadRow.none',
|
|
252
|
+
'raidframe.threadRow.byPrefix',
|
|
253
|
+
])
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
export function threadViewCopy(t: Translator): SlotCopy {
|
|
257
|
+
return copyFor(t, [
|
|
258
|
+
'raidframe.threadView.postReply',
|
|
259
|
+
'raidframe.threadView.pinned',
|
|
260
|
+
'raidframe.threadView.locked',
|
|
261
|
+
'raidframe.threadView.replies',
|
|
262
|
+
'raidframe.threadView.views',
|
|
263
|
+
'raidframe.threadView.markRead',
|
|
264
|
+
])
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
export function userPanelCopy(t: Translator): SlotCopy {
|
|
268
|
+
return copyFor(t, [
|
|
269
|
+
'raidframe.userPanel.signedIn',
|
|
270
|
+
'raidframe.userPanel.new',
|
|
271
|
+
'raidframe.userPanel.pm',
|
|
272
|
+
'raidframe.userPanel.accountLabel',
|
|
273
|
+
])
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
export function whoIsOnlineCopy(t: Translator): SlotCopy {
|
|
277
|
+
return copyFor(t, [
|
|
278
|
+
'raidframe.whoIsOnline.heading',
|
|
279
|
+
'raidframe.whoIsOnline.onlineSuffix',
|
|
280
|
+
'raidframe.whoIsOnline.noMembers',
|
|
281
|
+
'raidframe.whoIsOnline.hidden',
|
|
282
|
+
'raidframe.whoIsOnline.fullList',
|
|
283
|
+
'raidframe.whoIsOnline.guests',
|
|
284
|
+
'raidframe.whoIsOnline.record',
|
|
285
|
+
])
|
|
286
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
{
|
|
2
|
+
"raidframe.announcement.kicker": "announcement",
|
|
3
|
+
"raidframe.announcement.postedByPrefix": "posted by ",
|
|
4
|
+
"raidframe.announcement.postedFallback": "posted",
|
|
5
|
+
"raidframe.announcement.separator": " · ",
|
|
6
|
+
"raidframe.authPage.kicker": "access",
|
|
7
|
+
"raidframe.boardIndex.markAllRead": "mark all read",
|
|
8
|
+
"raidframe.boardStats.counted": "counted",
|
|
9
|
+
"raidframe.boardStats.heading": "Board statistics",
|
|
10
|
+
"raidframe.boardStats.members": "members",
|
|
11
|
+
"raidframe.boardStats.newestMember": "newest member",
|
|
12
|
+
"raidframe.boardStats.none": "—",
|
|
13
|
+
"raidframe.boardStats.notCountedYet": "not counted yet",
|
|
14
|
+
"raidframe.boardStats.posts": "posts",
|
|
15
|
+
"raidframe.boardStats.threads": "threads",
|
|
16
|
+
"raidframe.categoryBlock.forum": "Forum",
|
|
17
|
+
"raidframe.categoryBlock.lastPost": "Last post",
|
|
18
|
+
"raidframe.categoryBlock.posts": "Posts",
|
|
19
|
+
"raidframe.categoryBlock.threads": "Threads",
|
|
20
|
+
"raidframe.discoveryView.kicker": "listing",
|
|
21
|
+
"raidframe.discoveryView.lastPostByPrefix": " by ",
|
|
22
|
+
"raidframe.discoveryView.reply.one": "reply",
|
|
23
|
+
"raidframe.discoveryView.reply.other": "replies",
|
|
24
|
+
"raidframe.discoveryView.startedBy": "started by",
|
|
25
|
+
"raidframe.errorNotice.errorLabel": "error",
|
|
26
|
+
"raidframe.errorNotice.forumHome": "forum home",
|
|
27
|
+
"raidframe.errorNotice.requestId": "request id",
|
|
28
|
+
"raidframe.footer.allTimesPrefix": "all times ",
|
|
29
|
+
"raidframe.footer.linksAriaLabel": "Board links",
|
|
30
|
+
"raidframe.forumDisplay.kicker": "forum",
|
|
31
|
+
"raidframe.forumDisplay.lastPostHeader": "Last post",
|
|
32
|
+
"raidframe.forumDisplay.markRead": "mark this forum read",
|
|
33
|
+
"raidframe.forumDisplay.newThread": "new thread",
|
|
34
|
+
"raidframe.forumDisplay.posts": "posts",
|
|
35
|
+
"raidframe.forumDisplay.repliesHeader": "Replies",
|
|
36
|
+
"raidframe.forumDisplay.threadHeader": "Thread",
|
|
37
|
+
"raidframe.forumDisplay.threads": "threads",
|
|
38
|
+
"raidframe.forumDisplay.viewsHeader": "Views",
|
|
39
|
+
"raidframe.forumRow.linkBadge": "link",
|
|
40
|
+
"raidframe.forumRow.newPosts": "(new posts)",
|
|
41
|
+
"raidframe.forumRow.noPostsYet": "no posts yet",
|
|
42
|
+
"raidframe.forumRow.none": "—",
|
|
43
|
+
"raidframe.forumRow.separator": " · ",
|
|
44
|
+
"raidframe.header.sectionsAriaLabel": "Board sections",
|
|
45
|
+
"raidframe.latestPosts.asOf": "as of",
|
|
46
|
+
"raidframe.latestPosts.empty": "nothing said yet",
|
|
47
|
+
"raidframe.latestPosts.heading": "Latest posts",
|
|
48
|
+
"raidframe.latestThreads.asOf": "as of",
|
|
49
|
+
"raidframe.latestThreads.empty": "nothing started yet",
|
|
50
|
+
"raidframe.latestThreads.heading": "Latest threads",
|
|
51
|
+
"raidframe.latestThreads.replies": " replies",
|
|
52
|
+
"raidframe.memberProfile.actionsAriaLabel": "Member actions",
|
|
53
|
+
"raidframe.memberProfile.joined": "joined",
|
|
54
|
+
"raidframe.memberProfile.kicker": "profile",
|
|
55
|
+
"raidframe.memberProfile.lastVisit": "last visit",
|
|
56
|
+
"raidframe.memberProfile.never": "never",
|
|
57
|
+
"raidframe.memberProfile.posts": "posts",
|
|
58
|
+
"raidframe.memberProfile.signatureHeading": "Signature",
|
|
59
|
+
"raidframe.memberProfile.statsHeading": "Statistics",
|
|
60
|
+
"raidframe.navigation.ariaLabel": "Breadcrumb",
|
|
61
|
+
"raidframe.notice.dismiss": "dismiss",
|
|
62
|
+
"raidframe.notice.error": "error",
|
|
63
|
+
"raidframe.notice.info": "info",
|
|
64
|
+
"raidframe.notice.success": "success",
|
|
65
|
+
"raidframe.notice.warning": "warning",
|
|
66
|
+
"raidframe.pagination.ariaLabel": "Pagination",
|
|
67
|
+
"raidframe.pagination.next": "next",
|
|
68
|
+
"raidframe.pagination.page": "page",
|
|
69
|
+
"raidframe.pagination.prev": "prev",
|
|
70
|
+
"raidframe.panelNav.waiting": "waiting",
|
|
71
|
+
"raidframe.panelPage.panelLabel.admincp": "control panel",
|
|
72
|
+
"raidframe.panelPage.panelLabel.modcp": "moderator control panel",
|
|
73
|
+
"raidframe.panelPage.panelLabel.usercp": "your control panel",
|
|
74
|
+
"raidframe.postActions.ariaLabel": "Post actions",
|
|
75
|
+
"raidframe.postActions.edit": "edit",
|
|
76
|
+
"raidframe.postActions.moderate": "moderate",
|
|
77
|
+
"raidframe.postActions.quote": "quote",
|
|
78
|
+
"raidframe.postActions.rate": "rate",
|
|
79
|
+
"raidframe.postActions.report": "report",
|
|
80
|
+
"raidframe.postActions.restore": "restore",
|
|
81
|
+
"raidframe.postActions.warn": "warn",
|
|
82
|
+
"raidframe.postBit.awaitingApprovalNotice": "awaiting approval — visible to moderators only",
|
|
83
|
+
"raidframe.postBit.deletedNotice": "deleted — visible to moderators only",
|
|
84
|
+
"raidframe.postBit.ignoredPrefix": "Post from ",
|
|
85
|
+
"raidframe.postBit.ignoredSuffix": ", who you are ignoring.",
|
|
86
|
+
"raidframe.postBit.joined": "joined",
|
|
87
|
+
"raidframe.postBit.online": "online",
|
|
88
|
+
"raidframe.postBit.posts": "posts",
|
|
89
|
+
"raidframe.postBit.rep": "rep",
|
|
90
|
+
"raidframe.postBit.showIt": "Show it",
|
|
91
|
+
"raidframe.postForm.cannotPost": "cannot post",
|
|
92
|
+
"raidframe.postForm.mode.edit": "edit",
|
|
93
|
+
"raidframe.postForm.mode.newThread": "new thread",
|
|
94
|
+
"raidframe.postForm.mode.reply": "reply",
|
|
95
|
+
"raidframe.redirectNotice.continueNow": "continue now",
|
|
96
|
+
"raidframe.redirectNotice.continuingIn": "continuing in",
|
|
97
|
+
"raidframe.redirectNotice.kicker": "redirecting",
|
|
98
|
+
"raidframe.redirectNotice.second.one": "second",
|
|
99
|
+
"raidframe.redirectNotice.second.other": "seconds",
|
|
100
|
+
"raidframe.redirectNotice.title": "Please wait",
|
|
101
|
+
"raidframe.searchForm.heading": "Search",
|
|
102
|
+
"raidframe.searchForm.inLabel": "In",
|
|
103
|
+
"raidframe.searchForm.placeholder": "Words in a subject or a post",
|
|
104
|
+
"raidframe.searchForm.searchForLabel": "Search for",
|
|
105
|
+
"raidframe.searchForm.sortByLabel": "Sort by",
|
|
106
|
+
"raidframe.searchForm.submit": "search",
|
|
107
|
+
"raidframe.searchResults.accessNotice": "checked against your access every time this page is opened",
|
|
108
|
+
"raidframe.searchResults.clearFilters": "clear filters",
|
|
109
|
+
"raidframe.searchResults.kicker": "search",
|
|
110
|
+
"raidframe.searchResults.nothingMatched": "Nothing matched",
|
|
111
|
+
"raidframe.searchResults.nothingMatchedHint": "Or nothing you can see does. Try fewer words, or a different spelling.",
|
|
112
|
+
"raidframe.searchResults.removeFilter": "— remove this filter",
|
|
113
|
+
"raidframe.searchResults.resultsForPrefix": "Results for “",
|
|
114
|
+
"raidframe.searchResults.resultsForSuffix": "”",
|
|
115
|
+
"raidframe.searchResults.run": "run",
|
|
116
|
+
"raidframe.searchResults.startNewSearch": "start a new search",
|
|
117
|
+
"raidframe.shell.skipToContent": "Skip to content",
|
|
118
|
+
"raidframe.subforumList.ariaLabel": "Subforums",
|
|
119
|
+
"raidframe.subforumList.label": "subforums",
|
|
120
|
+
"raidframe.threadRow.byPrefix": "by ",
|
|
121
|
+
"raidframe.threadRow.locked": "locked",
|
|
122
|
+
"raidframe.threadRow.moved": "moved",
|
|
123
|
+
"raidframe.threadRow.newPosts": "(new posts)",
|
|
124
|
+
"raidframe.threadRow.none": "—",
|
|
125
|
+
"raidframe.threadRow.pinned": "pinned",
|
|
126
|
+
"raidframe.threadRow.startedBy": "started by",
|
|
127
|
+
"raidframe.threadView.locked": "locked",
|
|
128
|
+
"raidframe.threadView.markRead": "mark read",
|
|
129
|
+
"raidframe.threadView.pinned": "pinned",
|
|
130
|
+
"raidframe.threadView.postReply": "post reply",
|
|
131
|
+
"raidframe.threadView.replies": "replies",
|
|
132
|
+
"raidframe.threadView.views": "views",
|
|
133
|
+
"raidframe.userPanel.accountLabel": "Your account",
|
|
134
|
+
"raidframe.userPanel.new": "new",
|
|
135
|
+
"raidframe.userPanel.pm": "pm",
|
|
136
|
+
"raidframe.userPanel.signedIn": "signed in",
|
|
137
|
+
"raidframe.whoIsOnline.fullList": "full list",
|
|
138
|
+
"raidframe.whoIsOnline.guests": "guests",
|
|
139
|
+
"raidframe.whoIsOnline.heading": "Online now",
|
|
140
|
+
"raidframe.whoIsOnline.hidden": "hidden",
|
|
141
|
+
"raidframe.whoIsOnline.noMembers": "no members",
|
|
142
|
+
"raidframe.whoIsOnline.onlineSuffix": "online",
|
|
143
|
+
"raidframe.whoIsOnline.record": "record"
|
|
144
|
+
}
|
package/src/shared.tsx
CHANGED
|
@@ -22,8 +22,7 @@ export const BUTTON_PRIMARY =
|
|
|
22
22
|
export const CHIP =
|
|
23
23
|
'inline-flex items-center gap-1 border border-border bg-surface px-1.5 py-0.5 font-mono text-[0.625rem] font-semibold uppercase tracking-[0.12em]'
|
|
24
24
|
|
|
25
|
-
export const RULE =
|
|
26
|
-
'h-px w-full bg-gradient-to-r from-primary/70 via-primary/15 to-transparent'
|
|
25
|
+
export const RULE = 'h-px w-full bg-gradient-to-r from-primary/70 via-primary/15 to-transparent'
|
|
27
26
|
|
|
28
27
|
export function Frame({
|
|
29
28
|
children,
|
|
@@ -1,12 +1,22 @@
|
|
|
1
|
-
import type { AnnouncementModel } from '@meith/theme-kit'
|
|
1
|
+
import type { AnnouncementModel, SlotCopy } from '@meith/theme-kit'
|
|
2
|
+
import { fromSlotCopy } from '@meith/theme-kit'
|
|
2
3
|
|
|
3
4
|
import { Frame, HEADING, MICRO, Stamp, UserRef } from '../shared'
|
|
4
5
|
|
|
5
|
-
export function Announcement({
|
|
6
|
+
export function Announcement({
|
|
7
|
+
title,
|
|
8
|
+
bodyHtml,
|
|
9
|
+
postedBy,
|
|
10
|
+
postedAt,
|
|
11
|
+
forum,
|
|
12
|
+
copy,
|
|
13
|
+
}: AnnouncementModel & { copy: SlotCopy }) {
|
|
14
|
+
const c = (key: string) => fromSlotCopy(copy, `raidframe.announcement.${key}`)
|
|
15
|
+
|
|
6
16
|
return (
|
|
7
17
|
<Frame as="article">
|
|
8
18
|
<div className="flex flex-wrap items-center justify-between gap-2 border-b border-border bg-surface px-3 py-2">
|
|
9
|
-
<span className={`${MICRO} text-primary`}>
|
|
19
|
+
<span className={`${MICRO} text-primary`}>{c('kicker')}</span>
|
|
10
20
|
{forum !== null && (
|
|
11
21
|
<a href={forum.href} className={`${MICRO} hover:text-primary`}>
|
|
12
22
|
{forum.label}
|
|
@@ -24,14 +34,14 @@ export function Announcement({ title, bodyHtml, postedBy, postedAt, forum }: Ann
|
|
|
24
34
|
|
|
25
35
|
<p className={MICRO}>
|
|
26
36
|
{postedBy === null ? (
|
|
27
|
-
'
|
|
37
|
+
c('postedFallback')
|
|
28
38
|
) : (
|
|
29
39
|
<>
|
|
30
|
-
{'
|
|
40
|
+
{c('postedByPrefix')}
|
|
31
41
|
<UserRef user={postedBy} className="text-primary hover:underline" />
|
|
32
42
|
</>
|
|
33
43
|
)}
|
|
34
|
-
{'
|
|
44
|
+
{c('separator')}
|
|
35
45
|
<Stamp at={postedAt} />
|
|
36
46
|
</p>
|
|
37
47
|
</div>
|
package/src/slots/auth-page.tsx
CHANGED
|
@@ -1,8 +1,17 @@
|
|
|
1
|
-
import type { AuthPageModel } from '@meith/theme-kit'
|
|
1
|
+
import type { AuthPageModel, SlotCopy } from '@meith/theme-kit'
|
|
2
|
+
import { fromSlotCopy } from '@meith/theme-kit'
|
|
2
3
|
|
|
3
4
|
import { Frame, HEADING, MICRO } from '../shared'
|
|
4
5
|
|
|
5
|
-
export function AuthPage({
|
|
6
|
+
export function AuthPage({
|
|
7
|
+
title,
|
|
8
|
+
alert,
|
|
9
|
+
links,
|
|
10
|
+
regions,
|
|
11
|
+
copy,
|
|
12
|
+
}: AuthPageModel & { copy: SlotCopy }) {
|
|
13
|
+
const c = (key: string) => fromSlotCopy(copy, `raidframe.authPage.${key}`)
|
|
14
|
+
|
|
6
15
|
return (
|
|
7
16
|
<main
|
|
8
17
|
id="board-content"
|
|
@@ -12,7 +21,7 @@ export function AuthPage({ title, alert, links, regions }: AuthPageModel) {
|
|
|
12
21
|
<Frame className="w-full max-w-sm">
|
|
13
22
|
<div className="flex flex-col gap-5 px-5 py-5">
|
|
14
23
|
<div className="flex flex-col gap-1">
|
|
15
|
-
<p className={`${MICRO} text-primary`}>
|
|
24
|
+
<p className={`${MICRO} text-primary`}>{c('kicker')}</p>
|
|
16
25
|
<h1 className={`${HEADING} text-2xl text-foreground`}>{title}</h1>
|
|
17
26
|
{regions.lede !== undefined && (
|
|
18
27
|
<p className="text-sm text-muted-foreground">{regions.lede}</p>
|
|
@@ -1,8 +1,15 @@
|
|
|
1
|
-
import type { BoardIndexModel } from '@meith/theme-kit'
|
|
1
|
+
import type { BoardIndexModel, SlotCopy } from '@meith/theme-kit'
|
|
2
|
+
import { fromSlotCopy } from '@meith/theme-kit'
|
|
2
3
|
|
|
3
4
|
import { BUTTON } from '../shared'
|
|
4
5
|
|
|
5
|
-
export function BoardIndex({
|
|
6
|
+
export function BoardIndex({
|
|
7
|
+
markAllReadAction,
|
|
8
|
+
regions,
|
|
9
|
+
copy,
|
|
10
|
+
}: BoardIndexModel & { copy: SlotCopy }) {
|
|
11
|
+
const c = (key: string) => fromSlotCopy(copy, `raidframe.boardIndex.${key}`)
|
|
12
|
+
|
|
6
13
|
const latest = regions.latest ?? null
|
|
7
14
|
|
|
8
15
|
return (
|
|
@@ -26,7 +33,7 @@ export function BoardIndex({ markAllReadAction, regions }: BoardIndexModel) {
|
|
|
26
33
|
{markAllReadAction !== null && (
|
|
27
34
|
<form action={markAllReadAction} method="post">
|
|
28
35
|
<button type="submit" className={BUTTON}>
|
|
29
|
-
|
|
36
|
+
{c('markAllRead')}
|
|
30
37
|
</button>
|
|
31
38
|
</form>
|
|
32
39
|
)}
|
|
@@ -1,12 +1,15 @@
|
|
|
1
|
-
import type { BoardStatsModel } from '@meith/theme-kit'
|
|
1
|
+
import type { BoardStatsModel, CountModel, SlotCopy } from '@meith/theme-kit'
|
|
2
|
+
import { fromSlotCopy } from '@meith/theme-kit'
|
|
2
3
|
|
|
3
4
|
import { Frame, MICRO, NUMERIC, PanelHead, Stamp, UserRef } from '../shared'
|
|
4
5
|
|
|
5
|
-
function Stat({ label, value }: { label: string; value:
|
|
6
|
+
function Stat({ label, value }: { label: string; value: CountModel }) {
|
|
6
7
|
return (
|
|
7
8
|
<div className="border border-border bg-surface px-2 py-1.5">
|
|
8
9
|
<dt className={MICRO}>{label}</dt>
|
|
9
|
-
<dd className={`${NUMERIC} text-lg leading-tight font-semibold text-foreground`}>
|
|
10
|
+
<dd className={`${NUMERIC} text-lg leading-tight font-semibold text-foreground`}>
|
|
11
|
+
{value.label}
|
|
12
|
+
</dd>
|
|
10
13
|
</div>
|
|
11
14
|
)
|
|
12
15
|
}
|
|
@@ -17,22 +20,25 @@ export function BoardStats({
|
|
|
17
20
|
memberCount,
|
|
18
21
|
newestMember,
|
|
19
22
|
computedAt,
|
|
20
|
-
|
|
23
|
+
copy,
|
|
24
|
+
}: BoardStatsModel & { copy: SlotCopy }) {
|
|
25
|
+
const c = (key: string) => fromSlotCopy(copy, `raidframe.boardStats.${key}`)
|
|
26
|
+
|
|
21
27
|
return (
|
|
22
28
|
<Frame aria-labelledby="board-stats-heading">
|
|
23
|
-
<PanelHead id="board-stats-heading" title=
|
|
29
|
+
<PanelHead id="board-stats-heading" title={c('heading')} />
|
|
24
30
|
|
|
25
31
|
<dl className="grid grid-cols-3 gap-1.5 px-3 py-3">
|
|
26
|
-
<Stat label=
|
|
27
|
-
<Stat label=
|
|
28
|
-
<Stat label=
|
|
32
|
+
<Stat label={c('threads')} value={threadCount} />
|
|
33
|
+
<Stat label={c('posts')} value={postCount} />
|
|
34
|
+
<Stat label={c('members')} value={memberCount} />
|
|
29
35
|
</dl>
|
|
30
36
|
|
|
31
37
|
<p className={`${MICRO} border-t border-border px-3 py-2 normal-case`}>
|
|
32
|
-
<span className="uppercase">
|
|
38
|
+
<span className="uppercase">{c('newestMember')}</span>
|
|
33
39
|
{': '}
|
|
34
40
|
{newestMember === null ? (
|
|
35
|
-
'
|
|
41
|
+
c('none')
|
|
36
42
|
) : (
|
|
37
43
|
<UserRef user={newestMember} className="text-primary hover:underline" />
|
|
38
44
|
)}
|
|
@@ -40,10 +46,10 @@ export function BoardStats({
|
|
|
40
46
|
|
|
41
47
|
<p className={`${MICRO} border-t border-border px-3 py-1.5 normal-case`}>
|
|
42
48
|
{computedAt === null ? (
|
|
43
|
-
<span className="uppercase">
|
|
49
|
+
<span className="uppercase">{c('notCountedYet')}</span>
|
|
44
50
|
) : (
|
|
45
51
|
<>
|
|
46
|
-
<span className="uppercase">counted</span> <Stamp at={computedAt} />
|
|
52
|
+
<span className="uppercase">{c('counted')}</span> <Stamp at={computedAt} />
|
|
47
53
|
</>
|
|
48
54
|
)}
|
|
49
55
|
</p>
|