@burdenoff/microfe-comradecircle 2026.704.2 → 2026.713.1
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/dist/comradecircle/ComradeCircleRoot.d.ts +5 -0
- package/dist/comradecircle/ComradeCircleRoot.d.ts.map +1 -0
- package/dist/comradecircle/ComradeCircleRoutes.d.ts +4 -0
- package/dist/comradecircle/ComradeCircleRoutes.d.ts.map +1 -0
- package/dist/comradecircle/components/Avatar.d.ts +20 -0
- package/dist/comradecircle/components/Avatar.d.ts.map +1 -0
- package/dist/comradecircle/components/Avatar.js +40 -17
- package/dist/comradecircle/components/Avatar.js.map +1 -1
- package/dist/comradecircle/components/AvatarUploadField.d.ts +21 -0
- package/dist/comradecircle/components/AvatarUploadField.d.ts.map +1 -0
- package/dist/comradecircle/components/AvatarUploadField.js +25 -14
- package/dist/comradecircle/components/AvatarUploadField.js.map +1 -1
- package/dist/comradecircle/components/CircleCard.d.ts +10 -0
- package/dist/comradecircle/components/CircleCard.d.ts.map +1 -0
- package/dist/comradecircle/components/CircleCard.js +54 -52
- package/dist/comradecircle/components/CircleCard.js.map +1 -1
- package/dist/comradecircle/components/CommentThread.d.ts +14 -0
- package/dist/comradecircle/components/CommentThread.d.ts.map +1 -0
- package/dist/comradecircle/components/CommentThread.js +80 -64
- package/dist/comradecircle/components/CommentThread.js.map +1 -1
- package/dist/comradecircle/components/CreateCircleDialog.d.ts +10 -0
- package/dist/comradecircle/components/CreateCircleDialog.d.ts.map +1 -0
- package/dist/comradecircle/components/CreateEventDialog.d.ts +12 -0
- package/dist/comradecircle/components/CreateEventDialog.d.ts.map +1 -0
- package/dist/comradecircle/components/DataTable.d.ts +28 -0
- package/dist/comradecircle/components/DataTable.d.ts.map +1 -0
- package/dist/comradecircle/components/EmptyState.d.ts +18 -0
- package/dist/comradecircle/components/EmptyState.d.ts.map +1 -0
- package/dist/comradecircle/components/EventCard.d.ts +9 -0
- package/dist/comradecircle/components/EventCard.d.ts.map +1 -0
- package/dist/comradecircle/components/EventCard.js +84 -58
- package/dist/comradecircle/components/EventCard.js.map +1 -1
- package/dist/comradecircle/components/FileImage.d.ts +18 -0
- package/dist/comradecircle/components/FileImage.d.ts.map +1 -0
- package/dist/comradecircle/components/FilterTabs.d.ts +18 -0
- package/dist/comradecircle/components/FilterTabs.d.ts.map +1 -0
- package/dist/comradecircle/components/ImageAttachments.d.ts +20 -0
- package/dist/comradecircle/components/ImageAttachments.d.ts.map +1 -0
- package/dist/comradecircle/components/MemberIdentity.d.ts +16 -0
- package/dist/comradecircle/components/MemberIdentity.d.ts.map +1 -0
- package/dist/comradecircle/components/MemberIdentity.js +2 -1
- package/dist/comradecircle/components/MemberIdentity.js.map +1 -1
- package/dist/comradecircle/components/MetricsCard.d.ts +23 -0
- package/dist/comradecircle/components/MetricsCard.d.ts.map +1 -0
- package/dist/comradecircle/components/MiniBar.d.ts +16 -0
- package/dist/comradecircle/components/MiniBar.d.ts.map +1 -0
- package/dist/comradecircle/components/PageLayout.d.ts +16 -0
- package/dist/comradecircle/components/PageLayout.d.ts.map +1 -0
- package/dist/comradecircle/components/Pagination.d.ts +22 -0
- package/dist/comradecircle/components/Pagination.d.ts.map +1 -0
- package/dist/comradecircle/components/PollCard.d.ts +10 -0
- package/dist/comradecircle/components/PollCard.d.ts.map +1 -0
- package/dist/comradecircle/components/PollCard.js +65 -44
- package/dist/comradecircle/components/PollCard.js.map +1 -1
- package/dist/comradecircle/components/PostCard.d.ts +10 -0
- package/dist/comradecircle/components/PostCard.d.ts.map +1 -0
- package/dist/comradecircle/components/PostCard.js +1 -1
- package/dist/comradecircle/components/PostCard.js.map +1 -1
- package/dist/comradecircle/components/PostComposer.d.ts +16 -0
- package/dist/comradecircle/components/PostComposer.d.ts.map +1 -0
- package/dist/comradecircle/components/ReactionBar.d.ts +8 -0
- package/dist/comradecircle/components/ReactionBar.d.ts.map +1 -0
- package/dist/comradecircle/components/ReactionBar.js +1 -1
- package/dist/comradecircle/components/ReactionBar.js.map +1 -1
- package/dist/comradecircle/components/StateViews.d.ts +24 -0
- package/dist/comradecircle/components/StateViews.d.ts.map +1 -0
- package/dist/comradecircle/components/StateViews.js +1 -16
- package/dist/comradecircle/components/StateViews.js.map +1 -1
- package/dist/comradecircle/components/StatusBadge.d.ts +9 -0
- package/dist/comradecircle/components/StatusBadge.d.ts.map +1 -0
- package/dist/comradecircle/components/StatusBadge.js +1 -1
- package/dist/comradecircle/components/StatusBadge.js.map +1 -1
- package/dist/comradecircle/components/Tabs.d.ts +17 -0
- package/dist/comradecircle/components/Tabs.d.ts.map +1 -0
- package/dist/comradecircle/components/TagInput.d.ts +18 -0
- package/dist/comradecircle/components/TagInput.d.ts.map +1 -0
- package/dist/comradecircle/components/index.d.ts +30 -0
- package/dist/comradecircle/components/index.d.ts.map +1 -0
- package/dist/comradecircle/context/ComradeCircleContext.d.ts +16 -0
- package/dist/comradecircle/context/ComradeCircleContext.d.ts.map +1 -0
- package/dist/comradecircle/context/index.d.ts +6 -0
- package/dist/comradecircle/context/index.d.ts.map +1 -0
- package/dist/comradecircle/hooks/index.d.ts +8 -0
- package/dist/comradecircle/hooks/index.d.ts.map +1 -0
- package/dist/comradecircle/hooks/useComradeCircleApi.d.ts +103 -0
- package/dist/comradecircle/hooks/useComradeCircleApi.d.ts.map +1 -0
- package/dist/comradecircle/hooks/useComradeCircleApi.js +1 -1
- package/dist/comradecircle/hooks/useComradeCircleApi.js.map +1 -1
- package/dist/comradecircle/hooks/useCursorPager.d.ts +33 -0
- package/dist/comradecircle/hooks/useCursorPager.d.ts.map +1 -0
- package/dist/comradecircle/hooks/useFiles.d.ts +28 -0
- package/dist/comradecircle/hooks/useFiles.d.ts.map +1 -0
- package/dist/comradecircle/index.d.ts +10 -0
- package/dist/comradecircle/index.d.ts.map +1 -0
- package/dist/comradecircle/index.js +1 -0
- package/dist/comradecircle/lib/graphql-cache.d.ts +26 -0
- package/dist/comradecircle/lib/graphql-cache.d.ts.map +1 -0
- package/dist/comradecircle/lib/toast.d.ts +23 -0
- package/dist/comradecircle/lib/toast.d.ts.map +1 -0
- package/dist/comradecircle/pages/FeedPage.d.ts +10 -0
- package/dist/comradecircle/pages/FeedPage.d.ts.map +1 -0
- package/dist/comradecircle/pages/FeedPage.js +79 -33
- package/dist/comradecircle/pages/FeedPage.js.map +1 -1
- package/dist/comradecircle/pages/circles/CircleDetailPage.d.ts +11 -0
- package/dist/comradecircle/pages/circles/CircleDetailPage.d.ts.map +1 -0
- package/dist/comradecircle/pages/circles/CircleDetailPage.js +354 -243
- package/dist/comradecircle/pages/circles/CircleDetailPage.js.map +1 -1
- package/dist/comradecircle/pages/circles/CirclesPage.d.ts +11 -0
- package/dist/comradecircle/pages/circles/CirclesPage.d.ts.map +1 -0
- package/dist/comradecircle/pages/circles/CirclesPage.js +97 -47
- package/dist/comradecircle/pages/circles/CirclesPage.js.map +1 -1
- package/dist/comradecircle/pages/events/EventDetailPage.d.ts +11 -0
- package/dist/comradecircle/pages/events/EventDetailPage.d.ts.map +1 -0
- package/dist/comradecircle/pages/events/EventDetailPage.js +193 -126
- package/dist/comradecircle/pages/events/EventDetailPage.js.map +1 -1
- package/dist/comradecircle/pages/events/EventsPage.d.ts +11 -0
- package/dist/comradecircle/pages/events/EventsPage.d.ts.map +1 -0
- package/dist/comradecircle/pages/events/EventsPage.js +74 -34
- package/dist/comradecircle/pages/events/EventsPage.js.map +1 -1
- package/dist/comradecircle/pages/members/MemberProfilePage.d.ts +13 -0
- package/dist/comradecircle/pages/members/MemberProfilePage.d.ts.map +1 -0
- package/dist/comradecircle/pages/members/MemberProfilePage.js +154 -82
- package/dist/comradecircle/pages/members/MemberProfilePage.js.map +1 -1
- package/dist/comradecircle/pages/members/MembersPage.d.ts +13 -0
- package/dist/comradecircle/pages/members/MembersPage.d.ts.map +1 -0
- package/dist/comradecircle/pages/members/MembersPage.js +140 -71
- package/dist/comradecircle/pages/members/MembersPage.js.map +1 -1
- package/dist/comradecircle/pages/profile/MyProfilePage.d.ts +17 -0
- package/dist/comradecircle/pages/profile/MyProfilePage.d.ts.map +1 -0
- package/dist/comradecircle/pages/profile/MyProfilePage.js +298 -202
- package/dist/comradecircle/pages/profile/MyProfilePage.js.map +1 -1
- package/dist/comradecircle/types/index.d.ts +362 -0
- package/dist/comradecircle/types/index.d.ts.map +1 -0
- package/dist/comradecircle/utils/cn.d.ts +4 -0
- package/dist/comradecircle/utils/cn.d.ts.map +1 -0
- package/dist/comradecircle/utils/formatters.d.ts +26 -0
- package/dist/comradecircle/utils/formatters.d.ts.map +1 -0
- package/dist/comradecircle/utils/i18n.d.ts +6 -0
- package/dist/comradecircle/utils/i18n.d.ts.map +1 -0
- package/dist/comradecircle/utils/index.d.ts +10 -0
- package/dist/comradecircle/utils/index.d.ts.map +1 -0
- package/dist/comradecircle/utils/navigation.d.ts +14 -0
- package/dist/comradecircle/utils/navigation.d.ts.map +1 -0
- package/dist/comradecircle/utils/slug.d.ts +6 -0
- package/dist/comradecircle/utils/slug.d.ts.map +1 -0
- package/dist/dev/main.d.ts +2 -0
- package/dist/dev/main.d.ts.map +1 -0
- package/dist/generated/global-operations.d.ts +2 -0
- package/dist/generated/global-operations.d.ts.map +1 -0
- package/dist/generated/global-types.d.ts +18199 -0
- package/dist/generated/global-types.d.ts.map +1 -0
- package/dist/generated/wspace-operations.d.ts +2 -0
- package/dist/generated/wspace-operations.d.ts.map +1 -0
- package/dist/generated/wspace-types.d.ts +43046 -0
- package/dist/generated/wspace-types.d.ts.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -1
- package/dist/services/createSandboxAssistantTransport.d.ts +24 -0
- package/dist/services/createSandboxAssistantTransport.d.ts.map +1 -0
- package/dist/services/createSandboxAssistantTransport.js +12 -0
- package/dist/services/createSandboxAssistantTransport.js.map +1 -0
- package/package.json +6 -2
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File hooks — attachments & avatars via wspace-files-svc (NO duplication).
|
|
3
|
+
* @module comradecircle/hooks
|
|
4
|
+
*
|
|
5
|
+
* ComradeCircle never stores blobs. Posts keep `attachmentFileIds` and circles /
|
|
6
|
+
* profiles keep `avatarFileId` — all pointing at files owned by wspace-files-svc.
|
|
7
|
+
* Upload goes through the shared `uploadBlobToFiles` storage helper (presigned
|
|
8
|
+
* 3-step upload) against the workspace Apollo client the shell initialises;
|
|
9
|
+
* display resolves a file id to a presigned URL via `getFileDownloadUrl`.
|
|
10
|
+
*/
|
|
11
|
+
export declare const FILE_FOLDERS: {
|
|
12
|
+
readonly avatars: "/ComradeCircle/Avatars";
|
|
13
|
+
readonly posts: "/ComradeCircle/Posts";
|
|
14
|
+
};
|
|
15
|
+
export interface UploadedImage {
|
|
16
|
+
id: string;
|
|
17
|
+
url: string;
|
|
18
|
+
name: string;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Upload an image to wspace-files-svc and return its id + a presigned URL.
|
|
22
|
+
* The caller persists the id (attachmentFileIds / avatarFileId) via the entity's
|
|
23
|
+
* own comradecircle mutation; the URL is used for an immediate preview.
|
|
24
|
+
*/
|
|
25
|
+
export declare function uploadImageToFiles(file: File, folderPath: string): Promise<UploadedImage>;
|
|
26
|
+
/** Resolve a wspace-files-svc file id to a presigned download URL for display. */
|
|
27
|
+
export declare function useFileUrl(fileId?: string | null): import('@tanstack/react-query').UseQueryResult<string | null, Error>;
|
|
28
|
+
//# sourceMappingURL=useFiles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFiles.d.ts","sourceRoot":"","sources":["../../../src/comradecircle/hooks/useFiles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAWH,eAAO,MAAM,YAAY;;;CAGf,CAAC;AAgBX,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd;AASD;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CA+B/F;AAED,kFAAkF;AAClF,wBAAgB,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,wEAqBhD"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ComradeCircle Module Exports
|
|
3
|
+
* @module comradecircle
|
|
4
|
+
*/
|
|
5
|
+
export { ComradeCircleRoot } from './ComradeCircleRoot';
|
|
6
|
+
export type { ComradeCircleRootProps, NavItem, FooterItem, TrendDirection } from './types';
|
|
7
|
+
export { ComradeCircleProvider, useComradeCircle } from './context';
|
|
8
|
+
export { cn, joinPath, formatDate, formatDateTime, formatRelativeTime, formatNumber, formatQuantity, formatPercent, formatEnumLabel, } from './utils';
|
|
9
|
+
export * from '../services/createSandboxAssistantTransport';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/comradecircle/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxD,YAAY,EAAE,sBAAsB,EAAE,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAG3F,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAGpE,OAAO,EACL,EAAE,EACF,QAAQ,EACR,UAAU,EACV,cAAc,EACd,kBAAkB,EAClB,YAAY,EACZ,cAAc,EACd,aAAa,EACb,eAAe,GAChB,MAAM,SAAS,CAAC;AAMjB,cAAc,6CAA6C,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* graphql-cache — invalidate fe-libs' imperative-fetch response cache after writes.
|
|
3
|
+
* @module comradecircle/lib
|
|
4
|
+
*
|
|
5
|
+
* `graphqlFetch` (from `@burdenoff/fe-libs/shared/graphql`) coalesces reads by
|
|
6
|
+
* caching every RESOLVED `query` response for ~15s (keyed by operationName +
|
|
7
|
+
* variables) and de-duping in-flight requests. A refetch issued right after a
|
|
8
|
+
* mutation — which is exactly what our React-Query `invalidateQueries` triggers
|
|
9
|
+
* — otherwise gets served the PRE-mutation response, so created/updated/deleted
|
|
10
|
+
* rows stay invisible until a full page reload.
|
|
11
|
+
*
|
|
12
|
+
* fe-libs' own Apollo client fixes this by calling `clearGraphqlFetchResponseCache()`
|
|
13
|
+
* on every mutation, but that helper is not re-exported from the package's public
|
|
14
|
+
* entry, and we use the raw `graphqlFetch` transport (no Apollo client). The two
|
|
15
|
+
* caches are plain `Map`s that fe-libs stores directly on `globalThis`
|
|
16
|
+
* (`getGraphqlFetchGlobalState()` returns `globalThis`), so we clear the same two
|
|
17
|
+
* globals here — mirroring `clearGraphqlFetchResponseCache` — to force every
|
|
18
|
+
* post-write read back onto the network.
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* Clear fe-libs' resolved-response cache and in-flight de-dupe map so the next
|
|
22
|
+
* read of any query hits the gateway. Safe to call unconditionally; a no-op
|
|
23
|
+
* before the caches have been created.
|
|
24
|
+
*/
|
|
25
|
+
export declare function clearGraphqlResponseCache(): void;
|
|
26
|
+
//# sourceMappingURL=graphql-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graphql-cache.d.ts","sourceRoot":"","sources":["../../../src/comradecircle/lib/graphql-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAOH;;;;GAIG;AACH,wBAAgB,yBAAyB,IAAI,IAAI,CAIhD"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { toast } from 'sonner';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Module-wide toast API. sonner is a global singleton; the matching <Toaster>
|
|
5
|
+
* is owned by the HOST app shell. Every page/component surfaces feedback through
|
|
6
|
+
* these helpers instead of hand-rolling fixed-position toast markup, so
|
|
7
|
+
* success/error notifications stay consistent with the rest of the platform.
|
|
8
|
+
*
|
|
9
|
+
* Durations follow the notification spec: success/info auto-dismiss, errors stay
|
|
10
|
+
* until the user dismisses them (sonner renders a close button and announces via
|
|
11
|
+
* aria-live).
|
|
12
|
+
*/
|
|
13
|
+
export declare const notify: {
|
|
14
|
+
success(message: string, description?: string): void;
|
|
15
|
+
info(message: string, description?: string): void;
|
|
16
|
+
warning(message: string, description?: string): void;
|
|
17
|
+
error(message: string, description?: string): void;
|
|
18
|
+
dismiss(id?: string | number): void;
|
|
19
|
+
};
|
|
20
|
+
/** Normalize an unknown thrown value into a human-readable message. */
|
|
21
|
+
export declare function describeError(error: unknown): string;
|
|
22
|
+
export { toast };
|
|
23
|
+
//# sourceMappingURL=toast.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toast.d.ts","sourceRoot":"","sources":["../../../src/comradecircle/lib/toast.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAE/B;;;;;;;;;GASG;AACH,eAAO,MAAM,MAAM;qBACA,MAAM,gBAAgB,MAAM,GAAG,IAAI;kBAGtC,MAAM,gBAAgB,MAAM,GAAG,IAAI;qBAGhC,MAAM,gBAAgB,MAAM,GAAG,IAAI;mBAGrC,MAAM,gBAAgB,MAAM,GAAG,IAAI;iBAGrC,MAAM,GAAG,MAAM,GAAG,IAAI;CAGpC,CAAC;AAEF,uEAAuE;AACvE,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAIpD;AAED,OAAO,EAAE,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FeedPage — the member's unified home feed.
|
|
3
|
+
* @module comradecircle/pages
|
|
4
|
+
*
|
|
5
|
+
* Reads `comMyFeed` (published posts from every channel, member, and circle the
|
|
6
|
+
* caller follows, newest first). A new member with no follows sees a guided
|
|
7
|
+
* empty state pointing at circle & member discovery.
|
|
8
|
+
*/
|
|
9
|
+
export declare function FeedPage(): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
//# sourceMappingURL=FeedPage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FeedPage.d.ts","sourceRoot":"","sources":["../../../src/comradecircle/pages/FeedPage.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAiEH,wBAAgB,QAAQ,4CAiEvB"}
|
|
@@ -6,60 +6,106 @@ import { useCursorPager as r } from "../hooks/useCursorPager.js";
|
|
|
6
6
|
import "../hooks/index.js";
|
|
7
7
|
import { PostCard as i } from "../components/PostCard.js";
|
|
8
8
|
import { EmptyState as a } from "../components/EmptyState.js";
|
|
9
|
-
import { ErrorView as o
|
|
10
|
-
import { Pagination as
|
|
11
|
-
import { Compass as
|
|
12
|
-
import { jsx as
|
|
13
|
-
import { Button as m } from "@burdenoff/fe-libs/ui";
|
|
9
|
+
import { ErrorView as o } from "../components/StateViews.js";
|
|
10
|
+
import { Pagination as s } from "../components/Pagination.js";
|
|
11
|
+
import { Compass as c, Newspaper as l, UsersRound as u } from "lucide-react";
|
|
12
|
+
import { jsx as d, jsxs as f } from "react/jsx-runtime";
|
|
13
|
+
import { Button as p, GlassCard as m, Skeleton as h } from "@burdenoff/fe-libs/ui";
|
|
14
14
|
//#region src/comradecircle/pages/FeedPage.tsx
|
|
15
|
-
var
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
15
|
+
var g = 20, _ = "motion-safe:animate-in motion-safe:fade-in motion-safe:slide-in-from-bottom-3 motion-safe:duration-500 motion-safe:ease-out motion-safe:fill-mode-both", v = [
|
|
16
|
+
["w-11/12", "w-3/4"],
|
|
17
|
+
[
|
|
18
|
+
"w-full",
|
|
19
|
+
"w-10/12",
|
|
20
|
+
"w-2/3"
|
|
21
|
+
],
|
|
22
|
+
["w-5/6", "w-1/2"]
|
|
23
|
+
];
|
|
24
|
+
function y() {
|
|
25
|
+
return /* @__PURE__ */ d("div", {
|
|
26
|
+
className: "mx-auto flex max-w-2xl flex-col gap-4",
|
|
27
|
+
"aria-hidden": "true",
|
|
28
|
+
children: v.map((e, t) => /* @__PURE__ */ f(m, {
|
|
29
|
+
treatment: "plain",
|
|
30
|
+
className: "p-4",
|
|
31
|
+
children: [
|
|
32
|
+
/* @__PURE__ */ f("div", {
|
|
33
|
+
className: "flex items-start gap-3",
|
|
34
|
+
children: [/* @__PURE__ */ d(h, { className: "h-10 w-10 shrink-0 rounded-full" }), /* @__PURE__ */ f("div", {
|
|
35
|
+
className: "flex-1 space-y-2 pt-1",
|
|
36
|
+
children: [/* @__PURE__ */ d(h, { className: "h-3.5 w-32" }), /* @__PURE__ */ d(h, { className: "h-3 w-20" })]
|
|
37
|
+
})]
|
|
38
|
+
}),
|
|
39
|
+
/* @__PURE__ */ d("div", {
|
|
40
|
+
className: "mt-4 space-y-2.5",
|
|
41
|
+
children: e.map((e, t) => /* @__PURE__ */ d(h, { className: `h-3 ${e}` }, t))
|
|
42
|
+
}),
|
|
43
|
+
/* @__PURE__ */ f("div", {
|
|
44
|
+
className: "mt-4 flex items-center justify-between gap-3 border-t border-border-seam pt-3",
|
|
45
|
+
children: [/* @__PURE__ */ f("div", {
|
|
46
|
+
className: "flex items-center gap-2",
|
|
47
|
+
children: [
|
|
48
|
+
/* @__PURE__ */ d(h, { className: "h-7 w-14 rounded-full" }),
|
|
49
|
+
/* @__PURE__ */ d(h, { className: "h-7 w-14 rounded-full" }),
|
|
50
|
+
/* @__PURE__ */ d(h, { className: "h-7 w-14 rounded-full" })
|
|
51
|
+
]
|
|
52
|
+
}), /* @__PURE__ */ d(h, { className: "h-7 w-24 rounded-full" })]
|
|
53
|
+
})
|
|
54
|
+
]
|
|
55
|
+
}, t))
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
function b() {
|
|
59
|
+
let { navigateTo: m } = e(), h = r(), { data: v, isLoading: b, isError: x, refetch: S } = n({
|
|
60
|
+
limit: g,
|
|
61
|
+
cursor: h.cursor
|
|
62
|
+
}), C = v?.items ?? [];
|
|
63
|
+
return /* @__PURE__ */ d(t, {
|
|
22
64
|
title: "Home",
|
|
23
65
|
titleGradient: !0,
|
|
24
66
|
aurora: !0,
|
|
25
67
|
description: "Posts from the circles, channels, and members you follow — newest first.",
|
|
26
|
-
actions: /* @__PURE__ */ p
|
|
68
|
+
actions: /* @__PURE__ */ f(p, {
|
|
27
69
|
variant: "outline",
|
|
28
|
-
onClick: () =>
|
|
29
|
-
children: [/* @__PURE__ */
|
|
70
|
+
onClick: () => m("circles"),
|
|
71
|
+
children: [/* @__PURE__ */ d(c, { className: "mr-1.5 h-4 w-4" }), " Discover circles"]
|
|
30
72
|
}),
|
|
31
|
-
children:
|
|
73
|
+
children: b ? /* @__PURE__ */ d(y, {}) : x ? /* @__PURE__ */ d(o, {
|
|
32
74
|
message: "We couldn't load your feed.",
|
|
33
|
-
onRetry: () =>
|
|
34
|
-
}) :
|
|
75
|
+
onRetry: () => S()
|
|
76
|
+
}) : C.length === 0 && h.page === 0 ? /* @__PURE__ */ d(a, {
|
|
35
77
|
illustration: "empty-notifications",
|
|
36
|
-
icon: /* @__PURE__ */
|
|
78
|
+
icon: /* @__PURE__ */ d(l, { className: "h-10 w-10" }),
|
|
37
79
|
title: "Your feed is quiet",
|
|
38
80
|
description: "Follow circles and members to fill your home feed with their latest posts, events, and discussions.",
|
|
39
|
-
action: /* @__PURE__ */
|
|
81
|
+
action: /* @__PURE__ */ f("div", {
|
|
40
82
|
className: "flex flex-wrap items-center justify-center gap-3",
|
|
41
|
-
children: [/* @__PURE__ */ p
|
|
42
|
-
onClick: () =>
|
|
43
|
-
children: [/* @__PURE__ */
|
|
44
|
-
}), /* @__PURE__ */ p
|
|
83
|
+
children: [/* @__PURE__ */ f(p, {
|
|
84
|
+
onClick: () => m("circles"),
|
|
85
|
+
children: [/* @__PURE__ */ d(c, { className: "mr-1.5 h-4 w-4" }), " Explore circles"]
|
|
86
|
+
}), /* @__PURE__ */ f(p, {
|
|
45
87
|
variant: "outline",
|
|
46
|
-
onClick: () =>
|
|
47
|
-
children: [/* @__PURE__ */
|
|
88
|
+
onClick: () => m("members"),
|
|
89
|
+
children: [/* @__PURE__ */ d(u, { className: "mr-1.5 h-4 w-4" }), " Find members"]
|
|
48
90
|
})]
|
|
49
91
|
})
|
|
50
|
-
}) : /* @__PURE__ */
|
|
92
|
+
}) : /* @__PURE__ */ f("div", {
|
|
51
93
|
className: "mx-auto flex max-w-2xl flex-col gap-4",
|
|
52
|
-
children: [
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
94
|
+
children: [C.map((e, t) => /* @__PURE__ */ d("div", {
|
|
95
|
+
className: _,
|
|
96
|
+
style: { animationDelay: `${Math.min(t, 8) * 70}ms` },
|
|
97
|
+
children: /* @__PURE__ */ d(i, { post: e })
|
|
98
|
+
}, e.id)), /* @__PURE__ */ d(s, {
|
|
99
|
+
page: h.page,
|
|
100
|
+
pageSize: g,
|
|
101
|
+
itemCount: C.length,
|
|
56
102
|
hasMore: v?.pageInfo.hasMore ?? !1,
|
|
57
|
-
onPageChange: (e) =>
|
|
103
|
+
onPageChange: (e) => h.onPageChange(e, v?.pageInfo.cursor)
|
|
58
104
|
})]
|
|
59
105
|
})
|
|
60
106
|
});
|
|
61
107
|
}
|
|
62
108
|
//#endregion
|
|
63
|
-
export {
|
|
109
|
+
export { b as FeedPage };
|
|
64
110
|
|
|
65
111
|
//# sourceMappingURL=FeedPage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FeedPage.js","names":[],"sources":["../../../src/comradecircle/pages/FeedPage.tsx"],"sourcesContent":["/**\n * FeedPage — the member's unified home feed.\n * @module comradecircle/pages\n *\n * Reads `comMyFeed` (published posts from every channel, member, and circle the\n * caller follows, newest first). A new member with no follows sees a guided\n * empty state pointing at circle & member discovery.\n */\n\nimport { Newspaper, Compass, UsersRound } from 'lucide-react';\nimport { Button } from '@burdenoff/fe-libs/ui';\nimport { PageLayout } from '../components/PageLayout';\nimport { PostCard } from '../components/PostCard';\nimport { EmptyState } from '../components/EmptyState';\nimport {
|
|
1
|
+
{"version":3,"file":"FeedPage.js","names":[],"sources":["../../../src/comradecircle/pages/FeedPage.tsx"],"sourcesContent":["/**\n * FeedPage — the member's unified home feed.\n * @module comradecircle/pages\n *\n * Reads `comMyFeed` (published posts from every channel, member, and circle the\n * caller follows, newest first). A new member with no follows sees a guided\n * empty state pointing at circle & member discovery.\n */\n\nimport { Newspaper, Compass, UsersRound } from 'lucide-react';\nimport { Button, GlassCard, Skeleton } from '@burdenoff/fe-libs/ui';\nimport { PageLayout } from '../components/PageLayout';\nimport { PostCard } from '../components/PostCard';\nimport { EmptyState } from '../components/EmptyState';\nimport { ErrorView } from '../components/StateViews';\nimport { Pagination } from '../components/Pagination';\nimport { useComMyFeed, useCursorPager } from '../hooks';\nimport { useComradeCircle } from '../context';\n\nconst PAGE_SIZE = 20;\n\n/**\n * Motion for each post as the feed 'assembles' on arrival. Fully neutralised\n * under `prefers-reduced-motion` (every class is `motion-safe:`); `fill-mode-both`\n * holds the hidden start state through the per-card `animationDelay`.\n */\nconst POST_ENTER =\n 'motion-safe:animate-in motion-safe:fade-in motion-safe:slide-in-from-bottom-3 ' +\n 'motion-safe:duration-500 motion-safe:ease-out motion-safe:fill-mode-both';\n\n/** Widths that give each skeleton post a natural, non-uniform body. */\nconst SKELETON_LINES = [\n ['w-11/12', 'w-3/4'],\n ['w-full', 'w-10/12', 'w-2/3'],\n ['w-5/6', 'w-1/2'],\n] as const;\n\n/**\n * A stack of post-card-shaped skeletons that mirrors the final feed layout, so\n * the transition from loading → loaded doesn't shift the column.\n */\nfunction FeedSkeleton() {\n return (\n <div className=\"mx-auto flex max-w-2xl flex-col gap-4\" aria-hidden=\"true\">\n {SKELETON_LINES.map((lines, i) => (\n <GlassCard key={i} treatment=\"plain\" className=\"p-4\">\n <div className=\"flex items-start gap-3\">\n <Skeleton className=\"h-10 w-10 shrink-0 rounded-full\" />\n <div className=\"flex-1 space-y-2 pt-1\">\n <Skeleton className=\"h-3.5 w-32\" />\n <Skeleton className=\"h-3 w-20\" />\n </div>\n </div>\n <div className=\"mt-4 space-y-2.5\">\n {lines.map((w, j) => (\n <Skeleton key={j} className={`h-3 ${w}`} />\n ))}\n </div>\n <div className=\"mt-4 flex items-center justify-between gap-3 border-t border-border-seam pt-3\">\n <div className=\"flex items-center gap-2\">\n <Skeleton className=\"h-7 w-14 rounded-full\" />\n <Skeleton className=\"h-7 w-14 rounded-full\" />\n <Skeleton className=\"h-7 w-14 rounded-full\" />\n </div>\n <Skeleton className=\"h-7 w-24 rounded-full\" />\n </div>\n </GlassCard>\n ))}\n </div>\n );\n}\n\nexport function FeedPage() {\n const { navigateTo } = useComradeCircle();\n const pager = useCursorPager();\n const { data, isLoading, isError, refetch } = useComMyFeed({\n limit: PAGE_SIZE,\n cursor: pager.cursor,\n });\n\n const posts = data?.items ?? [];\n\n return (\n <PageLayout\n title=\"Home\"\n titleGradient\n aurora\n description=\"Posts from the circles, channels, and members you follow — newest first.\"\n actions={\n <Button variant=\"outline\" onClick={() => navigateTo('circles')}>\n <Compass className=\"mr-1.5 h-4 w-4\" /> Discover circles\n </Button>\n }\n >\n {isLoading ? (\n <FeedSkeleton />\n ) : isError ? (\n <ErrorView message=\"We couldn't load your feed.\" onRetry={() => refetch()} />\n ) : posts.length === 0 && pager.page === 0 ? (\n <EmptyState\n illustration=\"empty-notifications\"\n icon={<Newspaper className=\"h-10 w-10\" />}\n title=\"Your feed is quiet\"\n description=\"Follow circles and members to fill your home feed with their latest posts, events, and discussions.\"\n action={\n <div className=\"flex flex-wrap items-center justify-center gap-3\">\n <Button onClick={() => navigateTo('circles')}>\n <Compass className=\"mr-1.5 h-4 w-4\" /> Explore circles\n </Button>\n <Button variant=\"outline\" onClick={() => navigateTo('members')}>\n <UsersRound className=\"mr-1.5 h-4 w-4\" /> Find members\n </Button>\n </div>\n }\n />\n ) : (\n <div className=\"mx-auto flex max-w-2xl flex-col gap-4\">\n {posts.map((post, index) => (\n <div\n key={post.id}\n className={POST_ENTER}\n style={{ animationDelay: `${Math.min(index, 8) * 70}ms` }}\n >\n <PostCard post={post} />\n </div>\n ))}\n <Pagination\n page={pager.page}\n pageSize={PAGE_SIZE}\n itemCount={posts.length}\n hasMore={data?.pageInfo.hasMore ?? false}\n onPageChange={(target) => pager.onPageChange(target, data?.pageInfo.cursor)}\n />\n </div>\n )}\n </PageLayout>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;AAmBA,IAAM,IAAY,IAOZ,IACJ,0JAII,IAAiB;CACrB,CAAC,WAAW,QAAQ;CACpB;EAAC;EAAU;EAAW;EAAQ;CAC9B,CAAC,SAAS,QAAQ;CACnB;AAMD,SAAS,IAAe;AACtB,QACE,kBAAC,OAAD;EAAK,WAAU;EAAwC,eAAY;YAChE,EAAe,KAAK,GAAO,MAC1B,kBAAC,GAAD;GAAmB,WAAU;GAAQ,WAAU;aAA/C;IACE,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,GAAD,EAAU,WAAU,mCAAoC,CAAA,EACxD,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,GAAD,EAAU,WAAU,cAAe,CAAA,EACnC,kBAAC,GAAD,EAAU,WAAU,YAAa,CAAA,CAC7B;QACF;;IACN,kBAAC,OAAD;KAAK,WAAU;eACZ,EAAM,KAAK,GAAG,MACb,kBAAC,GAAD,EAAkB,WAAW,OAAO,KAAO,EAA5B,EAA4B,CAC3C;KACE,CAAA;IACN,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,OAAD;MAAK,WAAU;gBAAf;OACE,kBAAC,GAAD,EAAU,WAAU,yBAA0B,CAAA;OAC9C,kBAAC,GAAD,EAAU,WAAU,yBAA0B,CAAA;OAC9C,kBAAC,GAAD,EAAU,WAAU,yBAA0B,CAAA;OAC1C;SACN,kBAAC,GAAD,EAAU,WAAU,yBAA0B,CAAA,CAC1C;;IACI;KArBI,EAqBJ,CACZ;EACE,CAAA;;AAIV,SAAgB,IAAW;CACzB,IAAM,EAAE,kBAAe,GAAkB,EACnC,IAAQ,GAAgB,EACxB,EAAE,SAAM,cAAW,YAAS,eAAY,EAAa;EACzD,OAAO;EACP,QAAQ,EAAM;EACf,CAAC,EAEI,IAAQ,GAAM,SAAS,EAAE;AAE/B,QACE,kBAAC,GAAD;EACE,OAAM;EACN,eAAA;EACA,QAAA;EACA,aAAY;EACZ,SACE,kBAAC,GAAD;GAAQ,SAAQ;GAAU,eAAe,EAAW,UAAU;aAA9D,CACE,kBAAC,GAAD,EAAS,WAAU,kBAAmB,CAAA,EAAA,oBAC/B;;YAGV,IACC,kBAAC,GAAD,EAAgB,CAAA,GACd,IACF,kBAAC,GAAD;GAAW,SAAQ;GAA8B,eAAe,GAAS;GAAI,CAAA,GAC3E,EAAM,WAAW,KAAK,EAAM,SAAS,IACvC,kBAAC,GAAD;GACE,cAAa;GACb,MAAM,kBAAC,GAAD,EAAW,WAAU,aAAc,CAAA;GACzC,OAAM;GACN,aAAY;GACZ,QACE,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,GAAD;KAAQ,eAAe,EAAW,UAAU;eAA5C,CACE,kBAAC,GAAD,EAAS,WAAU,kBAAmB,CAAA,EAAA,mBAC/B;QACT,kBAAC,GAAD;KAAQ,SAAQ;KAAU,eAAe,EAAW,UAAU;eAA9D,CACE,kBAAC,GAAD,EAAY,WAAU,kBAAmB,CAAA,EAAA,gBAClC;OACL;;GAER,CAAA,GAEF,kBAAC,OAAD;GAAK,WAAU;aAAf,CACG,EAAM,KAAK,GAAM,MAChB,kBAAC,OAAD;IAEE,WAAW;IACX,OAAO,EAAE,gBAAgB,GAAG,KAAK,IAAI,GAAO,EAAE,GAAG,GAAG,KAAK;cAEzD,kBAAC,GAAD,EAAgB,SAAQ,CAAA;IACpB,EALC,EAAK,GAKN,CACN,EACF,kBAAC,GAAD;IACE,MAAM,EAAM;IACZ,UAAU;IACV,WAAW,EAAM;IACjB,SAAS,GAAM,SAAS,WAAW;IACnC,eAAe,MAAW,EAAM,aAAa,GAAQ,GAAM,SAAS,OAAO;IAC3E,CAAA,CACE;;EAEG,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CircleDetailPage — a single circle: channels & posts, members, events, polls.
|
|
3
|
+
* @module comradecircle/pages/circles
|
|
4
|
+
*
|
|
5
|
+
* Reads `comCircle` (channels + memberships), `comListPosts`, `comListEvents`,
|
|
6
|
+
* `comListPolls`. Writes join/leave, create channel, create poll, set member
|
|
7
|
+
* role (via the shared cards/dialogs). The channel post feed is the heart of the
|
|
8
|
+
* page; roles gate management actions (OWNER/ADMIN manage; members post).
|
|
9
|
+
*/
|
|
10
|
+
export declare function CircleDetailPage(): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
//# sourceMappingURL=CircleDetailPage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CircleDetailPage.d.ts","sourceRoot":"","sources":["../../../../src/comradecircle/pages/circles/CircleDetailPage.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAwFH,wBAAgB,gBAAgB,4CAuH/B"}
|