@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.
- package/dist/app/index.js +7 -7
- package/dist/auth/index.css +149 -149
- package/dist/auth/index.js +3 -3
- package/dist/charts/index.css +208 -208
- package/dist/charts/index.js +3 -3
- package/dist/{chunk-ZD6LM53O.js → chunk-5C62IRKS.js} +2 -2
- package/dist/{chunk-WXHAHKKI.js → chunk-6TT3FQEZ.js} +16204 -16039
- package/dist/{chunk-MFLM7BVC.js → chunk-AGX2CY2O.js} +1 -1
- package/dist/{chunk-IRV6KJPV.js → chunk-CCZJ4OWY.js} +1 -1
- package/dist/{chunk-XAZR3T6Y.js → chunk-DUEGHF7A.js} +3 -3
- package/dist/{chunk-NU3NBXHP.js → chunk-GJQF3S2Q.js} +1 -1
- package/dist/{chunk-YNRYIXUT.js → chunk-GZADST64.js} +6 -6
- package/dist/{chunk-YCRINA2D.js → chunk-JA2XDMAE.js} +1 -1
- package/dist/{chunk-6PZFOHJK.js → chunk-LWYLZUUV.js} +2 -2
- package/dist/{chunk-7WJEPTE7.js → chunk-LY3IKYTZ.js} +1 -1
- package/dist/{chunk-RW64UJWT.js → chunk-MFCV4JMQ.js} +2 -2
- package/dist/{chunk-IT7GTJCB.js → chunk-QDMIFD6F.js} +1 -1
- package/dist/{chunk-FLECOYUS.js → chunk-R6NMRXNO.js} +1 -1
- package/dist/{chunk-XQ3ILKYN.js → chunk-SMH6SQQE.js} +1 -1
- package/dist/{chunk-MRVGQLWN.js → chunk-TJMZUL6E.js} +1 -1
- package/dist/{chunk-YGCMMOY4.js → chunk-XKUEO4HG.js} +695 -73
- package/dist/{chunk-4JHLS234.js → chunk-ZFISGKYW.js} +1 -1
- package/dist/components/index.css +208 -208
- package/dist/components/index.js +24 -25
- package/dist/components/navigation/index.css +149 -149
- package/dist/components/navigation/index.js +4 -4
- package/dist/features/auth/index.css +149 -149
- package/dist/features/auth/index.js +5 -5
- package/dist/features/clients/index.css +208 -208
- package/dist/features/clients/index.js +4 -4
- package/dist/features/content/index.d.ts +238 -48
- package/dist/features/content/index.js +542 -410
- package/dist/features/crm/index.js +5 -5
- package/dist/features/dashboard/index.js +6 -7
- package/dist/features/delivery/index.css +149 -149
- package/dist/features/delivery/index.js +4 -4
- package/dist/features/knowledge/index.css +149 -149
- package/dist/features/knowledge/index.js +3 -3
- package/dist/features/lead-gen/index.js +5 -5
- package/dist/features/monitoring/index.css +149 -149
- package/dist/features/monitoring/index.js +6 -6
- package/dist/features/monitoring/requests/index.js +4 -4
- package/dist/features/operations/index.js +9 -10
- package/dist/features/settings/index.js +6 -6
- package/dist/hooks/access/index.css +149 -149
- package/dist/hooks/access/index.js +3 -3
- package/dist/hooks/index.css +149 -149
- package/dist/hooks/index.d.ts +2 -60
- package/dist/hooks/index.js +3 -3
- package/dist/hooks/published.css +149 -149
- package/dist/hooks/published.d.ts +2 -60
- package/dist/hooks/published.js +3 -3
- package/dist/knowledge/index.css +149 -149
- package/dist/knowledge/index.js +7 -7
- package/dist/layout/index.css +149 -149
- package/dist/layout/index.js +6 -6
- package/dist/provider/index.js +3 -3
- package/dist/provider/published.css +149 -149
- package/dist/provider/published.js +3 -3
- package/dist/theme/index.js +3 -3
- package/dist/theme/presets/index.js +1 -1
- package/package.json +3 -3
- package/dist/chunk-ZPTEGGKU.js +0 -631
- /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
|
|
1330
|
-
* / `sources` / `produce` / `runs`.
|
|
1360
|
+
* (`../../../lead-gen/pages/list-detail/ListDetailPage.tsx`) already does it.
|
|
1331
1361
|
*/
|
|
1332
|
-
declare function ContentPipelineWorkspacePage({ pipelineId, headerActions
|
|
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
|
|
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` (
|
|
1428
|
-
*
|
|
1429
|
-
*
|
|
1430
|
-
*
|
|
1431
|
-
*
|
|
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
|
-
/**
|
|
1599
|
-
|
|
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
|
-
|
|
1726
|
-
|
|
1727
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
/**
|
|
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
|
-
|
|
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,
|
|
1788
|
-
export type { AlternatesPanelProps, ContentAlternateOption, ContentConfig, ContentDistributionDetailPageSlots, ContentDistributionsPageSlots, ContentFidelityCheck, ContentItemReviewPageSlots, ContentItemsPageSlots, ContentOverviewPageSlots, ContentPayloadField, ContentPipelineWorkspacePageSlots, ContentPipelinesPageSlots, ContentProcessingStatus, ContentProcessingStep,
|
|
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 };
|