@c-rex/components 0.1.37 → 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.
Files changed (146) hide show
  1. package/README.md +73 -73
  2. package/package.json +250 -235
  3. package/src/article/article-action-bar.tsx +110 -110
  4. package/src/article/article-content.tsx +18 -46
  5. package/src/autocomplete.tsx +201 -201
  6. package/src/breadcrumb.tsx +124 -124
  7. package/src/carousel/carousel.tsx +353 -352
  8. package/src/check-article-lang.tsx +47 -43
  9. package/src/directoryNodes/directory-tree-context.tsx +388 -0
  10. package/src/directoryNodes/tree-of-content.tsx +68 -67
  11. package/src/documents/result-list.tsx +124 -127
  12. package/src/favorites/bookmark-button.tsx +97 -79
  13. package/src/favorites/favorite-button.tsx +137 -74
  14. package/src/footer/footer-shell.tsx +52 -0
  15. package/src/footer/footer.tsx +7 -0
  16. package/src/footer/legal-links-block.tsx +25 -0
  17. package/src/footer/organization-contact-block.tsx +94 -0
  18. package/src/footer/social-links-block.tsx +38 -0
  19. package/src/footer/types.ts +10 -0
  20. package/src/footer/vcard-footer.tsx +72 -0
  21. package/src/generated/client-components.tsx +1366 -1350
  22. package/src/generated/create-client-request.tsx +116 -113
  23. package/src/generated/create-server-request.tsx +70 -61
  24. package/src/generated/create-suggestions-request.tsx +55 -55
  25. package/src/generated/server-components.tsx +1056 -1056
  26. package/src/generated/suggestions.tsx +302 -299
  27. package/src/icons/file-icon.tsx +8 -8
  28. package/src/icons/flag-icon.tsx +15 -15
  29. package/src/icons/loading.tsx +11 -11
  30. package/src/icons/social-icon.tsx +24 -0
  31. package/src/info/info-card.tsx +43 -0
  32. package/src/info/{info-table.tsx → information-unit-metadata-grid.tsx} +157 -146
  33. package/src/info/shared.tsx +49 -25
  34. package/src/navbar/language-switcher/content-language-switch.tsx +92 -92
  35. package/src/navbar/language-switcher/shared.tsx +33 -33
  36. package/src/navbar/language-switcher/ui-language-switch.tsx +37 -38
  37. package/src/navbar/navbar.tsx +157 -148
  38. package/src/navbar/settings.tsx +62 -62
  39. package/src/navbar/sign-in-out-btns.tsx +35 -35
  40. package/src/navbar/user-menu.tsx +60 -60
  41. package/src/page-wrapper.tsx +54 -31
  42. package/src/render-article.module.css +155 -0
  43. package/src/render-article.tsx +75 -68
  44. package/src/renditions/file-download.tsx +83 -83
  45. package/src/renditions/html.tsx +64 -64
  46. package/src/renditions/image/container.tsx +54 -54
  47. package/src/renditions/image/rendition.tsx +55 -55
  48. package/src/restriction-menu/restriction-menu-container.tsx +117 -53
  49. package/src/restriction-menu/restriction-menu-item.tsx +155 -147
  50. package/src/restriction-menu/restriction-menu.tsx +341 -157
  51. package/src/results/dialog-filter.tsx +166 -166
  52. package/src/results/empty.tsx +15 -15
  53. package/src/results/filter-navbar.tsx +294 -261
  54. package/src/results/filter-sidebar/__tests__/utils.test.ts +129 -0
  55. package/src/results/filter-sidebar/index.tsx +270 -126
  56. package/src/results/filter-sidebar/utils.ts +196 -164
  57. package/src/results/generic/table-result-list.tsx +97 -99
  58. package/src/results/{table-with-images.tsx → information-unit-search-results-card-list.tsx} +125 -127
  59. package/src/results/{cards.tsx → information-unit-search-results-cards.tsx} +99 -99
  60. package/src/results/{table.tsx → information-unit-search-results-table.tsx} +104 -104
  61. package/src/results/pagination.tsx +81 -81
  62. package/src/results/summary.ts +30 -0
  63. package/src/results/utils.ts +54 -47
  64. package/src/search-input.tsx +70 -70
  65. package/src/share-button.tsx +49 -49
  66. package/src/stores/favorites-store.ts +88 -88
  67. package/src/stores/highlight-store.ts +15 -15
  68. package/src/stores/language-store.ts +14 -43
  69. package/src/stores/restriction-store.ts +11 -11
  70. package/src/stores/search-settings-store.ts +68 -64
  71. package/src/article/article-action-bar.analysis.md +0 -15
  72. package/src/article/article-action-bar.stories.tsx +0 -15
  73. package/src/article/article-content.analysis.md +0 -15
  74. package/src/article/article-content.stories.tsx +0 -21
  75. package/src/autocomplete.analysis.md +0 -17
  76. package/src/breadcrumb.analysis.md +0 -15
  77. package/src/carousel/carousel.analysis.md +0 -17
  78. package/src/check-article-lang.analysis.md +0 -15
  79. package/src/directoryNodes/tree-of-content.analysis.md +0 -14
  80. package/src/directoryNodes/tree-of-content.stories.tsx +0 -22
  81. package/src/documents/result-list.analysis.md +0 -14
  82. package/src/documents/result-list.stories.tsx +0 -19
  83. package/src/favorites/bookmark-button.analysis.md +0 -17
  84. package/src/favorites/bookmark-button.stories.tsx +0 -19
  85. package/src/favorites/favorite-button.analysis.md +0 -18
  86. package/src/favorites/favorite-button.stories.tsx +0 -22
  87. package/src/icons/file-icon.analysis.md +0 -14
  88. package/src/icons/file-icon.stories.tsx +0 -19
  89. package/src/icons/flag-icon.analysis.md +0 -14
  90. package/src/icons/flag-icon.stories.tsx +0 -25
  91. package/src/icons/loading.analysis.md +0 -14
  92. package/src/icons/loading.stories.tsx +0 -21
  93. package/src/info/info-table.analysis.md +0 -15
  94. package/src/info/shared.analysis.md +0 -14
  95. package/src/info/stories/info-table.stories.tsx +0 -31
  96. package/src/info/stories/shared.stories.tsx +0 -24
  97. package/src/navbar/language-switcher/content-language-switch.analysis.md +0 -15
  98. package/src/navbar/language-switcher/shared.analysis.md +0 -14
  99. package/src/navbar/language-switcher/ui-language-switch.analysis.md +0 -15
  100. package/src/navbar/navbar.analysis.md +0 -14
  101. package/src/navbar/settings.analysis.md +0 -14
  102. package/src/navbar/sign-in-out-btns.analysis.md +0 -14
  103. package/src/navbar/stories/navbar.stories.tsx +0 -31
  104. package/src/navbar/stories/settings.stories.tsx +0 -15
  105. package/src/navbar/stories/sign-in-out-btns.stories.tsx +0 -15
  106. package/src/navbar/stories/user-menu.stories.tsx +0 -20
  107. package/src/navbar/user-menu.analysis.md +0 -14
  108. package/src/page-wrapper.analysis.md +0 -14
  109. package/src/render-article.analysis.md +0 -15
  110. package/src/renditions/file-download.analysis.md +0 -14
  111. package/src/renditions/file-download.stories.tsx +0 -19
  112. package/src/renditions/html.analysis.md +0 -17
  113. package/src/renditions/html.stories.tsx +0 -19
  114. package/src/renditions/image/container.analysis.md +0 -15
  115. package/src/renditions/image/container.stories.tsx +0 -19
  116. package/src/renditions/image/rendition.analysis.md +0 -14
  117. package/src/renditions/image/rendition.stories.tsx +0 -19
  118. package/src/restriction-menu/restriction-menu-container.analysis.md +0 -14
  119. package/src/restriction-menu/restriction-menu-item.analysis.md +0 -14
  120. package/src/restriction-menu/restriction-menu.analysis.md +0 -17
  121. package/src/results/analysis/cards.analysis.md +0 -14
  122. package/src/results/analysis/dialog-filter.analysis.md +0 -17
  123. package/src/results/analysis/empty.analysis.md +0 -14
  124. package/src/results/analysis/filter-navbar.analysis.md +0 -16
  125. package/src/results/analysis/pagination.analysis.md +0 -14
  126. package/src/results/analysis/table-with-images.analysis.md +0 -15
  127. package/src/results/analysis/table.analysis.md +0 -15
  128. package/src/results/filter-sidebar/index.analysis.md +0 -14
  129. package/src/results/generic/table-result-list.analysis.md +0 -15
  130. package/src/results/generic/table-result-list.stories.tsx +0 -21
  131. package/src/results/stories/cards.stories.tsx +0 -66
  132. package/src/results/stories/dialog-filter.stories.tsx +0 -20
  133. package/src/results/stories/empty.stories.tsx +0 -25
  134. package/src/results/stories/filter-navbar.stories.tsx +0 -19
  135. package/src/results/stories/filter-sidebar.stories.tsx +0 -20
  136. package/src/results/stories/pagination.stories.tsx +0 -24
  137. package/src/results/stories/table-with-images.stories.tsx +0 -19
  138. package/src/results/stories/table.stories.tsx +0 -78
  139. package/src/search-input.analysis.md +0 -15
  140. package/src/share-button.analysis.md +0 -19
  141. package/src/stories/autocomplete.stories.tsx +0 -20
  142. package/src/stories/breadcrumb.stories.tsx +0 -93
  143. package/src/stories/check-article-lang.stories.tsx +0 -22
  144. package/src/stories/render-article.stories.tsx +0 -19
  145. package/src/stories/search-input.stories.tsx +0 -21
  146. package/src/stories/share-button.stories.tsx +0 -15
@@ -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
+ }
@@ -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
  };