@elevasis/ui 2.69.0 → 2.71.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.d.ts +26 -0
- 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-6PZFOHJK.js → chunk-3BLYJT5L.js} +2 -2
- package/dist/{chunk-IT7GTJCB.js → chunk-AIOV5NM7.js} +1 -1
- package/dist/{chunk-MRVGQLWN.js → chunk-BM2WKRAQ.js} +1 -1
- package/dist/{chunk-XAZR3T6Y.js → chunk-CPBT6Z2G.js} +3 -3
- package/dist/{chunk-XQ3ILKYN.js → chunk-DCMFNSJ6.js} +1 -1
- package/dist/{chunk-NU3NBXHP.js → chunk-DH2MO5DX.js} +1 -1
- package/dist/{chunk-ZD6LM53O.js → chunk-H3SDGC5F.js} +2 -2
- package/dist/{chunk-YGCMMOY4.js → chunk-JTSNU6KA.js} +695 -73
- package/dist/{chunk-7WJEPTE7.js → chunk-LL5H7J4N.js} +1 -1
- package/dist/{chunk-FLECOYUS.js → chunk-R6NMRXNO.js} +1 -1
- package/dist/{chunk-MFLM7BVC.js → chunk-TB2PM2OU.js} +1 -1
- package/dist/{chunk-IRV6KJPV.js → chunk-TCQZ4AJI.js} +1 -1
- package/dist/{chunk-YNRYIXUT.js → chunk-TVFSVTRG.js} +6 -6
- package/dist/{chunk-WXHAHKKI.js → chunk-UZ7MSORW.js} +16291 -16029
- package/dist/{chunk-RW64UJWT.js → chunk-VHPHWTX7.js} +2 -2
- package/dist/{chunk-YCRINA2D.js → chunk-VRRIHA3S.js} +1 -1
- package/dist/{chunk-4JHLS234.js → chunk-ZFISGKYW.js} +1 -1
- package/dist/components/index.css +208 -208
- package/dist/components/index.d.ts +59 -3
- 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.d.ts +26 -0
- 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 +258 -51
- package/dist/features/content/index.js +595 -421
- package/dist/features/crm/index.d.ts +26 -0
- 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.d.ts +26 -0
- 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.d.ts +33 -3
- 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.d.ts +26 -0
- 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/delivery/index.d.ts +26 -0
- package/dist/hooks/index.css +149 -149
- package/dist/hooks/index.d.ts +296 -65
- package/dist/hooks/index.js +3 -3
- package/dist/hooks/published.css +149 -149
- package/dist/hooks/published.d.ts +296 -65
- package/dist/hooks/published.js +3 -3
- package/dist/initialization/index.d.ts +26 -0
- 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/profile/index.d.ts +26 -0
- package/dist/provider/index.d.ts +26 -0
- package/dist/provider/index.js +3 -3
- package/dist/provider/published.css +149 -149
- package/dist/provider/published.d.ts +26 -0
- package/dist/provider/published.js +3 -3
- package/dist/supabase/index.d.ts +50 -0
- package/dist/theme/index.js +3 -3
- package/dist/theme/presets/index.js +1 -1
- package/dist/types/index.d.ts +59 -3
- package/package.json +5 -5
- package/dist/chunk-ZPTEGGKU.js +0 -631
- /package/dist/{chunk-XQBURFKM.js → chunk-RBGVNPA6.js} +0 -0
|
@@ -1251,6 +1251,124 @@ 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
|
+
running: "running";
|
|
1270
|
+
no_result: "no_result";
|
|
1271
|
+
skipped: "skipped";
|
|
1272
|
+
}>;
|
|
1273
|
+
attemptId: z.ZodString;
|
|
1274
|
+
executionId: z.ZodNullable<z.ZodString>;
|
|
1275
|
+
attemptedAt: z.ZodString;
|
|
1276
|
+
data: z.ZodOptional<z.ZodUnknown>;
|
|
1277
|
+
}, z.core.$loose>>;
|
|
1278
|
+
reviewedAt: z.ZodNullable<z.ZodString>;
|
|
1279
|
+
reviewedBy: z.ZodNullable<z.ZodString>;
|
|
1280
|
+
reviewerFeedback: z.ZodNullable<z.ZodString>;
|
|
1281
|
+
rejectReason: z.ZodNullable<z.ZodString>;
|
|
1282
|
+
createdBy: z.ZodNullable<z.ZodString>;
|
|
1283
|
+
updatedBy: z.ZodNullable<z.ZodString>;
|
|
1284
|
+
createdAt: z.ZodString;
|
|
1285
|
+
updatedAt: z.ZodString;
|
|
1286
|
+
}, z.core.$strip>;
|
|
1287
|
+
type ContentItemResponse = z.infer<typeof ContentItemResponseSchema>;
|
|
1288
|
+
|
|
1289
|
+
/**
|
|
1290
|
+
* `deriveContentBoard` -- a pure function of `(items, pipeline, now)`. No React, no
|
|
1291
|
+
* hooks, no fetching. `content_items` has NO `step_key` column (only
|
|
1292
|
+
* `content_item_attempts` does), so an item's current step is derived from
|
|
1293
|
+
* `processingState`, whose declared shape is
|
|
1294
|
+
* `Record<stepKey, { status: 'running' | 'success' | 'no_result' | 'skipped' | 'error';
|
|
1295
|
+
* attemptId: string; executionId: string | null; attemptedAt: string; data?: unknown }>`.
|
|
1296
|
+
* `'running'` (added 2026-08-14, the step-state model) is the only in-flight value;
|
|
1297
|
+
* every other member is terminal.
|
|
1298
|
+
*
|
|
1299
|
+
* Placement rule (implemented exactly as follows):
|
|
1300
|
+
*
|
|
1301
|
+
* 1. Sort the pipeline's steps ascending by `order`. Ties break by `key` so the result
|
|
1302
|
+
* is deterministic.
|
|
1303
|
+
* 2. An item's current step is the first step in that order whose `processingState`
|
|
1304
|
+
* entry is missing, or present with a status other than `'success'`. Rationale:
|
|
1305
|
+
* `processingState` records what has run; a step recorded `'success'` is behind the
|
|
1306
|
+
* item -- `'running'` falls out of this rule unchanged: a step mid-flight is not
|
|
1307
|
+
* `'success'`, so it holds the item at that column exactly like `'error'` or
|
|
1308
|
+
* `'skipped'` already do.
|
|
1309
|
+
* 3. If every declared step has a `'success'` entry, `stepKey` is `null` and the card
|
|
1310
|
+
* goes in `done`.
|
|
1311
|
+
* 4. If `processingState` is empty (`{}`), the item sits at the first step -- nothing
|
|
1312
|
+
* has run yet.
|
|
1313
|
+
* 5. A card goes in `unplaced` only when `processingState` is non-empty AND none of its
|
|
1314
|
+
* keys appear in the catalog. This is the honest bucket for an item produced against
|
|
1315
|
+
* a step catalog that has since changed; unplaced items are never silently dropped
|
|
1316
|
+
* into column 1.
|
|
1317
|
+
*/
|
|
1318
|
+
interface ContentBoardCard {
|
|
1319
|
+
item: ContentItemResponse;
|
|
1320
|
+
/** Step key this item currently sits at. `null` when every declared step has succeeded. */
|
|
1321
|
+
stepKey: string | null;
|
|
1322
|
+
/** Milliseconds since `item.updatedAt`, measured against the `now` argument. */
|
|
1323
|
+
ageMs: number;
|
|
1324
|
+
/** True when this card is waiting on a person: its step's reviewMode is not 'none' and `reviewedAt` is null. */
|
|
1325
|
+
awaitingReview: boolean;
|
|
1326
|
+
}
|
|
1327
|
+
interface ContentBoardGate {
|
|
1328
|
+
/** The review mode of the step this gate follows. Never 'none' -- a 'none' step has no gate. */
|
|
1329
|
+
reviewMode: Exclude<ContentPipelineStepReviewMode, 'none'>;
|
|
1330
|
+
/** How many cards in the preceding column are awaiting review. */
|
|
1331
|
+
waitingCount: number;
|
|
1332
|
+
}
|
|
1333
|
+
interface ContentBoardColumn {
|
|
1334
|
+
step: ContentPipelineStepEntry;
|
|
1335
|
+
cards: ContentBoardCard[];
|
|
1336
|
+
/** Present when this step's reviewMode is 'live' or 'queued'. Absent on a 'none' step. */
|
|
1337
|
+
gate?: ContentBoardGate;
|
|
1338
|
+
}
|
|
1339
|
+
interface ContentBoard {
|
|
1340
|
+
columns: ContentBoardColumn[];
|
|
1341
|
+
/** Cards whose every declared step succeeded. */
|
|
1342
|
+
done: ContentBoardCard[];
|
|
1343
|
+
/** Cards whose processingState names only step keys the catalog does not declare. */
|
|
1344
|
+
unplaced: ContentBoardCard[];
|
|
1345
|
+
/** True when the pipeline declares 0 or 1 steps -- the consumer renders pick-then-review, not columns. */
|
|
1346
|
+
isCollapsed: boolean;
|
|
1347
|
+
}
|
|
1348
|
+
declare function deriveContentBoard(items: ContentItemResponse[], pipeline: ContentPipelineTemplate, now: number): ContentBoard;
|
|
1349
|
+
|
|
1350
|
+
/**
|
|
1351
|
+
* `getContentItemIdentity` -- a pure function that names a content item for display when
|
|
1352
|
+
* `title` cannot be trusted to do it. The tenant `nirvana-marketing`'s drafts have no
|
|
1353
|
+
* titles at all, so a title-first surface renders an empty or meaningless column. A
|
|
1354
|
+
* post's identity is its opening line.
|
|
1355
|
+
*
|
|
1356
|
+
* Resolution order, first non-empty wins:
|
|
1357
|
+
* 1. First non-blank line of `item.body`.
|
|
1358
|
+
* 2. The first string-valued field of `item.payload`, taken in `payloadFields`
|
|
1359
|
+
* declaration order when that argument is supplied, otherwise `Object.keys` order.
|
|
1360
|
+
* Only a non-blank string value counts.
|
|
1361
|
+
* 3. `item.title`, when non-blank.
|
|
1362
|
+
* 4. The literal `'Untitled'`.
|
|
1363
|
+
*
|
|
1364
|
+
* The resolved candidate is then normalized: runs of whitespace collapse to one space,
|
|
1365
|
+
* the result is trimmed, and anything longer than `maxLength` is truncated at the last
|
|
1366
|
+
* word boundary at or before `maxLength` with a trailing `'…'` -- never mid-word.
|
|
1367
|
+
* The source complaint this fixes is titles clipped mid-word
|
|
1368
|
+
* (`MOCK Pipeline Walk S…`).
|
|
1369
|
+
*/
|
|
1370
|
+
declare function getContentItemIdentity(item: Pick<ContentItemResponse, 'title' | 'body' | 'payload'>, payloadFields?: ContentPayloadFieldDeclaration[], maxLength?: number): string;
|
|
1371
|
+
|
|
1254
1372
|
type SystemSidebarComponent = ComponentType;
|
|
1255
1373
|
type SystemIconComponent = ComponentType<{
|
|
1256
1374
|
size?: number;
|
|
@@ -1293,6 +1411,12 @@ interface ContentItemsPageSlots {
|
|
|
1293
1411
|
/** Optional content rendered after the page title. Default: nothing rendered. */
|
|
1294
1412
|
headerActions?: ReactNode;
|
|
1295
1413
|
}
|
|
1414
|
+
/**
|
|
1415
|
+
* Flat, cross-pipeline items report -- kept as a reachable filtered view rather than
|
|
1416
|
+
* primary navigation (usability review Proposal, Decision 3; finding 1). The sidebar's
|
|
1417
|
+
* review-queue nav entry links here with `?review=pending`; `MyReviewQueuePanel`'s
|
|
1418
|
+
* "See all" does the same.
|
|
1419
|
+
*/
|
|
1296
1420
|
declare function ContentItemsPage({ headerActions }?: ContentItemsPageSlots): react_jsx_runtime.JSX.Element;
|
|
1297
1421
|
|
|
1298
1422
|
interface ContentItemReviewPageSlots {
|
|
@@ -1314,44 +1438,18 @@ interface ContentPipelinesPageSlots {
|
|
|
1314
1438
|
*/
|
|
1315
1439
|
declare function ContentPipelinesPage({ headerActions }?: ContentPipelinesPageSlots): react_jsx_runtime.JSX.Element;
|
|
1316
1440
|
|
|
1317
|
-
interface ContentProduceSlotProps {
|
|
1318
|
-
pipeline: ContentPipelineTemplate;
|
|
1319
|
-
}
|
|
1320
|
-
|
|
1321
1441
|
interface ContentPipelineWorkspacePageSlots {
|
|
1322
1442
|
/** Optional content rendered after the page title. Default: nothing rendered. */
|
|
1323
1443
|
headerActions?: ReactNode;
|
|
1324
|
-
/** Overrides the `produce` tab's default content. See `ProduceTabProps.render`. */
|
|
1325
|
-
renderProduce?: (props: ContentProduceSlotProps) => ReactNode;
|
|
1326
1444
|
}
|
|
1327
1445
|
/**
|
|
1328
1446
|
* Pipeline workspace -- tabbed via `?tab=`, matching how `LeadGenListDetailPage`
|
|
1329
|
-
* (`../../../lead-gen/pages/list-detail/ListDetailPage.tsx`) already does it
|
|
1330
|
-
* / `sources` / `produce` / `runs`.
|
|
1447
|
+
* (`../../../lead-gen/pages/list-detail/ListDetailPage.tsx`) already does it.
|
|
1331
1448
|
*/
|
|
1332
|
-
declare function ContentPipelineWorkspacePage({ pipelineId, headerActions
|
|
1449
|
+
declare function ContentPipelineWorkspacePage({ pipelineId, headerActions }: {
|
|
1333
1450
|
pipelineId: string;
|
|
1334
1451
|
} & ContentPipelineWorkspacePageSlots): react_jsx_runtime.JSX.Element;
|
|
1335
1452
|
|
|
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
1453
|
interface ContentDistributionsPageSlots {
|
|
1356
1454
|
/** Optional content rendered after the page title. Default: nothing rendered. */
|
|
1357
1455
|
headerActions?: ReactNode;
|
|
@@ -1403,10 +1501,8 @@ interface ContentPageOverrides {
|
|
|
1403
1501
|
itemReview?: ContentItemReviewPageSlots;
|
|
1404
1502
|
/** Slot props injected into `ContentPipelinesPage`. */
|
|
1405
1503
|
pipelines?: ContentPipelinesPageSlots;
|
|
1406
|
-
/** Slot props
|
|
1504
|
+
/** Slot props injected into `ContentPipelineWorkspacePage`. */
|
|
1407
1505
|
pipelineWorkspace?: ContentPipelineWorkspacePageSlots;
|
|
1408
|
-
/** Slot props injected into `ContentSettingsPage`. */
|
|
1409
|
-
settings?: ContentSettingsPageSlots;
|
|
1410
1506
|
}
|
|
1411
1507
|
/**
|
|
1412
1508
|
* Extended `SystemModule` for the content feature that carries optional page overrides
|
|
@@ -1424,11 +1520,11 @@ interface ContentSystemModule extends SystemModule {
|
|
|
1424
1520
|
* plain string matching the System path rather than an import from `@repo/core/content`
|
|
1425
1521
|
* or the OM System declaration -- this package stays data-free by design (D6).
|
|
1426
1522
|
*
|
|
1427
|
-
* `sidebar` wires in `ContentSidebar` (
|
|
1428
|
-
*
|
|
1429
|
-
*
|
|
1430
|
-
*
|
|
1431
|
-
*
|
|
1523
|
+
* `sidebar` wires in `ContentSidebar` (the two-entry nav). Page overrides and OM-derived
|
|
1524
|
+
* config are consumed by the caller via `useContentConfig` and the individual page
|
|
1525
|
+
* components, matching the `LeadGenSystemModule` pattern. `pages` is left unset here --
|
|
1526
|
+
* every page above renders its byte-identical default until a consumer supplies an
|
|
1527
|
+
* override.
|
|
1432
1528
|
*/
|
|
1433
1529
|
declare const contentManifest: ContentSystemModule;
|
|
1434
1530
|
|
|
@@ -1560,6 +1656,27 @@ interface ContentReviewAction {
|
|
|
1560
1656
|
feedbackPlaceholder?: string;
|
|
1561
1657
|
/** Feedback below one non-whitespace character disables the modal's submit button. */
|
|
1562
1658
|
feedbackRequired?: boolean;
|
|
1659
|
+
/**
|
|
1660
|
+
* Grades this action by consequence (proposal "grade actions by consequence" /
|
|
1661
|
+
* finding 10): publishing is irreversible and outward-facing -- the video pipeline's
|
|
1662
|
+
* Gate C says "never automate this one away" -- while approving a draft costs nothing
|
|
1663
|
+
* to undo. Defaults to `'standard'`, which reproduces today's rendering exactly
|
|
1664
|
+
* (`variant="light"`, no forced confirmation). `'irreversible'` renders the button
|
|
1665
|
+
* filled in `var(--color-warning)` (or `var(--color-error)` when `tone: 'danger'` is
|
|
1666
|
+
* also set) instead of light, and always gates behind a confirmation or feedback modal
|
|
1667
|
+
* carrying a standing warning line, even if the action itself set neither
|
|
1668
|
+
* `requiresConfirmation` nor `requiresFeedback` -- so a caller cannot accidentally ship
|
|
1669
|
+
* a one-click irreversible action.
|
|
1670
|
+
*/
|
|
1671
|
+
consequence?: 'standard' | 'irreversible';
|
|
1672
|
+
/**
|
|
1673
|
+
* Disables this action's button -- e.g. the item has no open review gate to clear.
|
|
1674
|
+
* Renders inert rather than firing a call that the server rejects. Pair with
|
|
1675
|
+
* `disabledReason` so the reviewer sees why, not just a greyed-out button.
|
|
1676
|
+
*/
|
|
1677
|
+
disabled?: boolean;
|
|
1678
|
+
/** Shown in a Tooltip over the button while `disabled` is true. */
|
|
1679
|
+
disabledReason?: string;
|
|
1563
1680
|
}
|
|
1564
1681
|
interface ReviewActionBarProps {
|
|
1565
1682
|
/**
|
|
@@ -1595,8 +1712,12 @@ interface ContentFidelityCheck {
|
|
|
1595
1712
|
note?: string;
|
|
1596
1713
|
}
|
|
1597
1714
|
interface ContentReviewCardProps {
|
|
1598
|
-
/**
|
|
1599
|
-
|
|
1715
|
+
/**
|
|
1716
|
+
* Display handle -- `content_items.title` in the eventual schema. Omit it where the
|
|
1717
|
+
* surrounding page already carries the same identity as its heading; repeating it
|
|
1718
|
+
* inside the card puts the same sentence on screen twice.
|
|
1719
|
+
*/
|
|
1720
|
+
title?: string;
|
|
1600
1721
|
/** Presentational only; the caller decides what to render for each mode. */
|
|
1601
1722
|
reviewMode: ReviewMode;
|
|
1602
1723
|
/** The human's canonical, editable text. */
|
|
@@ -1646,6 +1767,36 @@ interface ContentReviewCardProps {
|
|
|
1646
1767
|
*/
|
|
1647
1768
|
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
1769
|
|
|
1770
|
+
/** A single tenant-facing noun with singular and plural forms, e.g. `{ singular: 'Post', plural: 'Posts' }`. */
|
|
1771
|
+
interface ContentNoun {
|
|
1772
|
+
singular: string;
|
|
1773
|
+
plural: string;
|
|
1774
|
+
}
|
|
1775
|
+
/**
|
|
1776
|
+
* The shell's vocabulary for the content feature: what a tenant calls its content
|
|
1777
|
+
* items, where they get distributed, and the fixed labels around the pipeline and
|
|
1778
|
+
* board chrome. Every field defaults to the generic table-name-shaped label so a
|
|
1779
|
+
* tenant that has not declared a `vocabulary` block still gets a coherent shell.
|
|
1780
|
+
*/
|
|
1781
|
+
interface ContentVocabulary {
|
|
1782
|
+
item: ContentNoun;
|
|
1783
|
+
distribution: ContentNoun;
|
|
1784
|
+
pipeline: ContentNoun;
|
|
1785
|
+
board: string;
|
|
1786
|
+
reviewQueue: string;
|
|
1787
|
+
}
|
|
1788
|
+
declare const DEFAULT_CONTENT_VOCABULARY: ContentVocabulary;
|
|
1789
|
+
/**
|
|
1790
|
+
* Reads the content System's declared vocabulary off `system.config.vocabulary` --
|
|
1791
|
+
* the same optional, tenant-authored slice of `config` that `getDefaultPipelineId`
|
|
1792
|
+
* already reads for `defaultPipelineId` in `useContentConfig.ts` (no schema change:
|
|
1793
|
+
* `config` is `Record<string, JsonValue>` and this is a second key on it). Merges over
|
|
1794
|
+
* `DEFAULT_CONTENT_VOCABULARY` field by field, so a partial declaration only overrides
|
|
1795
|
+
* what it actually names. `undefined` model, a missing `vocabulary` block, or any
|
|
1796
|
+
* wrongly-shaped value all resolve to the defaults -- this never throws.
|
|
1797
|
+
*/
|
|
1798
|
+
declare function resolveContentVocabulary(model: OrganizationModel | undefined): ContentVocabulary;
|
|
1799
|
+
|
|
1649
1800
|
interface ContentStepResourceBinding {
|
|
1650
1801
|
/** The OM Resource id that runs this step. */
|
|
1651
1802
|
resourceId: string;
|
|
@@ -1704,6 +1855,13 @@ interface ContentConfig {
|
|
|
1704
1855
|
* configured" rather than throwing.
|
|
1705
1856
|
*/
|
|
1706
1857
|
resolveStepResource: (step: Pick<ContentPipelineStepEntry, 'actionId'>) => ContentStepResourceBinding | undefined;
|
|
1858
|
+
/**
|
|
1859
|
+
* The tenant's declared vocabulary for the content shell -- item / distribution /
|
|
1860
|
+
* pipeline nouns and the fixed board labels. See {@link resolveContentVocabulary}.
|
|
1861
|
+
* Defaults to {@link DEFAULT_CONTENT_VOCABULARY} when the model or its `vocabulary`
|
|
1862
|
+
* declaration is absent, so consuming shell chrome never renders a blank label.
|
|
1863
|
+
*/
|
|
1864
|
+
vocabulary: ContentVocabulary;
|
|
1707
1865
|
}
|
|
1708
1866
|
/**
|
|
1709
1867
|
* `useContentConfig` is `useLeadGenConfig`'s twin for the content System: a pure
|
|
@@ -1722,14 +1880,6 @@ interface ContentConfig {
|
|
|
1722
1880
|
*/
|
|
1723
1881
|
declare function useContentConfig(): ContentConfig;
|
|
1724
1882
|
|
|
1725
|
-
interface ContentSidebarProps {
|
|
1726
|
-
/** Replace the default `ContentSidebarMiddle` with custom middle content. Leave unset for the default layout. */
|
|
1727
|
-
children?: ReactNode;
|
|
1728
|
-
}
|
|
1729
|
-
declare const ContentSidebar: ({ children }?: ContentSidebarProps) => react_jsx_runtime.JSX.Element;
|
|
1730
|
-
|
|
1731
|
-
declare const ContentSidebarTop: () => react_jsx_runtime.JSX.Element;
|
|
1732
|
-
|
|
1733
1883
|
/**
|
|
1734
1884
|
* Shared nav-item shape used by feature sidebar middle components.
|
|
1735
1885
|
*
|
|
@@ -1762,12 +1912,63 @@ interface NavItem {
|
|
|
1762
1912
|
exact: boolean;
|
|
1763
1913
|
}
|
|
1764
1914
|
|
|
1915
|
+
interface ContentSidebarProps {
|
|
1916
|
+
/**
|
|
1917
|
+
* Tenant-authored authoring surfaces for the `Create` section, forwarded to
|
|
1918
|
+
* `ContentSidebarMiddle`. Ignored when `children` is supplied, since that replaces the
|
|
1919
|
+
* middle outright. This is the one-line path for a tenant adding its own creator:
|
|
1920
|
+
*
|
|
1921
|
+
* ```tsx
|
|
1922
|
+
* const sidebar = () => <ContentSidebar createItems={[{ label: 'Draft a Post', to: '/content/write', icon: IconPencil, exact: false }]} />
|
|
1923
|
+
* ```
|
|
1924
|
+
*/
|
|
1925
|
+
createItems?: NavItem[];
|
|
1926
|
+
/** Replace the default `ContentSidebarMiddle` with custom middle content. Leave unset for the default layout. */
|
|
1927
|
+
children?: ReactNode;
|
|
1928
|
+
}
|
|
1929
|
+
declare const ContentSidebar: ({ createItems, children }?: ContentSidebarProps) => react_jsx_runtime.JSX.Element;
|
|
1930
|
+
|
|
1931
|
+
/**
|
|
1932
|
+
* Static two-entry default, built from {@link DEFAULT_CONTENT_VOCABULARY}. Exists for
|
|
1933
|
+
* consumers that spread it at module load time (see `extend-content.md`), where a
|
|
1934
|
+
* tenant's declared vocabulary isn't available. `ContentSidebarMiddle` itself renders
|
|
1935
|
+
* the live, vocabulary-aware version instead of this constant.
|
|
1936
|
+
*/
|
|
1765
1937
|
declare const CONTENT_ITEMS: NavItem[];
|
|
1766
1938
|
interface ContentSidebarMiddleProps {
|
|
1767
|
-
/**
|
|
1939
|
+
/**
|
|
1940
|
+
* Tenant-authored authoring surfaces, rendered under the `Create` section above the
|
|
1941
|
+
* pipeline nav. Empty or omitted -> the section renders its "nothing declared" hint
|
|
1942
|
+
* instead of nav entries; the section header itself is always present.
|
|
1943
|
+
*
|
|
1944
|
+
* This is the seam for a tenant's own content creator -- a LinkedIn drafting screen,
|
|
1945
|
+
* a brief builder, whatever the tenant authors -- without it having to restate the
|
|
1946
|
+
* pipeline entries. Prefer this over {@link ContentSidebarMiddleProps.items}, which
|
|
1947
|
+
* replaces the pipeline list wholesale and stops tracking the tenant's vocabulary.
|
|
1948
|
+
*/
|
|
1949
|
+
createItems?: NavItem[];
|
|
1950
|
+
/** Override the pipeline nav items. Defaults to the two-entry nav built from the tenant's declared vocabulary. */
|
|
1768
1951
|
items?: NavItem[];
|
|
1769
1952
|
}
|
|
1770
|
-
|
|
1953
|
+
/**
|
|
1954
|
+
* The content subshell nav, in two labeled sections.
|
|
1955
|
+
*
|
|
1956
|
+
* `Create` sits on top and is where content gets made; the pipeline section below is
|
|
1957
|
+
* where it gets reviewed and tracked. The split exists because authoring is
|
|
1958
|
+
* tenant-specific by nature (every tenant writes a different kind of thing, through a
|
|
1959
|
+
* different screen) while the pipeline underneath is the same shared system for all of
|
|
1960
|
+
* them.
|
|
1961
|
+
*
|
|
1962
|
+
* **Both section labels are fixed platform vocabulary, not tenant-declared.** The nav
|
|
1963
|
+
* entries inside them still are — a tenant that renames its pipelines to "Campaigns"
|
|
1964
|
+
* gets `Content Pipeline > Campaigns`. The sections name the two halves of the System
|
|
1965
|
+
* itself, which every tenant has; only what they contain varies.
|
|
1966
|
+
*
|
|
1967
|
+
* There is deliberately no section header above `Create`: the subshell is already
|
|
1968
|
+
* reached through the `Content` nav entry, so a third `Content` header only repeated
|
|
1969
|
+
* what the breadcrumb and the left rail both already say.
|
|
1970
|
+
*/
|
|
1971
|
+
declare const ContentSidebarMiddle: ({ createItems, items }?: ContentSidebarMiddleProps) => react_jsx_runtime.JSX.Element;
|
|
1771
1972
|
|
|
1772
1973
|
interface MyReviewQueuePanelProps {
|
|
1773
1974
|
onItemClick: (itemId: string) => void;
|
|
@@ -1775,14 +1976,20 @@ interface MyReviewQueuePanelProps {
|
|
|
1775
1976
|
showSectionLabel?: boolean;
|
|
1776
1977
|
}
|
|
1777
1978
|
/**
|
|
1778
|
-
* `MyReviewQueue` -- mirrors `MyTasksPanel` for the content System's sidebar workbench
|
|
1979
|
+
* `MyReviewQueue` -- mirrors `MyTasksPanel` for the content System's sidebar workbench,
|
|
1980
|
+
* and is the review queue's second way in (usability review Proposal, Decision 3): a
|
|
1981
|
+
* cross-pipeline "what needs review" view rather than a panel beside a table browser.
|
|
1779
1982
|
*
|
|
1780
1983
|
* The `/content/items` route accepts no "pending review" filter (only `reviewedBy`, not
|
|
1781
1984
|
* a reviewed/unreviewed flag), so this fetches a page of items and filters to
|
|
1782
1985
|
* `reviewedAt === null` client-side. A future backend addition could push this
|
|
1783
1986
|
* server-side; documenting the gap here rather than silently over-claiming precision.
|
|
1987
|
+
*
|
|
1988
|
+
* Rows are ordered oldest-first by `updatedAt` -- finding 6 is that nothing on the
|
|
1989
|
+
* screen ages, and the operational question is always what has been sitting the
|
|
1990
|
+
* longest.
|
|
1784
1991
|
*/
|
|
1785
1992
|
declare function MyReviewQueuePanel({ onItemClick, onSeeAll, showSectionLabel }: MyReviewQueuePanelProps): react_jsx_runtime.JSX.Element;
|
|
1786
1993
|
|
|
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,
|
|
1994
|
+
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 };
|
|
1995
|
+
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 };
|