@elevasis/ui 2.69.0 → 2.70.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.
Files changed (64) hide show
  1. package/dist/app/index.js +7 -7
  2. package/dist/auth/index.css +149 -149
  3. package/dist/auth/index.js +3 -3
  4. package/dist/charts/index.css +208 -208
  5. package/dist/charts/index.js +3 -3
  6. package/dist/{chunk-ZD6LM53O.js → chunk-5C62IRKS.js} +2 -2
  7. package/dist/{chunk-WXHAHKKI.js → chunk-6TT3FQEZ.js} +16204 -16039
  8. package/dist/{chunk-MFLM7BVC.js → chunk-AGX2CY2O.js} +1 -1
  9. package/dist/{chunk-IRV6KJPV.js → chunk-CCZJ4OWY.js} +1 -1
  10. package/dist/{chunk-XAZR3T6Y.js → chunk-DUEGHF7A.js} +3 -3
  11. package/dist/{chunk-NU3NBXHP.js → chunk-GJQF3S2Q.js} +1 -1
  12. package/dist/{chunk-YNRYIXUT.js → chunk-GZADST64.js} +6 -6
  13. package/dist/{chunk-YCRINA2D.js → chunk-JA2XDMAE.js} +1 -1
  14. package/dist/{chunk-6PZFOHJK.js → chunk-LWYLZUUV.js} +2 -2
  15. package/dist/{chunk-7WJEPTE7.js → chunk-LY3IKYTZ.js} +1 -1
  16. package/dist/{chunk-RW64UJWT.js → chunk-MFCV4JMQ.js} +2 -2
  17. package/dist/{chunk-IT7GTJCB.js → chunk-QDMIFD6F.js} +1 -1
  18. package/dist/{chunk-FLECOYUS.js → chunk-R6NMRXNO.js} +1 -1
  19. package/dist/{chunk-XQ3ILKYN.js → chunk-SMH6SQQE.js} +1 -1
  20. package/dist/{chunk-MRVGQLWN.js → chunk-TJMZUL6E.js} +1 -1
  21. package/dist/{chunk-YGCMMOY4.js → chunk-XKUEO4HG.js} +695 -73
  22. package/dist/{chunk-4JHLS234.js → chunk-ZFISGKYW.js} +1 -1
  23. package/dist/components/index.css +208 -208
  24. package/dist/components/index.js +24 -25
  25. package/dist/components/navigation/index.css +149 -149
  26. package/dist/components/navigation/index.js +4 -4
  27. package/dist/features/auth/index.css +149 -149
  28. package/dist/features/auth/index.js +5 -5
  29. package/dist/features/clients/index.css +208 -208
  30. package/dist/features/clients/index.js +4 -4
  31. package/dist/features/content/index.d.ts +238 -48
  32. package/dist/features/content/index.js +542 -410
  33. package/dist/features/crm/index.js +5 -5
  34. package/dist/features/dashboard/index.js +6 -7
  35. package/dist/features/delivery/index.css +149 -149
  36. package/dist/features/delivery/index.js +4 -4
  37. package/dist/features/knowledge/index.css +149 -149
  38. package/dist/features/knowledge/index.js +3 -3
  39. package/dist/features/lead-gen/index.js +5 -5
  40. package/dist/features/monitoring/index.css +149 -149
  41. package/dist/features/monitoring/index.js +6 -6
  42. package/dist/features/monitoring/requests/index.js +4 -4
  43. package/dist/features/operations/index.js +9 -10
  44. package/dist/features/settings/index.js +6 -6
  45. package/dist/hooks/access/index.css +149 -149
  46. package/dist/hooks/access/index.js +3 -3
  47. package/dist/hooks/index.css +149 -149
  48. package/dist/hooks/index.d.ts +2 -60
  49. package/dist/hooks/index.js +3 -3
  50. package/dist/hooks/published.css +149 -149
  51. package/dist/hooks/published.d.ts +2 -60
  52. package/dist/hooks/published.js +3 -3
  53. package/dist/knowledge/index.css +149 -149
  54. package/dist/knowledge/index.js +7 -7
  55. package/dist/layout/index.css +149 -149
  56. package/dist/layout/index.js +6 -6
  57. package/dist/provider/index.js +3 -3
  58. package/dist/provider/published.css +149 -149
  59. package/dist/provider/published.js +3 -3
  60. package/dist/theme/index.js +3 -3
  61. package/dist/theme/presets/index.js +1 -1
  62. package/package.json +3 -3
  63. package/dist/chunk-ZPTEGGKU.js +0 -631
  64. /package/dist/{chunk-XQBURFKM.js → chunk-RBGVNPA6.js} +0 -0
@@ -1251,6 +1251,37 @@ declare const OrganizationModelSchema: z.ZodObject<{
1251
1251
  type OrganizationModel = z.infer<typeof OrganizationModelSchema>;
1252
1252
  type OrganizationModelResourceKind = z.infer<typeof ResourceKindSchema>;
1253
1253
 
1254
+ declare const ContentItemResponseSchema: z.ZodObject<{
1255
+ id: z.ZodString;
1256
+ organizationId: z.ZodString;
1257
+ title: z.ZodString;
1258
+ body: z.ZodNullable<z.ZodString>;
1259
+ payload: z.ZodUnknown;
1260
+ status: z.ZodString;
1261
+ pillar: z.ZodNullable<z.ZodString>;
1262
+ pipelineId: z.ZodNullable<z.ZodString>;
1263
+ clientId: z.ZodNullable<z.ZodString>;
1264
+ sourceAssetId: z.ZodNullable<z.ZodString>;
1265
+ processingState: z.ZodRecord<z.ZodString, z.ZodObject<{
1266
+ status: z.ZodEnum<{
1267
+ error: "error";
1268
+ success: "success";
1269
+ no_result: "no_result";
1270
+ skipped: "skipped";
1271
+ }>;
1272
+ data: z.ZodOptional<z.ZodUnknown>;
1273
+ }, z.core.$loose>>;
1274
+ reviewedAt: z.ZodNullable<z.ZodString>;
1275
+ reviewedBy: z.ZodNullable<z.ZodString>;
1276
+ reviewerFeedback: z.ZodNullable<z.ZodString>;
1277
+ rejectReason: z.ZodNullable<z.ZodString>;
1278
+ createdBy: z.ZodNullable<z.ZodString>;
1279
+ updatedBy: z.ZodNullable<z.ZodString>;
1280
+ createdAt: z.ZodString;
1281
+ updatedAt: z.ZodString;
1282
+ }, z.core.$strip>;
1283
+ type ContentItemResponse = z.infer<typeof ContentItemResponseSchema>;
1284
+
1254
1285
  type SystemSidebarComponent = ComponentType;
1255
1286
  type SystemIconComponent = ComponentType<{
1256
1287
  size?: number;
@@ -1293,6 +1324,12 @@ interface ContentItemsPageSlots {
1293
1324
  /** Optional content rendered after the page title. Default: nothing rendered. */
1294
1325
  headerActions?: ReactNode;
1295
1326
  }
1327
+ /**
1328
+ * Flat, cross-pipeline items report -- kept as a reachable filtered view rather than
1329
+ * primary navigation (usability review Proposal, Decision 3; finding 1). The sidebar's
1330
+ * review-queue nav entry links here with `?review=pending`; `MyReviewQueuePanel`'s
1331
+ * "See all" does the same.
1332
+ */
1296
1333
  declare function ContentItemsPage({ headerActions }?: ContentItemsPageSlots): react_jsx_runtime.JSX.Element;
1297
1334
 
1298
1335
  interface ContentItemReviewPageSlots {
@@ -1314,44 +1351,18 @@ interface ContentPipelinesPageSlots {
1314
1351
  */
1315
1352
  declare function ContentPipelinesPage({ headerActions }?: ContentPipelinesPageSlots): react_jsx_runtime.JSX.Element;
1316
1353
 
1317
- interface ContentProduceSlotProps {
1318
- pipeline: ContentPipelineTemplate;
1319
- }
1320
-
1321
1354
  interface ContentPipelineWorkspacePageSlots {
1322
1355
  /** Optional content rendered after the page title. Default: nothing rendered. */
1323
1356
  headerActions?: ReactNode;
1324
- /** Overrides the `produce` tab's default content. See `ProduceTabProps.render`. */
1325
- renderProduce?: (props: ContentProduceSlotProps) => ReactNode;
1326
1357
  }
1327
1358
  /**
1328
1359
  * Pipeline workspace -- tabbed via `?tab=`, matching how `LeadGenListDetailPage`
1329
- * (`../../../lead-gen/pages/list-detail/ListDetailPage.tsx`) already does it: `overview`
1330
- * / `sources` / `produce` / `runs`.
1360
+ * (`../../../lead-gen/pages/list-detail/ListDetailPage.tsx`) already does it.
1331
1361
  */
1332
- declare function ContentPipelineWorkspacePage({ pipelineId, headerActions, renderProduce }: {
1362
+ declare function ContentPipelineWorkspacePage({ pipelineId, headerActions }: {
1333
1363
  pipelineId: string;
1334
1364
  } & ContentPipelineWorkspacePageSlots): react_jsx_runtime.JSX.Element;
1335
1365
 
1336
- interface ContentSettingsPageSlots {
1337
- /** Optional content rendered after the page title. Default: nothing rendered. */
1338
- headerActions?: ReactNode;
1339
- }
1340
- /**
1341
- * Rules and artifacts -- browses `content:`-prefixed artifacts for a pipeline: version
1342
- * history and activation state, read-only. Mirrors `CrmSettingsPage`, but actually
1343
- * mounted (`CrmSettingsPage` exists in the package with no Command Center route).
1344
- *
1345
- * Only `GET /acquisition/artifacts` and `POST /acquisition/artifacts` exist -- there is
1346
- * no route to update, deactivate, or re-version an artifact. `isActive` and `version`
1347
- * render as read-only state; this page does not add an activate/deactivate control
1348
- * wired to nothing (binding constraint c). It also does not add a create form: the API
1349
- * supports create, but nothing in this wave's scope specifies what a rules document's
1350
- * `content` shape should be per artifact kind, so authoring stays out of this page for
1351
- * now rather than guessing a schema.
1352
- */
1353
- declare function ContentSettingsPage({ headerActions }?: ContentSettingsPageSlots): react_jsx_runtime.JSX.Element;
1354
-
1355
1366
  interface ContentDistributionsPageSlots {
1356
1367
  /** Optional content rendered after the page title. Default: nothing rendered. */
1357
1368
  headerActions?: ReactNode;
@@ -1403,10 +1414,8 @@ interface ContentPageOverrides {
1403
1414
  itemReview?: ContentItemReviewPageSlots;
1404
1415
  /** Slot props injected into `ContentPipelinesPage`. */
1405
1416
  pipelines?: ContentPipelinesPageSlots;
1406
- /** Slot props (including the `produce` tab's `renderProduce` render prop) injected into `ContentPipelineWorkspacePage`. */
1417
+ /** Slot props injected into `ContentPipelineWorkspacePage`. */
1407
1418
  pipelineWorkspace?: ContentPipelineWorkspacePageSlots;
1408
- /** Slot props injected into `ContentSettingsPage`. */
1409
- settings?: ContentSettingsPageSlots;
1410
1419
  }
1411
1420
  /**
1412
1421
  * Extended `SystemModule` for the content feature that carries optional page overrides
@@ -1424,11 +1433,11 @@ interface ContentSystemModule extends SystemModule {
1424
1433
  * plain string matching the System path rather than an import from `@repo/core/content`
1425
1434
  * or the OM System declaration -- this package stays data-free by design (D6).
1426
1435
  *
1427
- * `sidebar` wires in `ContentSidebar` (nav items + `MyReviewQueue`). Page overrides and
1428
- * OM-derived config are consumed by the caller via `useContentConfig` and the individual
1429
- * page components, matching the `LeadGenSystemModule` pattern. `pages` is left unset
1430
- * here -- every page above renders its byte-identical default until a consumer supplies
1431
- * an override, most notably `pipelineWorkspace.renderProduce` for the `produce` tab slot.
1436
+ * `sidebar` wires in `ContentSidebar` (the two-entry nav). Page overrides and OM-derived
1437
+ * config are consumed by the caller via `useContentConfig` and the individual page
1438
+ * components, matching the `LeadGenSystemModule` pattern. `pages` is left unset here --
1439
+ * every page above renders its byte-identical default until a consumer supplies an
1440
+ * override.
1432
1441
  */
1433
1442
  declare const contentManifest: ContentSystemModule;
1434
1443
 
@@ -1560,6 +1569,19 @@ interface ContentReviewAction {
1560
1569
  feedbackPlaceholder?: string;
1561
1570
  /** Feedback below one non-whitespace character disables the modal's submit button. */
1562
1571
  feedbackRequired?: boolean;
1572
+ /**
1573
+ * Grades this action by consequence (proposal "grade actions by consequence" /
1574
+ * finding 10): publishing is irreversible and outward-facing -- the video pipeline's
1575
+ * Gate C says "never automate this one away" -- while approving a draft costs nothing
1576
+ * to undo. Defaults to `'standard'`, which reproduces today's rendering exactly
1577
+ * (`variant="light"`, no forced confirmation). `'irreversible'` renders the button
1578
+ * filled in `var(--color-warning)` (or `var(--color-error)` when `tone: 'danger'` is
1579
+ * also set) instead of light, and always gates behind a confirmation or feedback modal
1580
+ * carrying a standing warning line, even if the action itself set neither
1581
+ * `requiresConfirmation` nor `requiresFeedback` -- so a caller cannot accidentally ship
1582
+ * a one-click irreversible action.
1583
+ */
1584
+ consequence?: 'standard' | 'irreversible';
1563
1585
  }
1564
1586
  interface ReviewActionBarProps {
1565
1587
  /**
@@ -1595,8 +1617,12 @@ interface ContentFidelityCheck {
1595
1617
  note?: string;
1596
1618
  }
1597
1619
  interface ContentReviewCardProps {
1598
- /** Display handle -- `content_items.title` in the eventual schema. */
1599
- title: string;
1620
+ /**
1621
+ * Display handle -- `content_items.title` in the eventual schema. Omit it where the
1622
+ * surrounding page already carries the same identity as its heading; repeating it
1623
+ * inside the card puts the same sentence on screen twice.
1624
+ */
1625
+ title?: string;
1600
1626
  /** Presentational only; the caller decides what to render for each mode. */
1601
1627
  reviewMode: ReviewMode;
1602
1628
  /** The human's canonical, editable text. */
@@ -1646,6 +1672,36 @@ interface ContentReviewCardProps {
1646
1672
  */
1647
1673
  declare function ContentReviewCard({ title, body, onBodyChange, originalBody, onReset, payload, payloadFields, fidelity, checkFirst, hookOptions, closeOptions, onMoreHooks, onMoreCloses, alternatesRunning, alternatesElapsed, processingSteps, actions, onAction, actionsPending }: ContentReviewCardProps): react_jsx_runtime.JSX.Element;
1648
1674
 
1675
+ /** A single tenant-facing noun with singular and plural forms, e.g. `{ singular: 'Post', plural: 'Posts' }`. */
1676
+ interface ContentNoun {
1677
+ singular: string;
1678
+ plural: string;
1679
+ }
1680
+ /**
1681
+ * The shell's vocabulary for the content feature: what a tenant calls its content
1682
+ * items, where they get distributed, and the fixed labels around the pipeline and
1683
+ * board chrome. Every field defaults to the generic table-name-shaped label so a
1684
+ * tenant that has not declared a `vocabulary` block still gets a coherent shell.
1685
+ */
1686
+ interface ContentVocabulary {
1687
+ item: ContentNoun;
1688
+ distribution: ContentNoun;
1689
+ pipeline: ContentNoun;
1690
+ board: string;
1691
+ reviewQueue: string;
1692
+ }
1693
+ declare const DEFAULT_CONTENT_VOCABULARY: ContentVocabulary;
1694
+ /**
1695
+ * Reads the content System's declared vocabulary off `system.config.vocabulary` --
1696
+ * the same optional, tenant-authored slice of `config` that `getDefaultPipelineId`
1697
+ * already reads for `defaultPipelineId` in `useContentConfig.ts` (no schema change:
1698
+ * `config` is `Record<string, JsonValue>` and this is a second key on it). Merges over
1699
+ * `DEFAULT_CONTENT_VOCABULARY` field by field, so a partial declaration only overrides
1700
+ * what it actually names. `undefined` model, a missing `vocabulary` block, or any
1701
+ * wrongly-shaped value all resolve to the defaults -- this never throws.
1702
+ */
1703
+ declare function resolveContentVocabulary(model: OrganizationModel | undefined): ContentVocabulary;
1704
+
1649
1705
  interface ContentStepResourceBinding {
1650
1706
  /** The OM Resource id that runs this step. */
1651
1707
  resourceId: string;
@@ -1704,6 +1760,13 @@ interface ContentConfig {
1704
1760
  * configured" rather than throwing.
1705
1761
  */
1706
1762
  resolveStepResource: (step: Pick<ContentPipelineStepEntry, 'actionId'>) => ContentStepResourceBinding | undefined;
1763
+ /**
1764
+ * The tenant's declared vocabulary for the content shell -- item / distribution /
1765
+ * pipeline nouns and the fixed board labels. See {@link resolveContentVocabulary}.
1766
+ * Defaults to {@link DEFAULT_CONTENT_VOCABULARY} when the model or its `vocabulary`
1767
+ * declaration is absent, so consuming shell chrome never renders a blank label.
1768
+ */
1769
+ vocabulary: ContentVocabulary;
1707
1770
  }
1708
1771
  /**
1709
1772
  * `useContentConfig` is `useLeadGenConfig`'s twin for the content System: a pure
@@ -1722,13 +1785,83 @@ interface ContentConfig {
1722
1785
  */
1723
1786
  declare function useContentConfig(): ContentConfig;
1724
1787
 
1725
- interface ContentSidebarProps {
1726
- /** Replace the default `ContentSidebarMiddle` with custom middle content. Leave unset for the default layout. */
1727
- children?: ReactNode;
1788
+ /**
1789
+ * `deriveContentBoard` -- a pure function of `(items, pipeline, now)`. No React, no
1790
+ * hooks, no fetching. `content_items` has NO `step_key` column (only
1791
+ * `content_item_attempts` does), so an item's current step is derived from
1792
+ * `processingState`, whose declared shape is
1793
+ * `Record<stepKey, { status: 'success' | 'no_result' | 'skipped' | 'error'; data?: unknown }>`.
1794
+ *
1795
+ * Placement rule (implemented exactly as follows):
1796
+ *
1797
+ * 1. Sort the pipeline's steps ascending by `order`. Ties break by `key` so the result
1798
+ * is deterministic.
1799
+ * 2. An item's current step is the first step in that order whose `processingState`
1800
+ * entry is missing, or present with a status other than `'success'`. Rationale:
1801
+ * `processingState` records what has run; a step recorded `'success'` is behind the
1802
+ * item.
1803
+ * 3. If every declared step has a `'success'` entry, `stepKey` is `null` and the card
1804
+ * goes in `done`.
1805
+ * 4. If `processingState` is empty (`{}`), the item sits at the first step -- nothing
1806
+ * has run yet.
1807
+ * 5. A card goes in `unplaced` only when `processingState` is non-empty AND none of its
1808
+ * keys appear in the catalog. This is the honest bucket for an item produced against
1809
+ * a step catalog that has since changed; unplaced items are never silently dropped
1810
+ * into column 1.
1811
+ */
1812
+ interface ContentBoardCard {
1813
+ item: ContentItemResponse;
1814
+ /** Step key this item currently sits at. `null` when every declared step has succeeded. */
1815
+ stepKey: string | null;
1816
+ /** Milliseconds since `item.updatedAt`, measured against the `now` argument. */
1817
+ ageMs: number;
1818
+ /** True when this card is waiting on a person: its step's reviewMode is not 'none' and `reviewedAt` is null. */
1819
+ awaitingReview: boolean;
1820
+ }
1821
+ interface ContentBoardGate {
1822
+ /** The review mode of the step this gate follows. Never 'none' -- a 'none' step has no gate. */
1823
+ reviewMode: Exclude<ContentPipelineStepReviewMode, 'none'>;
1824
+ /** How many cards in the preceding column are awaiting review. */
1825
+ waitingCount: number;
1728
1826
  }
1729
- declare const ContentSidebar: ({ children }?: ContentSidebarProps) => react_jsx_runtime.JSX.Element;
1827
+ interface ContentBoardColumn {
1828
+ step: ContentPipelineStepEntry;
1829
+ cards: ContentBoardCard[];
1830
+ /** Present when this step's reviewMode is 'live' or 'queued'. Absent on a 'none' step. */
1831
+ gate?: ContentBoardGate;
1832
+ }
1833
+ interface ContentBoard {
1834
+ columns: ContentBoardColumn[];
1835
+ /** Cards whose every declared step succeeded. */
1836
+ done: ContentBoardCard[];
1837
+ /** Cards whose processingState names only step keys the catalog does not declare. */
1838
+ unplaced: ContentBoardCard[];
1839
+ /** True when the pipeline declares 0 or 1 steps -- the consumer renders pick-then-review, not columns. */
1840
+ isCollapsed: boolean;
1841
+ }
1842
+ declare function deriveContentBoard(items: ContentItemResponse[], pipeline: ContentPipelineTemplate, now: number): ContentBoard;
1730
1843
 
1731
- declare const ContentSidebarTop: () => react_jsx_runtime.JSX.Element;
1844
+ /**
1845
+ * `getContentItemIdentity` -- a pure function that names a content item for display when
1846
+ * `title` cannot be trusted to do it. The tenant `nirvana-marketing`'s drafts have no
1847
+ * titles at all, so a title-first surface renders an empty or meaningless column. A
1848
+ * post's identity is its opening line.
1849
+ *
1850
+ * Resolution order, first non-empty wins:
1851
+ * 1. First non-blank line of `item.body`.
1852
+ * 2. The first string-valued field of `item.payload`, taken in `payloadFields`
1853
+ * declaration order when that argument is supplied, otherwise `Object.keys` order.
1854
+ * Only a non-blank string value counts.
1855
+ * 3. `item.title`, when non-blank.
1856
+ * 4. The literal `'Untitled'`.
1857
+ *
1858
+ * The resolved candidate is then normalized: runs of whitespace collapse to one space,
1859
+ * the result is trimmed, and anything longer than `maxLength` is truncated at the last
1860
+ * word boundary at or before `maxLength` with a trailing `'…'` -- never mid-word.
1861
+ * The source complaint this fixes is titles clipped mid-word
1862
+ * (`MOCK Pipeline Walk S…`).
1863
+ */
1864
+ declare function getContentItemIdentity(item: Pick<ContentItemResponse, 'title' | 'body' | 'payload'>, payloadFields?: ContentPayloadFieldDeclaration[], maxLength?: number): string;
1732
1865
 
1733
1866
  /**
1734
1867
  * Shared nav-item shape used by feature sidebar middle components.
@@ -1762,12 +1895,63 @@ interface NavItem {
1762
1895
  exact: boolean;
1763
1896
  }
1764
1897
 
1898
+ interface ContentSidebarProps {
1899
+ /**
1900
+ * Tenant-authored authoring surfaces for the `Create` section, forwarded to
1901
+ * `ContentSidebarMiddle`. Ignored when `children` is supplied, since that replaces the
1902
+ * middle outright. This is the one-line path for a tenant adding its own creator:
1903
+ *
1904
+ * ```tsx
1905
+ * const sidebar = () => <ContentSidebar createItems={[{ label: 'Draft a Post', to: '/content/write', icon: IconPencil, exact: false }]} />
1906
+ * ```
1907
+ */
1908
+ createItems?: NavItem[];
1909
+ /** Replace the default `ContentSidebarMiddle` with custom middle content. Leave unset for the default layout. */
1910
+ children?: ReactNode;
1911
+ }
1912
+ declare const ContentSidebar: ({ createItems, children }?: ContentSidebarProps) => react_jsx_runtime.JSX.Element;
1913
+
1914
+ /**
1915
+ * Static two-entry default, built from {@link DEFAULT_CONTENT_VOCABULARY}. Exists for
1916
+ * consumers that spread it at module load time (see `extend-content.md`), where a
1917
+ * tenant's declared vocabulary isn't available. `ContentSidebarMiddle` itself renders
1918
+ * the live, vocabulary-aware version instead of this constant.
1919
+ */
1765
1920
  declare const CONTENT_ITEMS: NavItem[];
1766
1921
  interface ContentSidebarMiddleProps {
1767
- /** Override the default nav items. Defaults to {@link CONTENT_ITEMS}. */
1922
+ /**
1923
+ * Tenant-authored authoring surfaces, rendered under the `Create` section above the
1924
+ * pipeline nav. Empty or omitted -> the section renders its "nothing declared" hint
1925
+ * instead of nav entries; the section header itself is always present.
1926
+ *
1927
+ * This is the seam for a tenant's own content creator -- a LinkedIn drafting screen,
1928
+ * a brief builder, whatever the tenant authors -- without it having to restate the
1929
+ * pipeline entries. Prefer this over {@link ContentSidebarMiddleProps.items}, which
1930
+ * replaces the pipeline list wholesale and stops tracking the tenant's vocabulary.
1931
+ */
1932
+ createItems?: NavItem[];
1933
+ /** Override the pipeline nav items. Defaults to the two-entry nav built from the tenant's declared vocabulary. */
1768
1934
  items?: NavItem[];
1769
1935
  }
1770
- declare const ContentSidebarMiddle: ({ items }?: ContentSidebarMiddleProps) => react_jsx_runtime.JSX.Element;
1936
+ /**
1937
+ * The content subshell nav, in two labeled sections.
1938
+ *
1939
+ * `Create` sits on top and is where content gets made; the pipeline section below is
1940
+ * where it gets reviewed and tracked. The split exists because authoring is
1941
+ * tenant-specific by nature (every tenant writes a different kind of thing, through a
1942
+ * different screen) while the pipeline underneath is the same shared system for all of
1943
+ * them.
1944
+ *
1945
+ * **Both section labels are fixed platform vocabulary, not tenant-declared.** The nav
1946
+ * entries inside them still are — a tenant that renames its pipelines to "Campaigns"
1947
+ * gets `Content Pipeline > Campaigns`. The sections name the two halves of the System
1948
+ * itself, which every tenant has; only what they contain varies.
1949
+ *
1950
+ * There is deliberately no section header above `Create`: the subshell is already
1951
+ * reached through the `Content` nav entry, so a third `Content` header only repeated
1952
+ * what the breadcrumb and the left rail both already say.
1953
+ */
1954
+ declare const ContentSidebarMiddle: ({ createItems, items }?: ContentSidebarMiddleProps) => react_jsx_runtime.JSX.Element;
1771
1955
 
1772
1956
  interface MyReviewQueuePanelProps {
1773
1957
  onItemClick: (itemId: string) => void;
@@ -1775,14 +1959,20 @@ interface MyReviewQueuePanelProps {
1775
1959
  showSectionLabel?: boolean;
1776
1960
  }
1777
1961
  /**
1778
- * `MyReviewQueue` -- mirrors `MyTasksPanel` for the content System's sidebar workbench.
1962
+ * `MyReviewQueue` -- mirrors `MyTasksPanel` for the content System's sidebar workbench,
1963
+ * and is the review queue's second way in (usability review Proposal, Decision 3): a
1964
+ * cross-pipeline "what needs review" view rather than a panel beside a table browser.
1779
1965
  *
1780
1966
  * The `/content/items` route accepts no "pending review" filter (only `reviewedBy`, not
1781
1967
  * a reviewed/unreviewed flag), so this fetches a page of items and filters to
1782
1968
  * `reviewedAt === null` client-side. A future backend addition could push this
1783
1969
  * server-side; documenting the gap here rather than silently over-claiming precision.
1970
+ *
1971
+ * Rows are ordered oldest-first by `updatedAt` -- finding 6 is that nothing on the
1972
+ * screen ages, and the operational question is always what has been sitting the
1973
+ * longest.
1784
1974
  */
1785
1975
  declare function MyReviewQueuePanel({ onItemClick, onSeeAll, showSectionLabel }: MyReviewQueuePanelProps): react_jsx_runtime.JSX.Element;
1786
1976
 
1787
- export { AlternatesPanel, CONTENT_ITEMS, ContentDistributionDetailPage, ContentDistributionsPage, ContentItemReviewPage, ContentItemsPage, ContentOverviewPage, ContentPipelineWorkspacePage, ContentPipelinesPage, ContentReviewCard, ContentSettingsPage, ContentSidebar, ContentSidebarMiddle, ContentSidebarTop, MyReviewQueuePanel, PayloadBody, ProcessingStateStrip, ReviewActionBar, contentManifest, firstLine, formatElapsed, lastLine, resolveContentStepResource, swapFirstLine, swapLastLine, useContentConfig };
1788
- export type { AlternatesPanelProps, ContentAlternateOption, ContentConfig, ContentDistributionDetailPageSlots, ContentDistributionsPageSlots, ContentFidelityCheck, ContentItemReviewPageSlots, ContentItemsPageSlots, ContentOverviewPageSlots, ContentPayloadField, ContentPipelineWorkspacePageSlots, ContentPipelinesPageSlots, ContentProcessingStatus, ContentProcessingStep, ContentProduceSlotProps, ContentReviewAction, ContentReviewCardProps, ContentSettingsPageSlots, ContentSidebarMiddleProps, ContentSidebarProps, ContentStepResourceBinding, MyReviewQueuePanelProps, PayloadBodyProps, ProcessingStateStripProps, ReviewActionBarProps, ReviewMode };
1977
+ export { AlternatesPanel, CONTENT_ITEMS, ContentDistributionDetailPage, ContentDistributionsPage, ContentItemReviewPage, ContentItemsPage, ContentOverviewPage, ContentPipelineWorkspacePage, ContentPipelinesPage, ContentReviewCard, ContentSidebar, ContentSidebarMiddle, DEFAULT_CONTENT_VOCABULARY, MyReviewQueuePanel, PayloadBody, ProcessingStateStrip, ReviewActionBar, contentManifest, deriveContentBoard, firstLine, formatElapsed, getContentItemIdentity, lastLine, resolveContentStepResource, resolveContentVocabulary, swapFirstLine, swapLastLine, useContentConfig };
1978
+ export type { AlternatesPanelProps, ContentAlternateOption, ContentBoard, ContentBoardCard, ContentBoardColumn, ContentBoardGate, ContentConfig, ContentDistributionDetailPageSlots, ContentDistributionsPageSlots, ContentFidelityCheck, ContentItemReviewPageSlots, ContentItemsPageSlots, ContentNoun, ContentOverviewPageSlots, ContentPayloadField, ContentPipelineWorkspacePageSlots, ContentPipelinesPageSlots, ContentProcessingStatus, ContentProcessingStep, ContentReviewAction, ContentReviewCardProps, ContentSidebarMiddleProps, ContentSidebarProps, ContentStepResourceBinding, ContentVocabulary, MyReviewQueuePanelProps, PayloadBodyProps, ProcessingStateStripProps, ReviewActionBarProps, ReviewMode };