lightnet 3.4.5 → 3.5.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/CHANGELOG.md +48 -10
- package/__e2e__/fixtures/basics/node_modules/.bin/astro +2 -2
- package/__e2e__/fixtures/basics/package.json +2 -2
- package/__tests__/utils/markdown.spec.ts +21 -0
- package/exports/components.ts +1 -0
- package/package.json +8 -7
- package/src/astro-integration/config.ts +6 -3
- package/src/components/HeroSection.astro +35 -7
- package/src/components/SearchSection.astro +16 -0
- package/src/components/Section.astro +20 -4
- package/src/i18n/translations/TRANSLATION-STATUS.md +1 -1
- package/src/i18n/translations/de.yml +1 -2
- package/src/i18n/translations/en.yml +3 -8
- package/src/i18n/translations/ru.yml +1 -2
- package/src/i18n/translations/uk.yml +1 -2
- package/src/i18n/translations.ts +0 -1
- package/src/layouts/Page.astro +1 -0
- package/src/layouts/components/PageNavigation.astro +13 -7
- package/src/pages/details-page/components/main-details/AudioPlayer.astro +1 -1
- package/src/pages/details-page/components/main-details/Cover.astro +1 -0
- package/src/pages/search-page/SearchPageRoute.astro +10 -40
- package/src/pages/search-page/components/LoadingSkeleton.tsx +19 -0
- package/src/pages/search-page/components/SearchFilter.astro +65 -0
- package/src/pages/search-page/components/SearchFilter.tsx +33 -84
- package/src/pages/search-page/components/SearchList.astro +50 -0
- package/src/pages/search-page/components/SearchList.tsx +117 -0
- package/src/pages/search-page/components/SearchListItem.tsx +105 -0
- package/src/pages/search-page/components/Select.tsx +5 -5
- package/src/pages/search-page/hooks/use-search-query-param.ts +31 -0
- package/src/pages/search-page/hooks/use-search.ts +103 -49
- package/src/pages/search-page/utils/search-filter-translations.ts +20 -0
- package/src/pages/search-page/utils/search-query.ts +76 -0
- package/src/pages/search-page/utils/search-translations.ts +1 -12
- package/src/utils/markdown.ts +8 -1
- package/src/pages/search-page/Search.tsx +0 -71
- package/src/pages/search-page/components/ResultList.tsx +0 -135
- package/src/pages/search-page/types.ts +0 -11
- package/src/pages/search-page/utils/use-provided-translations.ts +0 -5
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,53 @@
|
|
|
1
1
|
# lightnet
|
|
2
2
|
|
|
3
|
+
## 3.5.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#273](https://github.com/LightNetDev/LightNet/pull/273) [`5b0b24f`](https://github.com/LightNetDev/LightNet/commit/5b0b24f58a6b8df8a3bc7dc66b751981f4e0498e) Thanks [@smn-cds](https://github.com/smn-cds)! - Add `disableHorizontalPadding` option to `Section` component.
|
|
8
|
+
|
|
9
|
+
- [#273](https://github.com/LightNetDev/LightNet/pull/273) [`5b0b24f`](https://github.com/LightNetDev/LightNet/commit/5b0b24f58a6b8df8a3bc7dc66b751981f4e0498e) Thanks [@smn-cds](https://github.com/smn-cds)! - Add lightnet config option `searchPage.hideHeaderSearchIcon`
|
|
10
|
+
|
|
11
|
+
Set to true, this will remove the search magnifier icon from the header bar. For example this option can
|
|
12
|
+
be useful if a site directly provides the search on the homepage.
|
|
13
|
+
|
|
14
|
+
- [#273](https://github.com/LightNetDev/LightNet/pull/273) [`5b0b24f`](https://github.com/LightNetDev/LightNet/commit/5b0b24f58a6b8df8a3bc7dc66b751981f4e0498e) Thanks [@smn-cds](https://github.com/smn-cds)! - Implement infinite scroll for search results.
|
|
15
|
+
|
|
16
|
+
- [#273](https://github.com/LightNetDev/LightNet/pull/273) [`5b0b24f`](https://github.com/LightNetDev/LightNet/commit/5b0b24f58a6b8df8a3bc7dc66b751981f4e0498e) Thanks [@smn-cds](https://github.com/smn-cds)! - Add `SearchSection` component.
|
|
17
|
+
|
|
18
|
+
Add the search to your homepage as simple as:
|
|
19
|
+
|
|
20
|
+
```astro
|
|
21
|
+
---
|
|
22
|
+
import { Page, SearchSection } from "lightnet/components"
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
<Page>
|
|
26
|
+
<SearchSection />
|
|
27
|
+
</Page>
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
- [#273](https://github.com/LightNetDev/LightNet/pull/273) [`5b0b24f`](https://github.com/LightNetDev/LightNet/commit/5b0b24f58a6b8df8a3bc7dc66b751981f4e0498e) Thanks [@smn-cds](https://github.com/smn-cds)! - Add optional search input to `HeroSection`.
|
|
31
|
+
|
|
32
|
+
Enable it by setting the HeroSection's `showSearch` property to `true`.
|
|
33
|
+
By default `showSearch` is set to `false`.
|
|
34
|
+
|
|
35
|
+
- [#273](https://github.com/LightNetDev/LightNet/pull/273) [`5b0b24f`](https://github.com/LightNetDev/LightNet/commit/5b0b24f58a6b8df8a3bc7dc66b751981f4e0498e) Thanks [@smn-cds](https://github.com/smn-cds)! - Add fields to search index
|
|
36
|
+
|
|
37
|
+
The search text input also searches language, type and categories of a media item in the current site language.
|
|
38
|
+
|
|
39
|
+
Pro tip: Search for "theology | book" to find theology books. The [extended search syntax](https://www.fusejs.io/examples.html#extended-search) can do even more...
|
|
40
|
+
|
|
41
|
+
- [#273](https://github.com/LightNetDev/LightNet/pull/273) [`5b0b24f`](https://github.com/LightNetDev/LightNet/commit/5b0b24f58a6b8df8a3bc7dc66b751981f4e0498e) Thanks [@smn-cds](https://github.com/smn-cds)! - Update Translations
|
|
42
|
+
- remove `ln.search.more-results`. Because search now uses infinite scroll there is no need for this button label anymore 🎉.
|
|
43
|
+
- change value of `ln.search.placeholder` from "Search by title, author or description..." to "Search media...". Search now also searches on categories, type, language and id of a media item.
|
|
44
|
+
|
|
45
|
+
## 3.4.6
|
|
46
|
+
|
|
47
|
+
### Patch Changes
|
|
48
|
+
|
|
49
|
+
- [#271](https://github.com/LightNetDev/LightNet/pull/271) [`1ad0515`](https://github.com/LightNetDev/LightNet/commit/1ad051587cdf68c34a919f414ad2b5c15ffd273e) Thanks [@smn-cds](https://github.com/smn-cds)! - Fix markdown sanitation for search result descriptions.
|
|
50
|
+
|
|
3
51
|
## 3.4.5
|
|
4
52
|
|
|
5
53
|
### Patch Changes
|
|
@@ -31,7 +79,6 @@
|
|
|
31
79
|
### Patch Changes
|
|
32
80
|
|
|
33
81
|
- [#254](https://github.com/LightNetDev/LightNet/pull/254) [`46c0f7c`](https://github.com/LightNetDev/LightNet/commit/46c0f7c693a46a7a2e06e72c4a333368aa8f7485) Thanks [@smn-cds](https://github.com/smn-cds)! - Improve responsive image variants:
|
|
34
|
-
|
|
35
82
|
- Improve image quality on search result items
|
|
36
83
|
- Limit the size of the media list image
|
|
37
84
|
- Streamline details page cover image variants
|
|
@@ -114,7 +161,6 @@
|
|
|
114
161
|
- [#234](https://github.com/LightNetDev/LightNet/pull/234) [`1cb0dc0`](https://github.com/LightNetDev/LightNet/commit/1cb0dc0ef2d7a3ecb5d2a37a36f2f2e8fa97a756) Thanks [@smn-cds](https://github.com/smn-cds)! - Renames custom details pages prop `slug` to `mediaId`.
|
|
115
162
|
|
|
116
163
|
- [#234](https://github.com/LightNetDev/LightNet/pull/234) [`1cb0dc0`](https://github.com/LightNetDev/LightNet/commit/1cb0dc0ef2d7a3ecb5d2a37a36f2f2e8fa97a756) Thanks [@smn-cds](https://github.com/smn-cds)! - Streamline handling of components. Make sure all components including a section are suffixed with `Section`.
|
|
117
|
-
|
|
118
164
|
- Removes `Gallery` export
|
|
119
165
|
- Adds `MediaGallerySection` that includes the section component
|
|
120
166
|
- Renames `Hero` to `HeroSection`
|
|
@@ -122,7 +168,6 @@
|
|
|
122
168
|
- Renames `MediaItemList` to `MediaList`
|
|
123
169
|
|
|
124
170
|
- [#234](https://github.com/LightNetDev/LightNet/pull/234) [`1cb0dc0`](https://github.com/LightNetDev/LightNet/commit/1cb0dc0ef2d7a3ecb5d2a37a36f2f2e8fa97a756) Thanks [@smn-cds](https://github.com/smn-cds)! - Improve Section
|
|
125
|
-
|
|
126
171
|
- rename maxWidth values: `full` => `wide`, `prose` => `narrow`
|
|
127
172
|
- add marginTop settings: `none`, `sm`, `lg`
|
|
128
173
|
|
|
@@ -153,7 +198,6 @@
|
|
|
153
198
|
### Minor Changes
|
|
154
199
|
|
|
155
200
|
- [#228](https://github.com/LightNetDev/LightNet/pull/228) [`b3bb5cc`](https://github.com/LightNetDev/LightNet/commit/b3bb5cc97a4f14ccb46c68f9dcdbe73d74563452) Thanks [@smn-cds](https://github.com/smn-cds)! - Add builtin languages
|
|
156
|
-
|
|
157
201
|
- Russian
|
|
158
202
|
- Ukrainian
|
|
159
203
|
|
|
@@ -180,7 +224,6 @@
|
|
|
180
224
|
### Minor Changes
|
|
181
225
|
|
|
182
226
|
- [#220](https://github.com/LightNetDev/LightNet/pull/220) [`e10c96f`](https://github.com/LightNetDev/LightNet/commit/e10c96fb850db6d043c9bc0c929170c271979492) Thanks [@smn-cds](https://github.com/smn-cds)! - Update Tailwind CSS to v4
|
|
183
|
-
|
|
184
227
|
- updates `tailwindcss` dependency to version ^4.
|
|
185
228
|
- `@astro/tailwindcss` dependency has been replaced with `@tailwindcss/vite`
|
|
186
229
|
- removes the use of `tailwind.config.js` inside site projects
|
|
@@ -218,7 +261,6 @@
|
|
|
218
261
|
This update introduces major changes on our translation system.
|
|
219
262
|
|
|
220
263
|
Changes:
|
|
221
|
-
|
|
222
264
|
- Translations are now stored inside `.yml` files.
|
|
223
265
|
- Added i18next as our translation engine
|
|
224
266
|
- Translations now support a flat i18next syntax including (pluralization, contextualization, interpolation)
|
|
@@ -286,7 +328,6 @@
|
|
|
286
328
|
- [#183](https://github.com/LightNetDev/lightnet/pull/183) [`9c0bb8d`](https://github.com/LightNetDev/lightnet/commit/9c0bb8d2508f8bfbb18dd224a36e7f5d75f89268) Thanks [@smn-cds](https://github.com/si-fab)! - Makes logo config optional.
|
|
287
329
|
|
|
288
330
|
- [#183](https://github.com/LightNetDev/lightnet/pull/183) [`9c0bb8d`](https://github.com/LightNetDev/lightnet/commit/9c0bb8d2508f8bfbb18dd224a36e7f5d75f89268) Thanks [@smn-cds](https://github.com/si-fab)! - Rename `Section` component properties
|
|
289
|
-
|
|
290
331
|
- change property name `width` to `maxWidth`
|
|
291
332
|
- change property value `content` to `prose`
|
|
292
333
|
|
|
@@ -299,7 +340,6 @@
|
|
|
299
340
|
Prefixing custom translation strings with `custom.` is non mandatory but recommended as it improves validation.
|
|
300
341
|
|
|
301
342
|
This is changed:
|
|
302
|
-
|
|
303
343
|
- rename translate parameter `fallbackToKey` to `allowFixedStrings`.
|
|
304
344
|
- change behavior of the translate function. If `allowFixedStrings` is set to `true`, return the translation key if no translation is found. But fail if the key starts with `custom.` or `ln.` prefix.
|
|
305
345
|
- change example to reflect the new convention of prefixing custom translation keys with `custom.`.
|
|
@@ -369,7 +409,6 @@
|
|
|
369
409
|
- [#176](https://github.com/LightNetDev/lightnet/pull/176) [`6b4a664`](https://github.com/LightNetDev/lightnet/commit/6b4a66490079b0688577e6052ab9d7f2d0686170) Thanks [@smn-cds](https://github.com/si-fab)! - Extend Astro.locals.i18n object
|
|
370
410
|
|
|
371
411
|
Provide:
|
|
372
|
-
|
|
373
412
|
- `defaultLocale`
|
|
374
413
|
- `currentLocale`
|
|
375
414
|
- `locales`
|
|
@@ -390,7 +429,6 @@
|
|
|
390
429
|
- [#174](https://github.com/LightNetDev/lightnet/pull/174) [`bb011bf`](https://github.com/LightNetDev/lightnet/commit/bb011bfef8c2d7745e3c3417f7f6ef608867e184) Thanks [@smn-cds](https://github.com/si-fab)! - Update Astro to version 5.
|
|
391
430
|
|
|
392
431
|
Fix your project by doing this:
|
|
393
|
-
|
|
394
432
|
- move `/src/content/config.ts` to `/src/content.config.ts`.
|
|
395
433
|
- update tsconfig.json to match the following:
|
|
396
434
|
|
|
@@ -6,9 +6,9 @@ case `uname` in
|
|
|
6
6
|
esac
|
|
7
7
|
|
|
8
8
|
if [ -z "$NODE_PATH" ]; then
|
|
9
|
-
export NODE_PATH="/home/runner/work/LightNet/LightNet/node_modules/.pnpm/astro@5.
|
|
9
|
+
export NODE_PATH="/home/runner/work/LightNet/LightNet/node_modules/.pnpm/astro@5.10.1_@types+node@24.0.8_jiti@2.4.2_lightningcss@1.29.1_rollup@4.44.1_terser@5.39.0_typescript@5.8.3_yaml@2.8.0/node_modules/astro/node_modules:/home/runner/work/LightNet/LightNet/node_modules/.pnpm/astro@5.10.1_@types+node@24.0.8_jiti@2.4.2_lightningcss@1.29.1_rollup@4.44.1_terser@5.39.0_typescript@5.8.3_yaml@2.8.0/node_modules:/home/runner/work/LightNet/LightNet/node_modules/.pnpm/node_modules"
|
|
10
10
|
else
|
|
11
|
-
export NODE_PATH="/home/runner/work/LightNet/LightNet/node_modules/.pnpm/astro@5.
|
|
11
|
+
export NODE_PATH="/home/runner/work/LightNet/LightNet/node_modules/.pnpm/astro@5.10.1_@types+node@24.0.8_jiti@2.4.2_lightningcss@1.29.1_rollup@4.44.1_terser@5.39.0_typescript@5.8.3_yaml@2.8.0/node_modules/astro/node_modules:/home/runner/work/LightNet/LightNet/node_modules/.pnpm/astro@5.10.1_@types+node@24.0.8_jiti@2.4.2_lightningcss@1.29.1_rollup@4.44.1_terser@5.39.0_typescript@5.8.3_yaml@2.8.0/node_modules:/home/runner/work/LightNet/LightNet/node_modules/.pnpm/node_modules:$NODE_PATH"
|
|
12
12
|
fi
|
|
13
13
|
if [ -x "$basedir/node" ]; then
|
|
14
14
|
exec "$basedir/node" "$basedir/../astro/astro.js" "$@"
|
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
"@astrojs/react": "^4.3.0",
|
|
8
8
|
"@astrojs/tailwind": "^6.0.2",
|
|
9
9
|
"@lightnet/decap-admin": "^3.1.1",
|
|
10
|
-
"astro": "^5.
|
|
11
|
-
"lightnet": "^3.
|
|
10
|
+
"astro": "^5.10.1",
|
|
11
|
+
"lightnet": "^3.5.0",
|
|
12
12
|
"react": "^19.1.0",
|
|
13
13
|
"react-dom": "^19.1.0",
|
|
14
14
|
"sharp": "^0.33.5",
|
|
@@ -2,6 +2,27 @@ import { expect, test } from "vitest"
|
|
|
2
2
|
|
|
3
3
|
import { markdownToText } from "../../src/utils/markdown"
|
|
4
4
|
|
|
5
|
+
test("Should remove '\\' to force new lines", () => {
|
|
6
|
+
expect(markdownToText("a\\\nb\\ \nc")).toBe("a\nb \nc")
|
|
7
|
+
})
|
|
8
|
+
|
|
9
|
+
test("Should remove <br> to force new lines", () => {
|
|
10
|
+
expect(markdownToText("a <br> b<br>\nc")).toBe("a b \nc")
|
|
11
|
+
})
|
|
12
|
+
|
|
13
|
+
test("Should remove double white space", () => {
|
|
14
|
+
expect(markdownToText("a b")).toBe("a b")
|
|
15
|
+
})
|
|
16
|
+
|
|
17
|
+
test("Should remove triple white space", () => {
|
|
18
|
+
expect(markdownToText("a b")).toBe("a b")
|
|
19
|
+
})
|
|
20
|
+
|
|
21
|
+
test("Should remove escape character '\\'", () => {
|
|
22
|
+
// eslint-disable-next-line no-useless-escape
|
|
23
|
+
expect(markdownToText("a \\\* \\\# b")).toBe("a * # b")
|
|
24
|
+
})
|
|
25
|
+
|
|
5
26
|
test("Should remove headers", () => {
|
|
6
27
|
expect(markdownToText("# H1\n## H2 words#")).toBe("H1\nH2 words#")
|
|
7
28
|
})
|
package/exports/components.ts
CHANGED
|
@@ -4,6 +4,7 @@ export { default as HighlightSection } from "../src/components/HighlightSection.
|
|
|
4
4
|
export { default as Icon } from "../src/components/Icon"
|
|
5
5
|
export { default as MediaGallerySection } from "../src/components/MediaGallerySection.astro"
|
|
6
6
|
export { default as MediaList } from "../src/components/MediaList.astro"
|
|
7
|
+
export { default as SearchSection } from "../src/components/SearchSection.astro"
|
|
7
8
|
export { default as Section } from "../src/components/Section.astro"
|
|
8
9
|
export { default as VideoPlayer } from "../src/components/VideoPlayer.astro"
|
|
9
10
|
export { default as MarkdownPage } from "../src/layouts/MarkdownPage.astro"
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "lightnet",
|
|
3
3
|
"type": "module",
|
|
4
4
|
"license": "MIT",
|
|
5
|
-
"version": "3.
|
|
5
|
+
"version": "3.5.0",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
8
8
|
"url": "https://github.com/LightNetDev/lightnet",
|
|
@@ -45,17 +45,18 @@
|
|
|
45
45
|
"@iconify-json/mdi": "^1.2.3",
|
|
46
46
|
"@iconify/tailwind": "^1.2.0",
|
|
47
47
|
"@tailwindcss/typography": "^0.5.16",
|
|
48
|
-
"@
|
|
48
|
+
"@tanstack/react-virtual": "^3.13.12",
|
|
49
|
+
"@types/react": "^19.1.8",
|
|
49
50
|
"daisyui": "^4.12.24",
|
|
50
51
|
"fuse.js": "^7.1.0",
|
|
51
|
-
"i18next": "^25.
|
|
52
|
-
"marked": "^
|
|
52
|
+
"i18next": "^25.3.0",
|
|
53
|
+
"marked": "^16.0.0",
|
|
53
54
|
"yaml": "^2.8.0"
|
|
54
55
|
},
|
|
55
56
|
"devDependencies": {
|
|
56
|
-
"@playwright/test": "^1.
|
|
57
|
-
"@types/node": "^22.15.
|
|
58
|
-
"vitest": "^3.
|
|
57
|
+
"@playwright/test": "^1.53.2",
|
|
58
|
+
"@types/node": "^22.15.34",
|
|
59
|
+
"vitest": "^3.2.4"
|
|
59
60
|
},
|
|
60
61
|
"scripts": {
|
|
61
62
|
"test": "vitest",
|
|
@@ -203,11 +203,14 @@ export const configSchema = z.object({
|
|
|
203
203
|
searchPage: z
|
|
204
204
|
.object({
|
|
205
205
|
/**
|
|
206
|
-
*
|
|
207
|
-
*
|
|
208
|
-
* is any media item in the site language.
|
|
206
|
+
* Set this to true, to initially filter search results by current site language.
|
|
207
|
+
* The filter will only be set when there is any media item in the site language.
|
|
209
208
|
*/
|
|
210
209
|
filterByLocale: z.boolean().default(false),
|
|
210
|
+
/**
|
|
211
|
+
* Set this to true, to remove the search magnifier icon from the header bar.
|
|
212
|
+
*/
|
|
213
|
+
hideHeaderSearchIcon: z.boolean().default(false),
|
|
211
214
|
})
|
|
212
215
|
.optional(),
|
|
213
216
|
})
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
import type { ImageMetadata } from "astro"
|
|
3
3
|
import { Image } from "astro:assets"
|
|
4
4
|
|
|
5
|
+
import Icon from "./Icon"
|
|
6
|
+
|
|
5
7
|
interface Props {
|
|
6
8
|
image: ImageMetadata
|
|
7
9
|
title?: string
|
|
@@ -11,6 +13,7 @@ interface Props {
|
|
|
11
13
|
subtitleSize?: "sm" | "md" | "lg" | "xl"
|
|
12
14
|
subtitleClass?: string
|
|
13
15
|
className?: string
|
|
16
|
+
showSearch?: boolean
|
|
14
17
|
}
|
|
15
18
|
const {
|
|
16
19
|
image,
|
|
@@ -21,6 +24,7 @@ const {
|
|
|
21
24
|
titleClass,
|
|
22
25
|
subtitleClass,
|
|
23
26
|
className,
|
|
27
|
+
showSearch = false,
|
|
24
28
|
} = Astro.props
|
|
25
29
|
|
|
26
30
|
const titleSizes = {
|
|
@@ -36,26 +40,27 @@ const subtitleSizes = {
|
|
|
36
40
|
lg: "text-lg sm:text-xl md:text-3xl",
|
|
37
41
|
xl: "text-xl sm:text-2xl md:text-4xl",
|
|
38
42
|
} as const
|
|
43
|
+
|
|
44
|
+
const t = Astro.locals.i18n.t
|
|
39
45
|
---
|
|
40
46
|
|
|
41
47
|
<div class="w-full">
|
|
42
48
|
<div class="group relative">
|
|
43
49
|
<Image
|
|
44
|
-
class="h-
|
|
50
|
+
class="h-[20rem] w-full object-cover object-center lg:h-[24rem] xl:h-[30rem]"
|
|
45
51
|
src={image}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
loading="eager"
|
|
52
|
+
layout="full-width"
|
|
53
|
+
priority={true}
|
|
49
54
|
alt=""
|
|
50
55
|
/>
|
|
51
56
|
<div
|
|
52
|
-
class="bg-gradient-radial absolute top-0 flex h-full w-full flex-col items-center justify-center
|
|
57
|
+
class="bg-gradient-radial absolute top-0 flex h-full w-full flex-col items-center justify-center from-black/30 to-black/40 p-4 text-center text-gray-50"
|
|
53
58
|
class:list={[className]}
|
|
54
59
|
>
|
|
55
60
|
{
|
|
56
61
|
title && (
|
|
57
62
|
<h1
|
|
58
|
-
class="max-w-screen-md font-bold transition-transform duration-1000 group-hover:scale-[102%]"
|
|
63
|
+
class="max-w-screen-md font-bold tracking-tight transition-transform duration-1000 group-hover:scale-[102%]"
|
|
59
64
|
class:list={[titleSizes[titleSize], titleClass]}
|
|
60
65
|
>
|
|
61
66
|
{title}
|
|
@@ -65,7 +70,7 @@ const subtitleSizes = {
|
|
|
65
70
|
{
|
|
66
71
|
subtitle && (
|
|
67
72
|
<p
|
|
68
|
-
class="max-w-screen-sm font-bold"
|
|
73
|
+
class="mt-1 max-w-screen-sm font-bold md:mt-2"
|
|
69
74
|
class:list={[
|
|
70
75
|
"sm:text-lg md:text-2xl",
|
|
71
76
|
subtitleSizes[subtitleSize],
|
|
@@ -76,6 +81,29 @@ const subtitleSizes = {
|
|
|
76
81
|
</p>
|
|
77
82
|
)
|
|
78
83
|
}
|
|
84
|
+
{
|
|
85
|
+
showSearch && (
|
|
86
|
+
<form
|
|
87
|
+
action={`/${Astro.currentLocale}/media`}
|
|
88
|
+
method="get"
|
|
89
|
+
class="dy-join group mt-6 w-full max-w-sm rounded-2xl shadow-md outline-2 outline-offset-2 outline-gray-400 group-focus-within:outline md:mt-10 md:max-w-md"
|
|
90
|
+
>
|
|
91
|
+
<input
|
|
92
|
+
class="dy-input dy-join-item grow rounded-2xl bg-gray-100/95 text-gray-900 placeholder-gray-500 shadow-inner focus:outline-none"
|
|
93
|
+
enterkeyhint="search"
|
|
94
|
+
type="search"
|
|
95
|
+
name="search"
|
|
96
|
+
placeholder={t("ln.search.placeholder")}
|
|
97
|
+
/>
|
|
98
|
+
<button
|
|
99
|
+
type="submit"
|
|
100
|
+
class="dy-btn dy-join-item rounded-2xl border-gray-100/95 bg-gray-800 text-gray-50 hover:bg-gray-950 hover:text-gray-300"
|
|
101
|
+
>
|
|
102
|
+
<Icon className="mdi--magnify" ariaLabel={t("ln.search.title")} />
|
|
103
|
+
</button>
|
|
104
|
+
</form>
|
|
105
|
+
)
|
|
106
|
+
}
|
|
79
107
|
<slot />
|
|
80
108
|
</div>
|
|
81
109
|
</div>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
import SearchFilter from "../pages/search-page/components/SearchFilter.astro"
|
|
3
|
+
import SearchList from "../pages/search-page/components/SearchList.astro"
|
|
4
|
+
import Section, { type Props as SectionProps } from "./Section.astro"
|
|
5
|
+
|
|
6
|
+
// we need the semi-colon for the astro compiler :(
|
|
7
|
+
// prettier-ignore
|
|
8
|
+
type Props = Omit<SectionProps, "disableHorizontalPadding" | "maxWidth">;
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
<Section {...Astro.props} disableHorizontalPadding={true} maxWidth="narrow">
|
|
12
|
+
<div class="px-4 md:px-8">
|
|
13
|
+
<SearchFilter />
|
|
14
|
+
</div>
|
|
15
|
+
<SearchList />
|
|
16
|
+
</Section>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
interface Props {
|
|
2
|
+
export interface Props {
|
|
3
3
|
/**
|
|
4
4
|
* Id to set to the section element.
|
|
5
5
|
* For example this can be used to reference it inside anchors.
|
|
@@ -21,6 +21,13 @@ interface Props {
|
|
|
21
21
|
* @default "lg"
|
|
22
22
|
*/
|
|
23
23
|
marginTop?: "sm" | "lg" | "none"
|
|
24
|
+
/**
|
|
25
|
+
* Remove padding from the left and right side of the content.
|
|
26
|
+
* This will not apply to the section title.
|
|
27
|
+
*
|
|
28
|
+
* @default false
|
|
29
|
+
*/
|
|
30
|
+
disableHorizontalPadding?: boolean
|
|
24
31
|
/**
|
|
25
32
|
* Title on top of the section.
|
|
26
33
|
*/
|
|
@@ -35,6 +42,7 @@ const {
|
|
|
35
42
|
id,
|
|
36
43
|
maxWidth = "wide",
|
|
37
44
|
marginTop = "lg",
|
|
45
|
+
disableHorizontalPadding = false,
|
|
38
46
|
title,
|
|
39
47
|
className,
|
|
40
48
|
} = Astro.props
|
|
@@ -52,13 +60,21 @@ const marginTopValues = {
|
|
|
52
60
|
---
|
|
53
61
|
|
|
54
62
|
<section
|
|
55
|
-
class="mx-auto
|
|
56
|
-
class:list={[
|
|
63
|
+
class="mx-auto"
|
|
64
|
+
class:list={[
|
|
65
|
+
maxWidths[maxWidth],
|
|
66
|
+
marginTopValues[marginTop],
|
|
67
|
+
!disableHorizontalPadding && "px-4 md:px-8",
|
|
68
|
+
className,
|
|
69
|
+
]}
|
|
57
70
|
id={id}
|
|
58
71
|
>
|
|
59
72
|
{
|
|
60
73
|
title && (
|
|
61
|
-
<h2
|
|
74
|
+
<h2
|
|
75
|
+
class="mb-10 text-2xl font-bold text-gray-700 sm:mb-12 sm:text-3xl"
|
|
76
|
+
class:list={[disableHorizontalPadding && "px-4 md:px-8"]}
|
|
77
|
+
>
|
|
62
78
|
{title}
|
|
63
79
|
</h2>
|
|
64
80
|
)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Translation status
|
|
2
2
|
|
|
3
|
-
This report
|
|
3
|
+
This autogenerated report shows all built-in languages and the current status of their translations.
|
|
4
4
|
|
|
5
5
|
## **DE** ([de.yml](./de.yml))
|
|
6
6
|
|
|
@@ -16,8 +16,7 @@ ln.home.title: Startseite
|
|
|
16
16
|
ln.search.all-categories: Alle Kategorien
|
|
17
17
|
ln.search.all-languages: Alle Sprachen
|
|
18
18
|
ln.search.all-types: Alle Typen
|
|
19
|
-
ln.search.more-results: Mehr Ergebnisse
|
|
20
19
|
ln.search.no-results: Keine Ergebnisse
|
|
21
|
-
ln.search.placeholder:
|
|
20
|
+
ln.search.placeholder: Medien durchsuchen...
|
|
22
21
|
ln.search.title: Suche
|
|
23
22
|
ln.share.url-copied-to-clipboard: Link in die Zwischenablage kopiert
|
|
@@ -61,11 +61,11 @@ ln.external-link: External link
|
|
|
61
61
|
# Used on: https://sk8-ministries.pages.dev/en/media/ (not visible)
|
|
62
62
|
ln.search.title: Search
|
|
63
63
|
|
|
64
|
-
# Placeholder text for the
|
|
65
|
-
# English: Search
|
|
64
|
+
# Placeholder text for the search input to search for media items.
|
|
65
|
+
# English: Search media...
|
|
66
66
|
#
|
|
67
67
|
# Used on: https://sk8-ministries.pages.dev/en/media/
|
|
68
|
-
ln.search.placeholder: Search
|
|
68
|
+
ln.search.placeholder: Search media...
|
|
69
69
|
|
|
70
70
|
# Filter option to display content in all languages.
|
|
71
71
|
#
|
|
@@ -85,11 +85,6 @@ ln.search.all-types: All types
|
|
|
85
85
|
# Used on: https://sk8-ministries.pages.dev/en/media/
|
|
86
86
|
ln.search.all-categories: All categories
|
|
87
87
|
|
|
88
|
-
# Button label to load more search results.
|
|
89
|
-
#
|
|
90
|
-
# English: More results
|
|
91
|
-
ln.search.more-results: More results
|
|
92
|
-
|
|
93
88
|
# Message displayed when no search results are found.
|
|
94
89
|
#
|
|
95
90
|
# English: No results
|
|
@@ -8,11 +8,10 @@ ln.languages: Языки
|
|
|
8
8
|
ln.type: Тип
|
|
9
9
|
ln.external-link: Внешняя ссылка
|
|
10
10
|
ln.search.title: Поиск
|
|
11
|
-
ln.search.placeholder: Поиск
|
|
11
|
+
ln.search.placeholder: Поиск медиа...
|
|
12
12
|
ln.search.all-languages: Все языки
|
|
13
13
|
ln.search.all-types: Все типы
|
|
14
14
|
ln.search.all-categories: Все категории
|
|
15
|
-
ln.search.more-results: Больше результатов
|
|
16
15
|
ln.search.no-results: Нет результатов
|
|
17
16
|
ln.details.open: Открыть
|
|
18
17
|
ln.details.share: Поделиться
|
|
@@ -8,11 +8,10 @@ ln.languages: Мови
|
|
|
8
8
|
ln.type: Тип
|
|
9
9
|
ln.external-link: Зовнішнє посилання
|
|
10
10
|
ln.search.title: Пошук
|
|
11
|
-
ln.search.placeholder: Пошук
|
|
11
|
+
ln.search.placeholder: Пошук медіа...
|
|
12
12
|
ln.search.all-languages: Усі мови
|
|
13
13
|
ln.search.all-types: Усі типи
|
|
14
14
|
ln.search.all-categories: Усі категорії
|
|
15
|
-
ln.search.more-results: Більше результатів
|
|
16
15
|
ln.search.no-results: Немає результатів
|
|
17
16
|
ln.details.open: Відкрити
|
|
18
17
|
ln.details.share: Поділитися
|
package/src/i18n/translations.ts
CHANGED
package/src/layouts/Page.astro
CHANGED
|
@@ -32,13 +32,19 @@ const t = Astro.locals.i18n.t
|
|
|
32
32
|
---
|
|
33
33
|
|
|
34
34
|
<nav class="-me-3 flex items-center">
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
35
|
+
{
|
|
36
|
+
!config.searchPage?.hideHeaderSearchIcon && (
|
|
37
|
+
<a
|
|
38
|
+
class="hover:text-primary flex p-3 text-gray-600"
|
|
39
|
+
aria-label={t("ln.search.title")}
|
|
40
|
+
data-astro-prefetch="viewport"
|
|
41
|
+
href={searchPagePath(Astro.currentLocale)}
|
|
42
|
+
>
|
|
43
|
+
<Icon className="mdi--magnify" ariaLabel="" />
|
|
44
|
+
</a>
|
|
45
|
+
)
|
|
46
|
+
}
|
|
47
|
+
|
|
42
48
|
<LanguagePicker />
|
|
43
49
|
|
|
44
50
|
{
|
|
@@ -14,7 +14,7 @@ if (!src.endsWith(".mp3")) {
|
|
|
14
14
|
}
|
|
15
15
|
---
|
|
16
16
|
|
|
17
|
-
<audio class="rounded-
|
|
17
|
+
<audio class="rounded-2xl" class:list={[className]} src={src} controls></audio>
|
|
18
18
|
|
|
19
19
|
<style>
|
|
20
20
|
audio::-webkit-media-controls-enclosure {
|
|
@@ -1,51 +1,21 @@
|
|
|
1
1
|
---
|
|
2
|
-
import config from "virtual:lightnet/config"
|
|
3
|
-
|
|
4
|
-
import { getCategories } from "../../content/get-categories"
|
|
5
|
-
import { contentLanguages } from "../../content/get-languages"
|
|
6
|
-
import { getMediaTypes } from "../../content/get-media-types"
|
|
7
2
|
import Page from "../../layouts/Page.astro"
|
|
8
|
-
import
|
|
9
|
-
import
|
|
3
|
+
import SearchFilter from "./components/SearchFilter.astro"
|
|
4
|
+
import SearchList from "./components/SearchList.astro"
|
|
10
5
|
|
|
11
6
|
export { getLocalePaths as getStaticPaths } from "../../i18n/get-locale-paths"
|
|
12
7
|
|
|
13
|
-
const { t
|
|
14
|
-
|
|
15
|
-
const categories: Record<string, string> = {}
|
|
16
|
-
for (const { id, name } of await getCategories(currentLocale, t)) {
|
|
17
|
-
categories[id] = name
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
const mediaTypes = (await getMediaTypes())
|
|
21
|
-
.map((type) => ({
|
|
22
|
-
id: type.id,
|
|
23
|
-
label: t(type.data.label),
|
|
24
|
-
icon: type.data.icon,
|
|
25
|
-
}))
|
|
26
|
-
.sort((a, b) => a.label.localeCompare(b.label, currentLocale))
|
|
27
|
-
|
|
28
|
-
const translatedContentLanguages = contentLanguages
|
|
29
|
-
.map((language) => ({
|
|
30
|
-
...language,
|
|
31
|
-
name: t(language.label),
|
|
32
|
-
}))
|
|
33
|
-
.sort((a, b) => a.name.localeCompare(b.name, currentLocale))
|
|
34
|
-
|
|
35
|
-
const filterByLocale = !!config.searchPage?.filterByLocale
|
|
8
|
+
const { t } = Astro.locals.i18n
|
|
36
9
|
---
|
|
37
10
|
|
|
38
11
|
<Page>
|
|
39
12
|
<div class="mx-auto max-w-screen-md">
|
|
40
|
-
<
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
categories={categories}
|
|
48
|
-
filterByLocale={filterByLocale}
|
|
49
|
-
/>
|
|
13
|
+
<div class="px-4 md:px-8">
|
|
14
|
+
<h1 class="mb-4 mt-8 text-4xl md:mb-8 md:mt-12 md:text-5xl">
|
|
15
|
+
{t("ln.search.title")}
|
|
16
|
+
</h1>
|
|
17
|
+
<SearchFilter />
|
|
18
|
+
</div>
|
|
19
|
+
<SearchList />
|
|
50
20
|
</div>
|
|
51
21
|
</Page>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import Icon from "../../../components/Icon"
|
|
2
|
+
|
|
3
|
+
export default function LoadingSkeleton({ direction }: { direction: string }) {
|
|
4
|
+
return (
|
|
5
|
+
<div className="flex h-52 animate-pulse items-center overflow-hidden py-2 sm:h-64">
|
|
6
|
+
<div className="h-36 w-36 shrink-0 rounded-md bg-gray-200"></div>
|
|
7
|
+
<div className="ms-5 flex grow flex-col gap-3">
|
|
8
|
+
<div className="h-4 w-1/2 rounded-md bg-gray-200 md:h-6"></div>
|
|
9
|
+
<div className="h-4 w-3/4 rounded-md bg-gray-200 md:h-6"></div>
|
|
10
|
+
<div className="h-4 w-5/6 rounded-md bg-gray-200 md:h-6"></div>
|
|
11
|
+
</div>
|
|
12
|
+
<Icon
|
|
13
|
+
className="mdi--chevron-right my-auto me-4 ms-2 hidden shrink-0 text-2xl text-gray-300 sm:block"
|
|
14
|
+
flipIcon={direction === "rtl"}
|
|
15
|
+
ariaLabel=""
|
|
16
|
+
/>
|
|
17
|
+
</div>
|
|
18
|
+
)
|
|
19
|
+
}
|