Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 0 additions & 6 deletions api/v4/source/definitions.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3472,12 +3472,6 @@ components:
description: The time in milliseconds that this action was performed.
type: integer
format: int64
PostIdToReactionsMap:
type: object
additionalProperties:
type: array
items:
$ref: "#/components/schemas/Reaction"
Product:
type: object
properties:
Expand Down
34 changes: 0 additions & 34 deletions api/v4/source/reactions.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -101,37 +101,3 @@
$ref: "#/components/responses/Unauthorized"
"403":
$ref: "#/components/responses/Forbidden"
/api/v4/posts/ids/reactions:
post:
tags:
- reactions
summary: Bulk get the reaction for posts
description: |
Get a list of reactions made by all users to a given post.
##### Permissions
Must have `read_channel` permission for the channel the post is in.

__Minimum server version__: 5.8
operationId: GetBulkReactions
requestBody:
content:
application/json:
schema:
type: array
items:
type: string
description: Array of post IDs
required: true
responses:
"200":
description: Reactions retrieval successful
content:
application/json:
schema:
$ref: "#/components/schemas/PostIdToReactionsMap"
"400":
$ref: "#/components/responses/BadRequest"
"401":
$ref: "#/components/responses/Unauthorized"
"403":
$ref: "#/components/responses/Forbidden"
9 changes: 6 additions & 3 deletions docs/main/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,12 @@ The secure, self-hosted collaboration platform for defense, intelligence, securi
]} />

Or jump to one of the specialized personas:
[SREs / Platform Operators](/for/sre) ·
[Compliance Officers](/for/compliance-officer) ·
[Air-Gapped Operators](/for/air-gapped-operator)

<CardGrid variant="compact" cards={[
{title: 'SREs / Platform Operators', to: '/for/sre', description: 'Deploy, scale, observability, disaster recovery.'},
{title: 'Compliance Officers', to: '/for/compliance-officer', description: 'Audit evidence, exports, framework mappings.'},
{title: 'Air-Gapped Operators', to: '/for/air-gapped-operator', description: 'Network-isolated enclaves and the tactical edge.'},
]} />

## The Intelligent Mission Environment (IME)

Expand Down
31 changes: 29 additions & 2 deletions docs/pdf/styles/print.css
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@
* page.addStyleTag({ path: 'pdf/styles/print.css' })
* before printing.
*
* Why this lives here instead of docs-site/src/css:
* Why this lives here instead of docs/site/src/css:
* The docs site is media-screen first; print is a publishing artifact
* produced by a separate pipeline. Keeping the print CSS next to the
* PDF builder makes the dependency obvious and lets us iterate on
* pagination without touching the live site CSS.
*
* If you need to move it back into the docs site (e.g., to enable a
* "Download PDF" button that does in-browser print-preview), drop it
* into docs-site/src/css/ and add a `<link rel="stylesheet"
* into docs/site/src/css/ and add a `<link rel="stylesheet"
* media="print" …>` reference.
*/

Expand Down Expand Up @@ -334,6 +334,33 @@ tbody tr { page-break-inside: avoid; }
[class*="card"] [class*="arrow"] { display: none !important; }
[class*="card"] [class*="icon"] { display: none !important; }

/* CardGrid compact variant — hashed class names are `chip_*`, so the
* `[class*="card"]` rules above don't reach it. Collapse to the same
* list, one weight down. */
[class*="chipRow"] {
display: block !important;
}
[class*="chip_"] {
display: block !important;
margin: 3pt 0 !important;
padding: 4pt 8pt !important;
border: 0.5pt solid #D6DDEC !important;
border-radius: 2pt !important;
background: #FFFFFF !important;
box-shadow: none !important;
page-break-inside: avoid;
}
[class*="chipTitle"] {
font-family: 'Archivo Black', system-ui, sans-serif;
font-size: 9.5pt;
color: #1E325C !important;
}
[class*="chipDescription"] {
font-size: 8.5pt;
color: #1B1D22 !important;
}
[class*="chipArrow"] { display: none !important; }

/* ============================================================
* OpenAPI plugin — print-specific overrides
* ========================================================== */
Expand Down
7 changes: 7 additions & 0 deletions docs/site/docusaurus.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,13 @@ const algoliaThemeConfig =
indexName: 'mattermost-docs',
contextualSearch: true,
searchPagePath: 'search',
searchParameters: {
optionalFilters: [
'docusaurus_tag:docs-documentation-current<score=3>',
'docusaurus_tag:docs-developers-current<score=2>',
'docusaurus_tag:docs-api-current<score=1>',
],
},
},
}
: {};
Expand Down
37 changes: 35 additions & 2 deletions docs/site/src/components/CardGrid/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import styles from './styles.module.css';

type Card = {
title: string;
description: string;
description?: string;
to: string;
icon?: string; // CompassIcon name
meta?: string; // small annotation (e.g., "549 endpoints")
Expand All @@ -15,15 +15,48 @@ type Card = {
* of links — each card is a discrete navigation surface with title,
* description, and optional Compass icon + meta.
*
* The `compact` variant renders the same cards as a wrapping row of
* low-weight chips, for secondary destinations that need to stay
* scannable without competing with a primary card grid above them.
*
* Usage:
* <CardGrid cards={[
* {title: 'Examples', icon: 'channels', to: '/api/examples',
* description: 'Quick-start with curl.', meta: '6 examples'},
* {title: 'Reference', icon: 'boards', to: '/api/reference/login',
* description: 'Every endpoint, grouped by resource.', meta: '549 endpoints'},
* ]} />
*
* <CardGrid variant="compact" cards={[
* {title: 'Compliance Officers', to: '/for/compliance-officer',
* description: 'Audit evidence, exports.'},
* ]} />
*/
export default function CardGrid({cards, columns = 3}: {cards: Card[]; columns?: 2 | 3 | 4}) {
export default function CardGrid({
cards,
columns = 3,
variant = 'default',
}: {
cards: Card[];
columns?: 2 | 3 | 4;
variant?: 'default' | 'compact';
}) {
if (variant === 'compact') {
return (
<div className={styles.chipRow}>
{cards.map((c, i) => (
<Link key={`${c.to}-${i}`} to={c.to} className={styles.chip}>
<span className={styles.chipBody}>
<span className={styles.chipTitle}>{c.title}</span>
{c.description && <span className={styles.chipDescription}>{c.description}</span>}
</span>
<span className={styles.chipArrow} aria-hidden>→</span>
</Link>
))}
</div>
);
}

return (
<div className={`${styles.grid} ${styles[`cols${columns}`]}`}>
{cards.map((c, i) => (
Expand Down
82 changes: 82 additions & 0 deletions docs/site/src/components/CardGrid/styles.module.css
Original file line number Diff line number Diff line change
Expand Up @@ -144,3 +144,85 @@
background: rgba(255, 255, 255, 0.08);
color: var(--mm-color-white);
}

/* Compact variant — secondary destinations that sit under a primary
* card grid. Same affordances (surface, hover, arrow) at roughly half
* the visual weight, so they read as a second tier rather than a
* competing one. */
.chipRow {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(230px, 1fr));
gap: 0.6rem;
margin: 0.75rem 0 2.5rem;
}

.chip {
display: flex;
align-items: center;
gap: 0.75rem;
padding: 0.6rem 0.85rem;
background: var(--mm-bg-surface);
border: 1px solid var(--mm-border-subtle);
border-radius: 6px;
text-decoration: none;
color: inherit;
transition: background 0.15s ease, border-color 0.15s ease;
}
.chip:hover {
background: var(--mm-bg-subtle);
border-color: var(--mm-border-strong);
text-decoration: none;
color: inherit;
}
.chip:focus-visible {
outline: 2px solid var(--mm-color-denim);
outline-offset: 2px;
}

[data-theme='dark'] .chip {
background: rgba(255, 255, 255, 0.035);
border-color: rgba(255, 255, 255, 0.14);
}
[data-theme='dark'] .chip:hover {
background: rgba(255, 255, 255, 0.06);
border-color: var(--mm-denim-300);
}
[data-theme='dark'] .chip:focus-visible {
outline-color: var(--mm-denim-300, #8499C5);
}

.chipBody {
flex: 1 1 auto;
min-width: 0;
}

.chipTitle {
display: block;
font-family: var(--mm-font-sans);
font-weight: 700;
font-size: 0.92rem;
letter-spacing: -0.01em;
color: var(--mm-text-primary);
}

.chipDescription {
display: block;
font-size: 0.8rem;
line-height: 1.4;
color: var(--mm-text-secondary);
}

.chipArrow {
flex: 0 0 auto;
color: var(--mm-text-secondary);
font-size: 0.85rem;
transition: transform 0.15s ease, color 0.15s ease;
}
.chip:hover .chipArrow {
color: var(--mm-color-denim);
transform: translateX(3px);
}

[data-theme='dark'] .chip:hover .chipArrow {
color: var(--mm-color-white);
}
Loading
Loading