@openrails/contentkit-ui 0.79.0 → 0.81.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/README.md +82 -54
- package/dist/client/beacons.d.ts +53 -0
- package/dist/client/beacons.js +72 -0
- package/dist/client/beacons.js.map +1 -0
- package/dist/client/catalog.d.ts +2 -2
- package/dist/client/catalog.js +1 -1
- package/dist/client/catalog.js.map +1 -1
- package/dist/client/client.d.ts +24 -11
- package/dist/client/client.js +37 -29
- package/dist/client/client.js.map +1 -1
- package/dist/client/content/comments.d.ts +12 -8
- package/dist/client/content/comments.js +33 -20
- package/dist/client/content/comments.js.map +1 -1
- package/dist/client/content/favorites.d.ts +24 -9
- package/dist/client/content/favorites.js +21 -22
- package/dist/client/content/favorites.js.map +1 -1
- package/dist/client/content/moderation.d.ts +1 -1
- package/dist/client/content/moderation.js.map +1 -1
- package/dist/client/content/reactions.d.ts +11 -6
- package/dist/client/content/reactions.js +23 -18
- package/dist/client/content/reactions.js.map +1 -1
- package/dist/client/content/types.d.ts +40 -21
- package/dist/client/content/types.js +5 -2
- package/dist/client/content/types.js.map +1 -1
- package/dist/client/contents.d.ts +55 -0
- package/dist/client/contents.js +144 -0
- package/dist/client/contents.js.map +1 -0
- package/dist/client/discovery.d.ts +126 -0
- package/dist/client/discovery.js +125 -0
- package/dist/client/discovery.js.map +1 -0
- package/dist/client/generated/error-codes.d.ts +1 -1
- package/dist/client/generated/error-codes.js +12 -0
- package/dist/client/generated/error-codes.js.map +1 -1
- package/dist/client/generated/routes.d.ts +1244 -370
- package/dist/client/generated/routes.js +1870 -554
- package/dist/client/generated/routes.js.map +1 -1
- package/dist/client/generated/wire.d.ts +960 -134
- package/dist/client/generated/wire.js.map +1 -1
- package/dist/client/group-fields.d.ts +25 -0
- package/dist/client/group-fields.js +63 -0
- package/dist/client/group-fields.js.map +1 -0
- package/dist/client/groups.d.ts +58 -0
- package/dist/client/groups.js +119 -0
- package/dist/client/groups.js.map +1 -0
- package/dist/client/http.d.ts +24 -12
- package/dist/client/http.js +20 -24
- package/dist/client/http.js.map +1 -1
- package/dist/client/index.d.ts +11 -6
- package/dist/client/media/api.d.ts +1 -1
- package/dist/client/media/api.js +4 -2
- package/dist/client/media/api.js.map +1 -1
- package/dist/client/media/client.d.ts +8 -9
- package/dist/client/media/client.js +58 -71
- package/dist/client/media/client.js.map +1 -1
- package/dist/client/media/ref.d.ts +30 -0
- package/dist/client/media/ref.js +10 -3
- package/dist/client/media/ref.js.map +1 -1
- package/dist/client/offers.d.ts +41 -0
- package/dist/client/offers.js +66 -0
- package/dist/client/offers.js.map +1 -0
- package/dist/client/route.d.ts +2 -0
- package/dist/client/route.js +2 -1
- package/dist/client/route.js.map +1 -1
- package/dist/client/versions.d.ts +20 -0
- package/dist/client/versions.js +53 -0
- package/dist/client/versions.js.map +1 -0
- package/dist/client.js +35 -30
- package/dist/components/admin/content-manager.d.ts +80 -0
- package/dist/components/admin/content-manager.js +591 -0
- package/dist/components/admin/content-manager.js.map +1 -0
- package/dist/components/admin/group-manager.d.ts +24 -0
- package/dist/components/admin/group-manager.js +244 -0
- package/dist/components/admin/group-manager.js.map +1 -0
- package/dist/components/admin/media-item-panel.js +1 -1
- package/dist/components/admin/media-item-panel.js.map +1 -1
- package/dist/components/content/card.d.ts +44 -0
- package/dist/components/content/card.js +285 -0
- package/dist/components/content/card.js.map +1 -0
- package/dist/components/content/editors.d.ts +40 -0
- package/dist/components/content/editors.js +764 -0
- package/dist/components/content/editors.js.map +1 -0
- package/dist/components/content/filters.d.ts +28 -0
- package/dist/components/content/filters.js +134 -0
- package/dist/components/content/filters.js.map +1 -0
- package/dist/components/content/grid.d.ts +62 -0
- package/dist/components/content/grid.js +233 -0
- package/dist/components/content/grid.js.map +1 -0
- package/dist/components/content/index.d.ts +8 -0
- package/dist/components/content/listing.d.ts +20 -0
- package/dist/components/content/listing.js +150 -0
- package/dist/components/content/listing.js.map +1 -0
- package/dist/components/content/offer-fields.d.ts +8 -0
- package/dist/components/content/offer-fields.js +127 -0
- package/dist/components/content/offer-fields.js.map +1 -0
- package/dist/components/content/paywall.d.ts +53 -0
- package/dist/components/content/paywall.js +221 -0
- package/dist/components/content/paywall.js.map +1 -0
- package/dist/components/content/search.d.ts +27 -0
- package/dist/components/content/search.js +164 -0
- package/dist/components/content/search.js.map +1 -0
- package/dist/components/groups/banner.d.ts +51 -0
- package/dist/components/groups/banner.js +194 -0
- package/dist/components/groups/banner.js.map +1 -0
- package/dist/components/groups/directory.d.ts +37 -0
- package/dist/components/groups/directory.js +117 -0
- package/dist/components/groups/directory.js.map +1 -0
- package/dist/components/groups/editor.d.ts +44 -0
- package/dist/components/groups/editor.js +860 -0
- package/dist/components/groups/editor.js.map +1 -0
- package/dist/components/groups/fields.d.ts +13 -0
- package/dist/components/groups/fields.js +68 -0
- package/dist/components/groups/fields.js.map +1 -0
- package/dist/components/groups/header.d.ts +25 -0
- package/dist/components/groups/header.js +131 -0
- package/dist/components/groups/header.js.map +1 -0
- package/dist/components/groups/index.d.ts +6 -0
- package/dist/components/groups/memberships.d.ts +55 -0
- package/dist/components/groups/memberships.js +527 -0
- package/dist/components/groups/memberships.js.map +1 -0
- package/dist/components/groups/parts.d.ts +49 -0
- package/dist/components/groups/parts.js +172 -0
- package/dist/components/groups/parts.js.map +1 -0
- package/dist/components/media-folder-editor.js +153 -152
- package/dist/components/media-folder-editor.js.map +1 -1
- package/dist/components/social/comments.d.ts +7 -5
- package/dist/components/social/comments.js +6 -2
- package/dist/components/social/comments.js.map +1 -1
- package/dist/components/social/engagement.d.ts +4 -3
- package/dist/components/social/engagement.js.map +1 -1
- package/dist/components/social/moderation.d.ts +1 -1
- package/dist/components/social/moderation.js +3 -3
- package/dist/components/social/moderation.js.map +1 -1
- package/dist/editor/rich-text-editor.d.ts +4 -4
- package/dist/editor/rich-text-editor.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.js +23 -9
- package/dist/locales/admin/de.js +5 -66
- package/dist/locales/admin/de.js.map +1 -1
- package/dist/locales/admin/en.d.ts +5 -66
- package/dist/locales/admin/en.js +19 -80
- package/dist/locales/admin/en.js.map +1 -1
- package/dist/locales/admin/es.js +5 -66
- package/dist/locales/admin/es.js.map +1 -1
- package/dist/locales/admin/ja.js +5 -66
- package/dist/locales/admin/ja.js.map +1 -1
- package/dist/locales/admin/ko.js +5 -66
- package/dist/locales/admin/ko.js.map +1 -1
- package/dist/locales/admin/zh.js +5 -66
- package/dist/locales/admin/zh.js.map +1 -1
- package/dist/locales/content/de.d.ts +2 -0
- package/dist/locales/content/de.js +98 -0
- package/dist/locales/content/de.js.map +1 -0
- package/dist/locales/content/en.d.ts +93 -0
- package/dist/locales/content/en.js +98 -0
- package/dist/locales/content/en.js.map +1 -0
- package/dist/locales/content/es.d.ts +2 -0
- package/dist/locales/content/es.js +98 -0
- package/dist/locales/content/es.js.map +1 -0
- package/dist/locales/content/ja.d.ts +2 -0
- package/dist/locales/content/ja.js +98 -0
- package/dist/locales/content/ja.js.map +1 -0
- package/dist/locales/content/ko.d.ts +2 -0
- package/dist/locales/content/ko.js +98 -0
- package/dist/locales/content/ko.js.map +1 -0
- package/dist/locales/content/zh.d.ts +2 -0
- package/dist/locales/content/zh.js +98 -0
- package/dist/locales/content/zh.js.map +1 -0
- package/dist/locales/de.js +11 -2
- package/dist/locales/de.js.map +1 -1
- package/dist/locales/discovery/de.d.ts +2 -0
- package/dist/locales/discovery/de.js +68 -0
- package/dist/locales/discovery/de.js.map +1 -0
- package/dist/locales/discovery/en.d.ts +63 -0
- package/dist/locales/discovery/en.js +68 -0
- package/dist/locales/discovery/en.js.map +1 -0
- package/dist/locales/discovery/es.d.ts +2 -0
- package/dist/locales/discovery/es.js +68 -0
- package/dist/locales/discovery/es.js.map +1 -0
- package/dist/locales/discovery/ja.d.ts +2 -0
- package/dist/locales/discovery/ja.js +68 -0
- package/dist/locales/discovery/ja.js.map +1 -0
- package/dist/locales/discovery/ko.d.ts +2 -0
- package/dist/locales/discovery/ko.js +68 -0
- package/dist/locales/discovery/ko.js.map +1 -0
- package/dist/locales/discovery/zh.d.ts +2 -0
- package/dist/locales/discovery/zh.js +68 -0
- package/dist/locales/discovery/zh.js.map +1 -0
- package/dist/locales/en.d.ts +288 -67
- package/dist/locales/en.js +11 -2
- package/dist/locales/en.js.map +1 -1
- package/dist/locales/es.js +11 -2
- package/dist/locales/es.js.map +1 -1
- package/dist/locales/groups/de.d.ts +2 -0
- package/dist/locales/groups/de.js +133 -0
- package/dist/locales/groups/de.js.map +1 -0
- package/dist/locales/groups/en.d.ts +128 -0
- package/dist/locales/groups/en.js +133 -0
- package/dist/locales/groups/en.js.map +1 -0
- package/dist/locales/groups/es.d.ts +2 -0
- package/dist/locales/groups/es.js +133 -0
- package/dist/locales/groups/es.js.map +1 -0
- package/dist/locales/groups/ja.d.ts +2 -0
- package/dist/locales/groups/ja.js +133 -0
- package/dist/locales/groups/ja.js.map +1 -0
- package/dist/locales/groups/ko.d.ts +2 -0
- package/dist/locales/groups/ko.js +133 -0
- package/dist/locales/groups/ko.js.map +1 -0
- package/dist/locales/groups/zh.d.ts +2 -0
- package/dist/locales/groups/zh.js +133 -0
- package/dist/locales/groups/zh.js.map +1 -0
- package/dist/locales/ja.js +11 -2
- package/dist/locales/ja.js.map +1 -1
- package/dist/locales/ko.js +11 -2
- package/dist/locales/ko.js.map +1 -1
- package/dist/locales/social/de.js +2 -1
- package/dist/locales/social/de.js.map +1 -1
- package/dist/locales/social/en.d.ts +2 -1
- package/dist/locales/social/en.js +2 -1
- package/dist/locales/social/en.js.map +1 -1
- package/dist/locales/social/es.js +2 -1
- package/dist/locales/social/es.js.map +1 -1
- package/dist/locales/social/ja.js +2 -1
- package/dist/locales/social/ja.js.map +1 -1
- package/dist/locales/social/ko.js +2 -1
- package/dist/locales/social/ko.js.map +1 -1
- package/dist/locales/social/zh.js +2 -1
- package/dist/locales/social/zh.js.map +1 -1
- package/dist/locales/zh.js +11 -2
- package/dist/locales/zh.js.map +1 -1
- package/dist/react/admin.d.ts +1 -1
- package/dist/react/admin.js +8 -6
- package/dist/react/admin.js.map +1 -1
- package/dist/react/comments.d.ts +9 -7
- package/dist/react/comments.js +42 -27
- package/dist/react/comments.js.map +1 -1
- package/dist/react/contents.d.ts +57 -0
- package/dist/react/contents.js +214 -0
- package/dist/react/contents.js.map +1 -0
- package/dist/react/context.d.ts +1 -1
- package/dist/react/context.js.map +1 -1
- package/dist/react/crop.js +45 -44
- package/dist/react/crop.js.map +1 -1
- package/dist/react/detail.d.ts +30 -0
- package/dist/react/detail.js +42 -0
- package/dist/react/detail.js.map +1 -0
- package/dist/react/discovery.d.ts +138 -0
- package/dist/react/discovery.js +299 -0
- package/dist/react/discovery.js.map +1 -0
- package/dist/react/engagement.d.ts +5 -5
- package/dist/react/engagement.js +55 -41
- package/dist/react/engagement.js.map +1 -1
- package/dist/react/folder.js +54 -53
- package/dist/react/folder.js.map +1 -1
- package/dist/react/groups.d.ts +115 -0
- package/dist/react/groups.js +229 -0
- package/dist/react/groups.js.map +1 -0
- package/dist/react/index.d.ts +5 -1
- package/dist/react/public.d.ts +6 -5
- package/dist/react/public.js +19 -22
- package/dist/react/public.js.map +1 -1
- package/dist/react/read.js +105 -106
- package/dist/react/read.js.map +1 -1
- package/dist/react/resources.d.ts +2 -2
- package/dist/react/resources.js +69 -40
- package/dist/react/resources.js.map +1 -1
- package/dist/react/store.js +41 -39
- package/dist/react/store.js.map +1 -1
- package/dist/react/upload.js +54 -53
- package/dist/react/upload.js.map +1 -1
- package/dist/react/use-resource.d.ts +2 -1
- package/dist/react/use-resource.js +1 -0
- package/dist/react/use-resource.js.map +1 -1
- package/dist/react/versions.d.ts +57 -0
- package/dist/react/versions.js +94 -0
- package/dist/react/versions.js.map +1 -0
- package/dist/react/video.js +87 -86
- package/dist/react/video.js.map +1 -1
- package/dist/react.js +9 -5
- package/dist/styles.css +1 -1
- package/package.json +1 -1
- package/dist/client/content/posts.d.ts +0 -52
- package/dist/client/content/posts.js +0 -84
- package/dist/client/content/posts.js.map +0 -1
- package/dist/client/taxonomy.d.ts +0 -34
- package/dist/client/taxonomy.js +0 -84
- package/dist/client/taxonomy.js.map +0 -1
- package/dist/components/admin/post-manager.d.ts +0 -45
- package/dist/components/admin/post-manager.js +0 -602
- package/dist/components/admin/post-manager.js.map +0 -1
- package/dist/components/admin/taxonomy-manager.d.ts +0 -54
- package/dist/components/admin/taxonomy-manager.js +0 -976
- package/dist/components/admin/taxonomy-manager.js.map +0 -1
- package/dist/react/posts.d.ts +0 -61
- package/dist/react/posts.js +0 -183
- package/dist/react/posts.js.map +0 -1
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { useMessages as e } from "../../i18n/context.js";
|
|
2
|
+
import { ContentKitUiRoot as t } from "../../scope.js";
|
|
3
|
+
import { Button as n } from "../../ui/button.js";
|
|
4
|
+
import { Skeleton as r } from "../../ui/skeleton.js";
|
|
5
|
+
import { contentError as i } from "../social/parts.js";
|
|
6
|
+
import { LETTERS as a } from "../../client/group-fields.js";
|
|
7
|
+
import { useGroups as o } from "../../react/groups.js";
|
|
8
|
+
import { GroupCover as s, GroupLink as c } from "./parts.js";
|
|
9
|
+
import { useState as l } from "react";
|
|
10
|
+
import { jsx as u, jsxs as d } from "react/jsx-runtime";
|
|
11
|
+
import { cn as f } from "cn";
|
|
12
|
+
//#region src/components/groups/directory.tsx
|
|
13
|
+
function p(p) {
|
|
14
|
+
let m = e(), { t: h } = m, [g, _] = l(null), v = p.letter === void 0 ? g : p.letter, y = (e) => p.onLetterChange ? p.onLetterChange(e) : _(e), b = o({
|
|
15
|
+
kind: p.kind,
|
|
16
|
+
language: p.language,
|
|
17
|
+
contentKind: p.contentKind,
|
|
18
|
+
parent: p.parent,
|
|
19
|
+
scope: p.scope,
|
|
20
|
+
sort: p.sort,
|
|
21
|
+
letter: v ?? void 0,
|
|
22
|
+
pageSize: p.pageSize
|
|
23
|
+
}, { client: p.client }), x = p.layout === "grid", S = (e) => new Intl.NumberFormat(m.language).format(e);
|
|
24
|
+
return /* @__PURE__ */ d(t, {
|
|
25
|
+
appearance: p.appearance,
|
|
26
|
+
className: f("grid gap-4 text-sm", p.className),
|
|
27
|
+
"data-ckui": "group-directory",
|
|
28
|
+
"data-kind": p.kind,
|
|
29
|
+
children: [
|
|
30
|
+
p.letters !== !1 && /* @__PURE__ */ u("nav", {
|
|
31
|
+
"aria-label": h("groups.byLetter"),
|
|
32
|
+
className: "flex flex-wrap gap-1",
|
|
33
|
+
"data-ckui": "letters",
|
|
34
|
+
children: [null, ...a].map((e) => /* @__PURE__ */ u(n, {
|
|
35
|
+
size: "xs",
|
|
36
|
+
variant: v === e ? "default" : "ghost",
|
|
37
|
+
"aria-pressed": v === e,
|
|
38
|
+
"aria-label": e === null ? void 0 : e === "#" ? h("groups.otherLetters") : e.toUpperCase(),
|
|
39
|
+
className: "min-w-7",
|
|
40
|
+
onClick: () => y(e),
|
|
41
|
+
children: e === null ? h("groups.all") : e.toUpperCase()
|
|
42
|
+
}, e ?? "all"))
|
|
43
|
+
}),
|
|
44
|
+
b.loading && !b.items.length ? /* @__PURE__ */ u("div", {
|
|
45
|
+
className: x ? "grid grid-cols-[repeat(auto-fill,minmax(9rem,1fr))] gap-3" : "grid gap-2",
|
|
46
|
+
"aria-busy": !0,
|
|
47
|
+
children: Array.from({ length: 6 }, (e, t) => /* @__PURE__ */ u(r, { className: x ? "aspect-[3/4] w-full" : "h-6 w-48" }, t))
|
|
48
|
+
}) : b.error && !b.items.length ? /* @__PURE__ */ d("div", {
|
|
49
|
+
role: "alert",
|
|
50
|
+
className: "grid justify-items-start gap-2",
|
|
51
|
+
children: [/* @__PURE__ */ u("p", {
|
|
52
|
+
className: "text-destructive",
|
|
53
|
+
children: i(m, b.error)
|
|
54
|
+
}), /* @__PURE__ */ u(n, {
|
|
55
|
+
size: "sm",
|
|
56
|
+
variant: "outline",
|
|
57
|
+
onClick: b.reload,
|
|
58
|
+
children: h("common.retry")
|
|
59
|
+
})]
|
|
60
|
+
}) : b.items.length ? /* @__PURE__ */ u("ul", {
|
|
61
|
+
className: x ? "grid grid-cols-[repeat(auto-fill,minmax(9rem,1fr))] gap-3" : "flex flex-wrap gap-2",
|
|
62
|
+
"data-ckui": "groups",
|
|
63
|
+
children: b.items.map((e) => /* @__PURE__ */ u("li", {
|
|
64
|
+
"data-ckui": "group",
|
|
65
|
+
"data-slug": e.slug,
|
|
66
|
+
children: p.renderGroup ? p.renderGroup(e) : x ? /* @__PURE__ */ d(c, {
|
|
67
|
+
group: e,
|
|
68
|
+
href: p.href,
|
|
69
|
+
className: "group grid gap-1.5",
|
|
70
|
+
children: [
|
|
71
|
+
/* @__PURE__ */ u(s, {
|
|
72
|
+
group: e,
|
|
73
|
+
className: "aspect-[3/4] w-full"
|
|
74
|
+
}),
|
|
75
|
+
/* @__PURE__ */ u("span", {
|
|
76
|
+
className: "font-medium break-words group-hover:underline",
|
|
77
|
+
children: e.name || e.slug
|
|
78
|
+
}),
|
|
79
|
+
/* @__PURE__ */ u("span", {
|
|
80
|
+
className: "text-xs text-muted-foreground tabular-nums",
|
|
81
|
+
children: m.plural("groups.items", e.count)
|
|
82
|
+
})
|
|
83
|
+
]
|
|
84
|
+
}) : /* @__PURE__ */ d(c, {
|
|
85
|
+
group: e,
|
|
86
|
+
href: p.href,
|
|
87
|
+
className: "inline-flex items-center gap-1.5 rounded-md border border-border px-2 py-1 hover:bg-muted",
|
|
88
|
+
children: [/* @__PURE__ */ u("span", {
|
|
89
|
+
className: "break-words",
|
|
90
|
+
children: e.name || e.slug
|
|
91
|
+
}), /* @__PURE__ */ u("span", {
|
|
92
|
+
className: "text-xs text-muted-foreground tabular-nums",
|
|
93
|
+
"aria-label": m.plural("groups.items", e.count),
|
|
94
|
+
children: S(e.count)
|
|
95
|
+
})]
|
|
96
|
+
})
|
|
97
|
+
}, e.id))
|
|
98
|
+
}) : /* @__PURE__ */ u("p", {
|
|
99
|
+
className: "text-muted-foreground",
|
|
100
|
+
role: "status",
|
|
101
|
+
children: h("groups.empty")
|
|
102
|
+
}),
|
|
103
|
+
b.hasMore && /* @__PURE__ */ u(n, {
|
|
104
|
+
variant: "outline",
|
|
105
|
+
size: "sm",
|
|
106
|
+
className: "justify-self-center",
|
|
107
|
+
disabled: b.loadingMore,
|
|
108
|
+
onClick: () => void b.loadMore(),
|
|
109
|
+
children: b.loadingMore ? h("groups.loading") : h("groups.loadMore")
|
|
110
|
+
})
|
|
111
|
+
]
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
//#endregion
|
|
115
|
+
export { p as GroupDirectory };
|
|
116
|
+
|
|
117
|
+
//# sourceMappingURL=directory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"directory.js","names":[],"sources":["../../../src/components/groups/directory.tsx"],"sourcesContent":["import { cn } from \"cn\";\nimport { useState, type ReactNode } from \"react\";\nimport type { ContentKitUiAppearance } from \"../../appearance.js\";\nimport type { ContentKitClient } from \"../../client/client.js\";\nimport { LETTERS } from \"../../client/group-fields.js\";\nimport type { GroupCard } from \"../../client/generated/wire.js\";\nimport { useMessages } from \"../../i18n/context.js\";\nimport { useGroups, type GroupSort } from \"../../react/groups.js\";\nimport { ContentKitUiRoot } from \"../../scope.js\";\nimport { Button } from \"#ckui/ui/button\";\nimport { Skeleton } from \"#ckui/ui/skeleton\";\nimport { contentError } from \"../social/parts.js\";\nimport { GroupCover, GroupLink, type GroupLike } from \"./parts.js\";\n\nexport interface GroupDirectoryProps {\n /** The group kind listed: tag, artist, series. */\n kind: string;\n /** Names, counts and paths in this language; default the provider's. */\n language?: string;\n /** Count contents of this kind only; default every kind. */\n contentKind?: string;\n /** Children of this group. */\n parent?: string;\n /** Groups scoped by this group (characters of a series). */\n scope?: string;\n /** Default \"name\". */\n sort?: GroupSort;\n /** The letter bucket shown, a-z or \"#\", null for every group. With onLetterChange the host keeps it (in its URL). */\n letter?: string | null;\n onLetterChange?: (letter: string | null) => void;\n /** Hide the A-Z bar. */\n letters?: boolean;\n /** \"list\" (names with counts, default) or \"grid\" (covers). */\n layout?: \"list\" | \"grid\";\n /** A group's link; default its canonical path. */\n href?: (group: GroupLike) => string | undefined;\n /** A group's entry instead of the default one. */\n renderGroup?: (group: GroupCard) => ReactNode;\n pageSize?: number;\n client?: ContentKitClient;\n className?: string;\n appearance?: ContentKitUiAppearance;\n}\n\n/** A directory of one kind's groups: A-Z buckets, names with content counts or covers, paged. */\nexport function GroupDirectory(p: GroupDirectoryProps) {\n const m = useMessages();\n const { t } = m;\n const [own, setOwn] = useState<string | null>(null);\n const letter = p.letter !== undefined ? p.letter : own;\n const choose = (l: string | null) => (p.onLetterChange ? p.onLetterChange(l) : setOwn(l));\n const list = useGroups(\n { kind: p.kind, language: p.language, contentKind: p.contentKind, parent: p.parent, scope: p.scope, sort: p.sort, letter: letter ?? undefined, pageSize: p.pageSize },\n { client: p.client },\n );\n const grid = p.layout === \"grid\";\n const count = (n: number) => new Intl.NumberFormat(m.language).format(n);\n return (\n <ContentKitUiRoot appearance={p.appearance} className={cn(\"grid gap-4 text-sm\", p.className)} data-ckui=\"group-directory\" data-kind={p.kind}>\n {p.letters !== false && (\n <nav aria-label={t(\"groups.byLetter\")} className=\"flex flex-wrap gap-1\" data-ckui=\"letters\">\n {[null, ...LETTERS].map((l) => (\n <Button\n key={l ?? \"all\"}\n size=\"xs\"\n variant={letter === l ? \"default\" : \"ghost\"}\n aria-pressed={letter === l}\n aria-label={l === null ? undefined : l === \"#\" ? t(\"groups.otherLetters\") : l.toUpperCase()}\n className=\"min-w-7\"\n onClick={() => choose(l)}\n >\n {l === null ? t(\"groups.all\") : l.toUpperCase()}\n </Button>\n ))}\n </nav>\n )}\n {list.loading && !list.items.length ? (\n <div className={grid ? \"grid grid-cols-[repeat(auto-fill,minmax(9rem,1fr))] gap-3\" : \"grid gap-2\"} aria-busy>\n {Array.from({ length: 6 }, (_, i) => (\n <Skeleton key={i} className={grid ? \"aspect-[3/4] w-full\" : \"h-6 w-48\"} />\n ))}\n </div>\n ) : list.error && !list.items.length ? (\n <div role=\"alert\" className=\"grid justify-items-start gap-2\">\n <p className=\"text-destructive\">{contentError(m, list.error)}</p>\n <Button size=\"sm\" variant=\"outline\" onClick={list.reload}>\n {t(\"common.retry\")}\n </Button>\n </div>\n ) : !list.items.length ? (\n <p className=\"text-muted-foreground\" role=\"status\">\n {t(\"groups.empty\")}\n </p>\n ) : (\n <ul className={grid ? \"grid grid-cols-[repeat(auto-fill,minmax(9rem,1fr))] gap-3\" : \"flex flex-wrap gap-2\"} data-ckui=\"groups\">\n {list.items.map((g) => (\n <li key={g.id} data-ckui=\"group\" data-slug={g.slug}>\n {p.renderGroup ? (\n p.renderGroup(g)\n ) : grid ? (\n <GroupLink group={g} href={p.href} className=\"group grid gap-1.5\">\n <GroupCover group={g} className=\"aspect-[3/4] w-full\" />\n <span className=\"font-medium break-words group-hover:underline\">{g.name || g.slug}</span>\n <span className=\"text-xs text-muted-foreground tabular-nums\">{m.plural(\"groups.items\", g.count)}</span>\n </GroupLink>\n ) : (\n <GroupLink group={g} href={p.href} className=\"inline-flex items-center gap-1.5 rounded-md border border-border px-2 py-1 hover:bg-muted\">\n <span className=\"break-words\">{g.name || g.slug}</span>\n <span className=\"text-xs text-muted-foreground tabular-nums\" aria-label={m.plural(\"groups.items\", g.count)}>\n {count(g.count)}\n </span>\n </GroupLink>\n )}\n </li>\n ))}\n </ul>\n )}\n {list.hasMore && (\n <Button variant=\"outline\" size=\"sm\" className=\"justify-self-center\" disabled={list.loadingMore} onClick={() => void list.loadMore()}>\n {list.loadingMore ? t(\"groups.loading\") : t(\"groups.loadMore\")}\n </Button>\n )}\n </ContentKitUiRoot>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { ContentKitUiAppearance } from '../../appearance.js';
|
|
3
|
+
import { ContentKitClient } from '../../client/client.js';
|
|
4
|
+
import { Group, GroupCard, GroupDetail, MergeReport } from '../../client/generated/wire.js';
|
|
5
|
+
import { ContentKitErrorHandler } from '../../react/context.js';
|
|
6
|
+
import { Labels } from './parts.js';
|
|
7
|
+
export interface GroupEditorProps {
|
|
8
|
+
/** The group edited; null creates one of `kind`. */
|
|
9
|
+
id: string | null;
|
|
10
|
+
/** The kind a new group is created as. */
|
|
11
|
+
kind: string;
|
|
12
|
+
/** Languages names and text are written in; default the content model's. */
|
|
13
|
+
languages?: readonly string[];
|
|
14
|
+
labels?: Labels;
|
|
15
|
+
onCreated?: (group: Group) => void;
|
|
16
|
+
/** After a merge: the survivor's id is report.into. */
|
|
17
|
+
onMerged?: (report: MergeReport) => void;
|
|
18
|
+
onDeleted?: (group: Group) => void;
|
|
19
|
+
/** Below the editor's sections, with the loaded group: the members, host fields. */
|
|
20
|
+
children?: (group: GroupDetail) => ReactNode;
|
|
21
|
+
client?: ContentKitClient;
|
|
22
|
+
onError?: ContentKitErrorHandler;
|
|
23
|
+
className?: string;
|
|
24
|
+
appearance?: ContentKitUiAppearance;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Staff (root:groups:write): creates a group, or edits one: slug, parent,
|
|
28
|
+
* scope and declared attributes; names and aliases per language; description
|
|
29
|
+
* and sort key per language; cover (an upload, or automatic); edges to other
|
|
30
|
+
* groups; merge into another group; delete and restore.
|
|
31
|
+
*/
|
|
32
|
+
export declare function GroupEditor(p: GroupEditorProps): import('react').JSX.Element;
|
|
33
|
+
export interface GroupMergeDialogProps {
|
|
34
|
+
open: boolean;
|
|
35
|
+
onOpenChange: (open: boolean) => void;
|
|
36
|
+
/** The group merged away. */
|
|
37
|
+
group: GroupDetail;
|
|
38
|
+
/** Merges into the chosen group: memberships, names, edges and children move, its code redirects. */
|
|
39
|
+
onMerge: (into: GroupCard) => Promise<MergeReport>;
|
|
40
|
+
language?: string;
|
|
41
|
+
client?: ContentKitClient;
|
|
42
|
+
}
|
|
43
|
+
/** Picks a group of the same kind and merges this one into it, after typing the confirmation word. */
|
|
44
|
+
export declare function GroupMergeDialog({ open, onOpenChange, group, onMerge, language, client }: GroupMergeDialogProps): import('react').JSX.Element;
|