@c-rex/components 0.1.38 → 0.1.39
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/README.md +73 -73
- package/package.json +250 -218
- package/src/article/article-action-bar.tsx +110 -110
- package/src/article/article-content.tsx +18 -46
- package/src/autocomplete.tsx +201 -201
- package/src/breadcrumb.tsx +124 -124
- package/src/carousel/carousel.tsx +353 -353
- package/src/check-article-lang.tsx +47 -47
- package/src/directoryNodes/directory-tree-context.tsx +388 -0
- package/src/directoryNodes/tree-of-content.tsx +68 -67
- package/src/documents/result-list.tsx +124 -127
- package/src/favorites/bookmark-button.tsx +97 -94
- package/src/favorites/favorite-button.tsx +137 -120
- package/src/footer/footer-shell.tsx +52 -0
- package/src/footer/footer.tsx +7 -0
- package/src/footer/legal-links-block.tsx +25 -0
- package/src/footer/organization-contact-block.tsx +94 -0
- package/src/footer/social-links-block.tsx +38 -0
- package/src/footer/types.ts +10 -0
- package/src/footer/vcard-footer.tsx +72 -0
- package/src/generated/client-components.tsx +1366 -1350
- package/src/generated/create-client-request.tsx +116 -113
- package/src/generated/create-server-request.tsx +70 -61
- package/src/generated/create-suggestions-request.tsx +55 -55
- package/src/generated/server-components.tsx +1056 -1056
- package/src/generated/suggestions.tsx +302 -299
- package/src/icons/file-icon.tsx +8 -8
- package/src/icons/flag-icon.tsx +15 -15
- package/src/icons/loading.tsx +11 -11
- package/src/icons/social-icon.tsx +24 -0
- package/src/info/info-card.tsx +43 -0
- package/src/info/{info-table.tsx → information-unit-metadata-grid.tsx} +157 -168
- package/src/info/shared.tsx +49 -25
- package/src/navbar/language-switcher/content-language-switch.tsx +92 -92
- package/src/navbar/language-switcher/shared.tsx +33 -33
- package/src/navbar/language-switcher/ui-language-switch.tsx +37 -37
- package/src/navbar/navbar.tsx +157 -152
- package/src/navbar/settings.tsx +62 -62
- package/src/navbar/sign-in-out-btns.tsx +35 -35
- package/src/navbar/user-menu.tsx +60 -60
- package/src/page-wrapper.tsx +54 -31
- package/src/render-article.module.css +155 -0
- package/src/render-article.tsx +75 -68
- package/src/renditions/file-download.tsx +83 -83
- package/src/renditions/html.tsx +64 -64
- package/src/renditions/image/container.tsx +54 -54
- package/src/renditions/image/rendition.tsx +55 -55
- package/src/restriction-menu/restriction-menu-container.tsx +117 -53
- package/src/restriction-menu/restriction-menu-item.tsx +155 -147
- package/src/restriction-menu/restriction-menu.tsx +341 -156
- package/src/results/dialog-filter.tsx +166 -166
- package/src/results/empty.tsx +15 -15
- package/src/results/filter-navbar.tsx +294 -261
- package/src/results/filter-sidebar/__tests__/utils.test.ts +129 -0
- package/src/results/filter-sidebar/index.tsx +270 -126
- package/src/results/filter-sidebar/utils.ts +196 -164
- package/src/results/generic/table-result-list.tsx +97 -99
- package/src/results/{table-with-images.tsx → information-unit-search-results-card-list.tsx} +125 -127
- package/src/results/{cards.tsx → information-unit-search-results-cards.tsx} +99 -99
- package/src/results/{table.tsx → information-unit-search-results-table.tsx} +104 -104
- package/src/results/pagination.tsx +81 -81
- package/src/results/summary.ts +30 -0
- package/src/results/utils.ts +54 -54
- package/src/search-input.tsx +70 -70
- package/src/share-button.tsx +49 -49
- package/src/stores/favorites-store.ts +88 -88
- package/src/stores/highlight-store.ts +15 -15
- package/src/stores/language-store.ts +14 -14
- package/src/stores/restriction-store.ts +11 -11
- package/src/stores/search-settings-store.ts +68 -64
- package/src/info/set-available-versions.tsx +0 -19
|
@@ -1,166 +1,166 @@
|
|
|
1
|
-
"use client"
|
|
2
|
-
|
|
3
|
-
import React, { FC, useState } from "react"
|
|
4
|
-
import { Button } from "@c-rex/ui/button"
|
|
5
|
-
import {
|
|
6
|
-
Dialog,
|
|
7
|
-
DialogClose,
|
|
8
|
-
DialogContent,
|
|
9
|
-
DialogFooter,
|
|
10
|
-
DialogHeader,
|
|
11
|
-
DialogTitle,
|
|
12
|
-
DialogTrigger,
|
|
13
|
-
} from "@c-rex/ui/dialog"
|
|
14
|
-
import { Select, SelectContent, SelectGroup, SelectItem, SelectTrigger, SelectValue } from "@c-rex/ui/select"
|
|
15
|
-
import { Label } from "@c-rex/ui/label"
|
|
16
|
-
import { parseAsBoolean, parseAsInteger, parseAsString, useQueryStates } from "nuqs"
|
|
17
|
-
import { useTranslations } from "next-intl"
|
|
18
|
-
import { LanguageAndCountries } from "@c-rex/interfaces"
|
|
19
|
-
import { WILD_CARD_OPTIONS, OPERATOR_OPTIONS } from "@c-rex/constants"
|
|
20
|
-
import { Switch } from "@c-rex/ui/switch"
|
|
21
|
-
import { useSearchSettingsStore } from "../stores/search-settings-store"
|
|
22
|
-
import { OperatorType, WildCardType } from "@c-rex/types"
|
|
23
|
-
import { useLanguageStore } from "../stores/language-store"
|
|
24
|
-
|
|
25
|
-
interface Props {
|
|
26
|
-
trigger: React.ReactNode;
|
|
27
|
-
}
|
|
28
|
-
export const DialogFilter: FC<Props> = ({ trigger }) => {
|
|
29
|
-
const t = useTranslations("filter");
|
|
30
|
-
const availableLanguagesAndCountries = useLanguageStore(state => state.availableLanguages);
|
|
31
|
-
const initialSettings = useSearchSettingsStore.getState();
|
|
32
|
-
|
|
33
|
-
const [form, setForm] = useState({
|
|
34
|
-
like: initialSettings.like,
|
|
35
|
-
operator: initialSettings.operator as string,
|
|
36
|
-
wildcard: initialSettings.wildcard as string,
|
|
37
|
-
language: initialSettings.language || '',
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
const [, setParams] = useQueryStates({
|
|
41
|
-
language: parseAsString,
|
|
42
|
-
page: parseAsInteger,
|
|
43
|
-
wildcard: parseAsString,
|
|
44
|
-
operator: parseAsString,
|
|
45
|
-
like: parseAsBoolean,
|
|
46
|
-
}, {
|
|
47
|
-
history: 'push',
|
|
48
|
-
shallow: false,
|
|
49
|
-
});
|
|
50
|
-
|
|
51
|
-
const apply = () => {
|
|
52
|
-
useSearchSettingsStore.getState().updatePreferences({
|
|
53
|
-
like: form.like,
|
|
54
|
-
operator: form.operator as OperatorType,
|
|
55
|
-
wildcard: form.wildcard as WildCardType,
|
|
56
|
-
language: form.language,
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
setParams({
|
|
60
|
-
page: 1,
|
|
61
|
-
language: form.language,
|
|
62
|
-
operator: form.operator,
|
|
63
|
-
wildcard: form.wildcard,
|
|
64
|
-
like: form.like,
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
const reload = () => {
|
|
69
|
-
const settings = useSearchSettingsStore.getState();
|
|
70
|
-
setForm({
|
|
71
|
-
like: settings.like,
|
|
72
|
-
operator: settings.operator,
|
|
73
|
-
wildcard: settings.wildcard,
|
|
74
|
-
language: settings.language || '',
|
|
75
|
-
});
|
|
76
|
-
};
|
|
77
|
-
|
|
78
|
-
return (
|
|
79
|
-
<Dialog onOpenChange={reload}>
|
|
80
|
-
<DialogTrigger asChild>
|
|
81
|
-
{trigger}
|
|
82
|
-
</DialogTrigger>
|
|
83
|
-
<DialogContent>
|
|
84
|
-
<DialogHeader>
|
|
85
|
-
<DialogTitle>{t("searchSettings")}</DialogTitle>
|
|
86
|
-
</DialogHeader>
|
|
87
|
-
|
|
88
|
-
<div className="grid grid-cols-2 items-center pt-2">
|
|
89
|
-
<Label className="text-right">
|
|
90
|
-
{t("languages")}:
|
|
91
|
-
</Label>
|
|
92
|
-
<div className="flex items-center">
|
|
93
|
-
<Select onValueChange={(language) => setForm((prev) => ({ ...prev, language }))} value={form.language}>
|
|
94
|
-
<SelectTrigger className="w-[180px]">
|
|
95
|
-
<SelectValue placeholder="" />
|
|
96
|
-
</SelectTrigger>
|
|
97
|
-
<SelectContent>
|
|
98
|
-
<SelectGroup>
|
|
99
|
-
{availableLanguagesAndCountries?.map((item: LanguageAndCountries) => (
|
|
100
|
-
<SelectItem key={item.value} value={item.value}>
|
|
101
|
-
{item.lang.toUpperCase()}
|
|
102
|
-
</SelectItem>
|
|
103
|
-
))}
|
|
104
|
-
</SelectGroup>
|
|
105
|
-
</SelectContent>
|
|
106
|
-
</Select>
|
|
107
|
-
</div>
|
|
108
|
-
</div>
|
|
109
|
-
|
|
110
|
-
<div className="grid grid-cols-2 items-center pt-2">
|
|
111
|
-
<Label className="text-right">
|
|
112
|
-
{t("wildcard")}:
|
|
113
|
-
</Label>
|
|
114
|
-
<div className="flex items-center">
|
|
115
|
-
<Select
|
|
116
|
-
onValueChange={(wildcard) => setForm((prev) => ({ ...prev, wildcard }))}
|
|
117
|
-
value={form.wildcard}
|
|
118
|
-
>
|
|
119
|
-
<SelectTrigger className="w-[180px]">
|
|
120
|
-
<SelectValue placeholder="" />
|
|
121
|
-
</SelectTrigger>
|
|
122
|
-
<SelectContent>
|
|
123
|
-
<SelectGroup>
|
|
124
|
-
{Object.keys(WILD_CARD_OPTIONS).map((item: string) => {
|
|
125
|
-
return (
|
|
126
|
-
<SelectItem key={item} value={item}>
|
|
127
|
-
{item}
|
|
128
|
-
</SelectItem>
|
|
129
|
-
)
|
|
130
|
-
})}
|
|
131
|
-
</SelectGroup>
|
|
132
|
-
</SelectContent>
|
|
133
|
-
</Select>
|
|
134
|
-
</div>
|
|
135
|
-
</div>
|
|
136
|
-
|
|
137
|
-
<div className="grid grid-cols-2 items-center pt-2">
|
|
138
|
-
<Label htmlFor="operator" className="text-right">
|
|
139
|
-
{t("operator")}:
|
|
140
|
-
</Label>
|
|
141
|
-
|
|
142
|
-
<Switch
|
|
143
|
-
id="operator"
|
|
144
|
-
onCheckedChange={(value) => setForm((prev) => ({ ...prev, operator: value ? OPERATOR_OPTIONS.AND : OPERATOR_OPTIONS.OR }))}
|
|
145
|
-
checked={form.operator == OPERATOR_OPTIONS.AND}
|
|
146
|
-
/>
|
|
147
|
-
</div>
|
|
148
|
-
|
|
149
|
-
<div className="grid grid-cols-2 items-center pt-2">
|
|
150
|
-
<Label htmlFor="like" className="text-right">
|
|
151
|
-
{t("like")}:
|
|
152
|
-
</Label>
|
|
153
|
-
<Switch id="like" onCheckedChange={(like) => setForm((prev) => ({ ...prev, like }))} checked={form.like} />
|
|
154
|
-
</div>
|
|
155
|
-
|
|
156
|
-
<DialogFooter className="pt-2">
|
|
157
|
-
<DialogClose asChild>
|
|
158
|
-
<Button onClick={apply}>
|
|
159
|
-
{t("apply")}
|
|
160
|
-
</Button>
|
|
161
|
-
</DialogClose>
|
|
162
|
-
</DialogFooter>
|
|
163
|
-
</DialogContent>
|
|
164
|
-
</Dialog >
|
|
165
|
-
)
|
|
166
|
-
}
|
|
1
|
+
"use client"
|
|
2
|
+
|
|
3
|
+
import React, { FC, useState } from "react"
|
|
4
|
+
import { Button } from "@c-rex/ui/button"
|
|
5
|
+
import {
|
|
6
|
+
Dialog,
|
|
7
|
+
DialogClose,
|
|
8
|
+
DialogContent,
|
|
9
|
+
DialogFooter,
|
|
10
|
+
DialogHeader,
|
|
11
|
+
DialogTitle,
|
|
12
|
+
DialogTrigger,
|
|
13
|
+
} from "@c-rex/ui/dialog"
|
|
14
|
+
import { Select, SelectContent, SelectGroup, SelectItem, SelectTrigger, SelectValue } from "@c-rex/ui/select"
|
|
15
|
+
import { Label } from "@c-rex/ui/label"
|
|
16
|
+
import { parseAsBoolean, parseAsInteger, parseAsString, useQueryStates } from "nuqs"
|
|
17
|
+
import { useTranslations } from "next-intl"
|
|
18
|
+
import { LanguageAndCountries } from "@c-rex/interfaces"
|
|
19
|
+
import { WILD_CARD_OPTIONS, OPERATOR_OPTIONS } from "@c-rex/constants"
|
|
20
|
+
import { Switch } from "@c-rex/ui/switch"
|
|
21
|
+
import { useSearchSettingsStore } from "../stores/search-settings-store"
|
|
22
|
+
import { OperatorType, WildCardType } from "@c-rex/types"
|
|
23
|
+
import { useLanguageStore } from "../stores/language-store"
|
|
24
|
+
|
|
25
|
+
interface Props {
|
|
26
|
+
trigger: React.ReactNode;
|
|
27
|
+
}
|
|
28
|
+
export const DialogFilter: FC<Props> = ({ trigger }) => {
|
|
29
|
+
const t = useTranslations("filter");
|
|
30
|
+
const availableLanguagesAndCountries = useLanguageStore(state => state.availableLanguages);
|
|
31
|
+
const initialSettings = useSearchSettingsStore.getState();
|
|
32
|
+
|
|
33
|
+
const [form, setForm] = useState({
|
|
34
|
+
like: initialSettings.like,
|
|
35
|
+
operator: initialSettings.operator as string,
|
|
36
|
+
wildcard: initialSettings.wildcard as string,
|
|
37
|
+
language: initialSettings.language || '',
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
const [, setParams] = useQueryStates({
|
|
41
|
+
language: parseAsString,
|
|
42
|
+
page: parseAsInteger,
|
|
43
|
+
wildcard: parseAsString,
|
|
44
|
+
operator: parseAsString,
|
|
45
|
+
like: parseAsBoolean,
|
|
46
|
+
}, {
|
|
47
|
+
history: 'push',
|
|
48
|
+
shallow: false,
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
const apply = () => {
|
|
52
|
+
useSearchSettingsStore.getState().updatePreferences({
|
|
53
|
+
like: form.like,
|
|
54
|
+
operator: form.operator as OperatorType,
|
|
55
|
+
wildcard: form.wildcard as WildCardType,
|
|
56
|
+
language: form.language,
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
setParams({
|
|
60
|
+
page: 1,
|
|
61
|
+
language: form.language,
|
|
62
|
+
operator: form.operator,
|
|
63
|
+
wildcard: form.wildcard,
|
|
64
|
+
like: form.like,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const reload = () => {
|
|
69
|
+
const settings = useSearchSettingsStore.getState();
|
|
70
|
+
setForm({
|
|
71
|
+
like: settings.like,
|
|
72
|
+
operator: settings.operator,
|
|
73
|
+
wildcard: settings.wildcard,
|
|
74
|
+
language: settings.language || '',
|
|
75
|
+
});
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
return (
|
|
79
|
+
<Dialog onOpenChange={reload}>
|
|
80
|
+
<DialogTrigger asChild>
|
|
81
|
+
{trigger}
|
|
82
|
+
</DialogTrigger>
|
|
83
|
+
<DialogContent>
|
|
84
|
+
<DialogHeader>
|
|
85
|
+
<DialogTitle>{t("searchSettings")}</DialogTitle>
|
|
86
|
+
</DialogHeader>
|
|
87
|
+
|
|
88
|
+
<div className="grid grid-cols-2 items-center pt-2">
|
|
89
|
+
<Label className="text-right">
|
|
90
|
+
{t("languages")}:
|
|
91
|
+
</Label>
|
|
92
|
+
<div className="flex items-center">
|
|
93
|
+
<Select onValueChange={(language) => setForm((prev) => ({ ...prev, language }))} value={form.language}>
|
|
94
|
+
<SelectTrigger className="w-[180px]">
|
|
95
|
+
<SelectValue placeholder="" />
|
|
96
|
+
</SelectTrigger>
|
|
97
|
+
<SelectContent>
|
|
98
|
+
<SelectGroup>
|
|
99
|
+
{availableLanguagesAndCountries?.map((item: LanguageAndCountries) => (
|
|
100
|
+
<SelectItem key={item.value} value={item.value}>
|
|
101
|
+
{item.lang.toUpperCase()}
|
|
102
|
+
</SelectItem>
|
|
103
|
+
))}
|
|
104
|
+
</SelectGroup>
|
|
105
|
+
</SelectContent>
|
|
106
|
+
</Select>
|
|
107
|
+
</div>
|
|
108
|
+
</div>
|
|
109
|
+
|
|
110
|
+
<div className="grid grid-cols-2 items-center pt-2">
|
|
111
|
+
<Label className="text-right">
|
|
112
|
+
{t("wildcard")}:
|
|
113
|
+
</Label>
|
|
114
|
+
<div className="flex items-center">
|
|
115
|
+
<Select
|
|
116
|
+
onValueChange={(wildcard) => setForm((prev) => ({ ...prev, wildcard }))}
|
|
117
|
+
value={form.wildcard}
|
|
118
|
+
>
|
|
119
|
+
<SelectTrigger className="w-[180px]">
|
|
120
|
+
<SelectValue placeholder="" />
|
|
121
|
+
</SelectTrigger>
|
|
122
|
+
<SelectContent>
|
|
123
|
+
<SelectGroup>
|
|
124
|
+
{Object.keys(WILD_CARD_OPTIONS).map((item: string) => {
|
|
125
|
+
return (
|
|
126
|
+
<SelectItem key={item} value={item}>
|
|
127
|
+
{item}
|
|
128
|
+
</SelectItem>
|
|
129
|
+
)
|
|
130
|
+
})}
|
|
131
|
+
</SelectGroup>
|
|
132
|
+
</SelectContent>
|
|
133
|
+
</Select>
|
|
134
|
+
</div>
|
|
135
|
+
</div>
|
|
136
|
+
|
|
137
|
+
<div className="grid grid-cols-2 items-center pt-2">
|
|
138
|
+
<Label htmlFor="operator" className="text-right">
|
|
139
|
+
{t("operator")}:
|
|
140
|
+
</Label>
|
|
141
|
+
|
|
142
|
+
<Switch
|
|
143
|
+
id="operator"
|
|
144
|
+
onCheckedChange={(value) => setForm((prev) => ({ ...prev, operator: value ? OPERATOR_OPTIONS.AND : OPERATOR_OPTIONS.OR }))}
|
|
145
|
+
checked={form.operator == OPERATOR_OPTIONS.AND}
|
|
146
|
+
/>
|
|
147
|
+
</div>
|
|
148
|
+
|
|
149
|
+
<div className="grid grid-cols-2 items-center pt-2">
|
|
150
|
+
<Label htmlFor="like" className="text-right">
|
|
151
|
+
{t("like")}:
|
|
152
|
+
</Label>
|
|
153
|
+
<Switch id="like" onCheckedChange={(like) => setForm((prev) => ({ ...prev, like }))} checked={form.like} />
|
|
154
|
+
</div>
|
|
155
|
+
|
|
156
|
+
<DialogFooter className="pt-2">
|
|
157
|
+
<DialogClose asChild>
|
|
158
|
+
<Button onClick={apply}>
|
|
159
|
+
{t("apply")}
|
|
160
|
+
</Button>
|
|
161
|
+
</DialogClose>
|
|
162
|
+
</DialogFooter>
|
|
163
|
+
</DialogContent>
|
|
164
|
+
</Dialog >
|
|
165
|
+
)
|
|
166
|
+
}
|
package/src/results/empty.tsx
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import React, { FC } from "react";
|
|
2
|
-
import { Alert, AlertDescription, AlertTitle } from "@c-rex/ui/alert";
|
|
3
|
-
import { useTranslations } from "next-intl";
|
|
4
|
-
|
|
5
|
-
export const Empty: FC = () => {
|
|
6
|
-
const t = useTranslations("results")
|
|
7
|
-
|
|
8
|
-
return (
|
|
9
|
-
<Alert className="my-2">
|
|
10
|
-
<AlertTitle>{t("noResultsTitle")}</AlertTitle>
|
|
11
|
-
<AlertDescription>
|
|
12
|
-
{t("noResultsDescription")}
|
|
13
|
-
</AlertDescription>
|
|
14
|
-
</Alert>
|
|
15
|
-
);
|
|
1
|
+
import React, { FC } from "react";
|
|
2
|
+
import { Alert, AlertDescription, AlertTitle } from "@c-rex/ui/alert";
|
|
3
|
+
import { useTranslations } from "next-intl";
|
|
4
|
+
|
|
5
|
+
export const Empty: FC = () => {
|
|
6
|
+
const t = useTranslations("results")
|
|
7
|
+
|
|
8
|
+
return (
|
|
9
|
+
<Alert className="my-2">
|
|
10
|
+
<AlertTitle>{t("noResultsTitle")}</AlertTitle>
|
|
11
|
+
<AlertDescription>
|
|
12
|
+
{t("noResultsDescription")}
|
|
13
|
+
</AlertDescription>
|
|
14
|
+
</Alert>
|
|
15
|
+
);
|
|
16
16
|
};
|