@flamingo-stack/openframe-frontend-core 0.0.594 → 0.0.595
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/{chunk-5XQMEDGE.cjs → chunk-23UJ4EBJ.cjs} +10 -10
- package/dist/{chunk-5XQMEDGE.cjs.map → chunk-23UJ4EBJ.cjs.map} +1 -1
- package/dist/{chunk-DRZ224RU.js → chunk-2WLW5HDU.js} +7 -7
- package/dist/{chunk-3OQIZPUX.js → chunk-3WZLPCJ7.js} +3 -3
- package/dist/{chunk-NEFNARFF.cjs → chunk-4R6AZFNU.cjs} +30 -30
- package/dist/{chunk-NEFNARFF.cjs.map → chunk-4R6AZFNU.cjs.map} +1 -1
- package/dist/{chunk-CCLPJSY3.cjs → chunk-4ZY5MP46.cjs} +15 -15
- package/dist/{chunk-CCLPJSY3.cjs.map → chunk-4ZY5MP46.cjs.map} +1 -1
- package/dist/{chunk-Y22VQDVW.js → chunk-63PXZXCT.js} +4 -4
- package/dist/{chunk-C4YJC5X7.cjs → chunk-6PEFK4UH.cjs} +6 -6
- package/dist/{chunk-C4YJC5X7.cjs.map → chunk-6PEFK4UH.cjs.map} +1 -1
- package/dist/{chunk-MEWAFY6X.js → chunk-7N2NJPUK.js} +3 -3
- package/dist/{chunk-IKQVXZB5.js → chunk-A57HKYLY.js} +6 -6
- package/dist/{chunk-LKN2KKYZ.js → chunk-AQ65NLGJ.js} +39 -9
- package/dist/{chunk-LKN2KKYZ.js.map → chunk-AQ65NLGJ.js.map} +1 -1
- package/dist/{chunk-YZLUOZKR.js → chunk-BKMSI2AW.js} +2 -2
- package/dist/{chunk-66I2QUFE.cjs → chunk-CPWX46TL.cjs} +6 -6
- package/dist/{chunk-66I2QUFE.cjs.map → chunk-CPWX46TL.cjs.map} +1 -1
- package/dist/{chunk-PETYVGEQ.cjs → chunk-CZM2H5F5.cjs} +5 -5
- package/dist/{chunk-PETYVGEQ.cjs.map → chunk-CZM2H5F5.cjs.map} +1 -1
- package/dist/{chunk-N3RHX26N.js → chunk-DYXVQ24Q.js} +3 -3
- package/dist/{chunk-43ADGEWL.cjs → chunk-EO5GYWIX.cjs} +28 -28
- package/dist/{chunk-43ADGEWL.cjs.map → chunk-EO5GYWIX.cjs.map} +1 -1
- package/dist/{chunk-ZK3AZ5YF.cjs → chunk-FHEN27GM.cjs} +11 -11
- package/dist/{chunk-ZK3AZ5YF.cjs.map → chunk-FHEN27GM.cjs.map} +1 -1
- package/dist/{chunk-EWOFXJGH.cjs → chunk-HGWC7ABT.cjs} +57 -57
- package/dist/{chunk-EWOFXJGH.cjs.map → chunk-HGWC7ABT.cjs.map} +1 -1
- package/dist/{chunk-UBRVIVY4.cjs → chunk-JGDDPNSC.cjs} +192 -192
- package/dist/{chunk-UBRVIVY4.cjs.map → chunk-JGDDPNSC.cjs.map} +1 -1
- package/dist/{chunk-QAVT6P5F.cjs → chunk-MDUAU74C.cjs} +28 -28
- package/dist/{chunk-QAVT6P5F.cjs.map → chunk-MDUAU74C.cjs.map} +1 -1
- package/dist/{chunk-CQ35OMPJ.cjs → chunk-MHORK6KM.cjs} +3 -3
- package/dist/{chunk-CQ35OMPJ.cjs.map → chunk-MHORK6KM.cjs.map} +1 -1
- package/dist/{chunk-ZZHHKE2Q.js → chunk-MUNVPRT2.js} +2 -2
- package/dist/{chunk-ZEG3ZJPY.cjs → chunk-MX7DNV7X.cjs} +33 -33
- package/dist/{chunk-ZEG3ZJPY.cjs.map → chunk-MX7DNV7X.cjs.map} +1 -1
- package/dist/{chunk-3T7ZP3TL.js → chunk-NNMAMTA5.js} +3 -3
- package/dist/{chunk-ACU7J5BL.cjs → chunk-OGE4GSLZ.cjs} +80 -80
- package/dist/{chunk-ACU7J5BL.cjs.map → chunk-OGE4GSLZ.cjs.map} +1 -1
- package/dist/{chunk-HQWZ4IXU.cjs → chunk-OWWICTQR.cjs} +21 -21
- package/dist/{chunk-HQWZ4IXU.cjs.map → chunk-OWWICTQR.cjs.map} +1 -1
- package/dist/{chunk-KVNA3HU2.js → chunk-PYEJL2UG.js} +3 -3
- package/dist/{chunk-M5HGULIY.js → chunk-QLJMXCB5.js} +5 -5
- package/dist/{chunk-3XDPXOMS.js → chunk-SEVD4AST.js} +5 -5
- package/dist/{chunk-Y6I2DGKC.cjs → chunk-SK4IVCSI.cjs} +10 -2
- package/dist/{chunk-Y6I2DGKC.cjs.map → chunk-SK4IVCSI.cjs.map} +1 -1
- package/dist/{chunk-PMN7WDXI.js → chunk-T2JAJ7MR.js} +3 -3
- package/dist/{chunk-BTF3CNDP.js → chunk-TDEQ26A2.js} +10 -2
- package/dist/{chunk-BTF3CNDP.js.map → chunk-TDEQ26A2.js.map} +1 -1
- package/dist/{chunk-HOLK4ZMT.js → chunk-U4QRK4MX.js} +3 -3
- package/dist/{chunk-F5Q3DTP5.js → chunk-UPKN5CYH.js} +6 -6
- package/dist/{chunk-YLVPQNLO.cjs → chunk-YYHYCQD6.cjs} +389 -359
- package/dist/chunk-YYHYCQD6.cjs.map +1 -0
- package/dist/{chunk-GBIC3VNA.js → chunk-ZRXJX3JK.js} +4 -4
- package/dist/{chunk-S7VW4HVL.cjs → chunk-ZY3Z3F4X.cjs} +20 -20
- package/dist/{chunk-S7VW4HVL.cjs.map → chunk-ZY3Z3F4X.cjs.map} +1 -1
- package/dist/components/case-studies/index.cjs +10 -10
- package/dist/components/case-studies/index.js +4 -4
- package/dist/components/chat/entity-cards/dispatch.d.ts.map +1 -1
- package/dist/components/chat/index.cjs +3 -3
- package/dist/components/chat/index.js +2 -2
- package/dist/components/contact/index.cjs +5 -5
- package/dist/components/contact/index.js +4 -4
- package/dist/components/docs/index.cjs +8 -8
- package/dist/components/docs/index.js +7 -7
- package/dist/components/embeds/index.cjs +5 -5
- package/dist/components/embeds/index.js +4 -4
- package/dist/components/faq/index.cjs +5 -5
- package/dist/components/faq/index.js +4 -4
- package/dist/components/features/index.cjs +4 -4
- package/dist/components/features/index.js +3 -3
- package/dist/components/help-center-pages/index.cjs +24 -24
- package/dist/components/help-center-pages/index.js +15 -15
- package/dist/components/index.cjs +53 -53
- package/dist/components/index.js +15 -15
- package/dist/components/meeting-scheduler/index.cjs +31 -31
- package/dist/components/meeting-scheduler/index.js +3 -3
- package/dist/components/navigation/index.cjs +7 -7
- package/dist/components/navigation/index.js +6 -6
- package/dist/components/onboarding-guides/index.cjs +7 -7
- package/dist/components/onboarding-guides/index.js +6 -6
- package/dist/components/related-content/index.cjs +3 -3
- package/dist/components/related-content/index.js +2 -2
- package/dist/components/tickets/index.cjs +8 -8
- package/dist/components/tickets/index.js +7 -7
- package/dist/components/ui/index.cjs +4 -4
- package/dist/components/ui/index.js +3 -3
- package/dist/index.cjs +8 -8
- package/dist/index.js +7 -7
- package/dist/utils/index.cjs +11 -1
- package/dist/utils/index.cjs.map +1 -1
- package/dist/utils/index.js +11 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/list-url.d.ts.map +1 -1
- package/dist/utils/source-icons.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/chat/entity-cards/dispatch.tsx +47 -16
- package/src/utils/__tests__/list-url.test.ts +6 -0
- package/src/utils/list-url.ts +8 -0
- package/src/utils/source-icons.ts +3 -0
- package/dist/chunk-YLVPQNLO.cjs.map +0 -1
- /package/dist/{chunk-DRZ224RU.js.map → chunk-2WLW5HDU.js.map} +0 -0
- /package/dist/{chunk-3OQIZPUX.js.map → chunk-3WZLPCJ7.js.map} +0 -0
- /package/dist/{chunk-Y22VQDVW.js.map → chunk-63PXZXCT.js.map} +0 -0
- /package/dist/{chunk-MEWAFY6X.js.map → chunk-7N2NJPUK.js.map} +0 -0
- /package/dist/{chunk-IKQVXZB5.js.map → chunk-A57HKYLY.js.map} +0 -0
- /package/dist/{chunk-YZLUOZKR.js.map → chunk-BKMSI2AW.js.map} +0 -0
- /package/dist/{chunk-N3RHX26N.js.map → chunk-DYXVQ24Q.js.map} +0 -0
- /package/dist/{chunk-ZZHHKE2Q.js.map → chunk-MUNVPRT2.js.map} +0 -0
- /package/dist/{chunk-3T7ZP3TL.js.map → chunk-NNMAMTA5.js.map} +0 -0
- /package/dist/{chunk-KVNA3HU2.js.map → chunk-PYEJL2UG.js.map} +0 -0
- /package/dist/{chunk-M5HGULIY.js.map → chunk-QLJMXCB5.js.map} +0 -0
- /package/dist/{chunk-3XDPXOMS.js.map → chunk-SEVD4AST.js.map} +0 -0
- /package/dist/{chunk-PMN7WDXI.js.map → chunk-T2JAJ7MR.js.map} +0 -0
- /package/dist/{chunk-HOLK4ZMT.js.map → chunk-U4QRK4MX.js.map} +0 -0
- /package/dist/{chunk-F5Q3DTP5.js.map → chunk-UPKN5CYH.js.map} +0 -0
- /package/dist/{chunk-GBIC3VNA.js.map → chunk-ZRXJX3JK.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-url.d.ts","sourceRoot":"","sources":["../../src/utils/list-url.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAWH;;;;iEAIiE;AACjE,wBAAgB,uBAAuB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAKtE;
|
|
1
|
+
{"version":3,"file":"list-url.d.ts","sourceRoot":"","sources":["../../src/utils/list-url.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAWH;;;;iEAIiE;AACjE,wBAAgB,uBAAuB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAKtE;AAmED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,YAAY,CAAC,cAAc,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,IAAI,SAAK,GAAG,MAAM,GAAG,IAAI,CAa5F"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"source-icons.d.ts","sourceRoot":"","sources":["../../src/utils/source-icons.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,6EAA6E;AAC7E,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"source-icons.d.ts","sourceRoot":"","sources":["../../src/utils/source-icons.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,6EAA6E;AAC7E,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAoDpD,CAAC;AAEF;;6DAE6D;AAC7D,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAGxF;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA0DzD,CAAC;AAEF;;kEAEkE;AAClE,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,iCAAiC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAoDpE,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAEjF"}
|
package/package.json
CHANGED
|
@@ -619,12 +619,11 @@ function SlackChatCard({
|
|
|
619
619
|
}
|
|
620
620
|
|
|
621
621
|
/**
|
|
622
|
-
* Generic
|
|
623
|
-
*
|
|
624
|
-
*
|
|
625
|
-
* `contentRefType`. The per-type glyph is the only thing that varies.
|
|
622
|
+
* Generic glyph card for ChatRef-shaped items (title / preview / url) whose
|
|
623
|
+
* only per-type variation is the leading icon — used by the ref-hydrated
|
|
624
|
+
* product-hub objects (design docs, tenants) and the people-hub feeds.
|
|
626
625
|
*/
|
|
627
|
-
function
|
|
626
|
+
function GlyphChatCard({
|
|
628
627
|
chatRef,
|
|
629
628
|
icon,
|
|
630
629
|
isNewTab,
|
|
@@ -1343,26 +1342,57 @@ const GITHUB_CARD_CONFIGS: Record<string, GitHubCardConfig> = {
|
|
|
1343
1342
|
github_pr_review: { label: 'GitHub review', kind: 'pr_review' },
|
|
1344
1343
|
github_pr_review_public: { label: 'GitHub review (public)', kind: 'pr_review' },
|
|
1345
1344
|
};
|
|
1346
|
-
interface
|
|
1345
|
+
interface GlyphCardConfig {
|
|
1347
1346
|
label: string;
|
|
1348
1347
|
icon: () => React.ReactNode;
|
|
1349
1348
|
}
|
|
1350
|
-
/**
|
|
1351
|
-
* design
|
|
1352
|
-
*
|
|
1353
|
-
* label / icon /
|
|
1354
|
-
const
|
|
1349
|
+
/** Product-hub internal objects hydrated by their per-object card routes
|
|
1350
|
+
* (`/api/design-docs`, `/api/openframe-tenants` — ChatRef-shaped items,
|
|
1351
|
+
* same preset as github / slack). Adding one = one line here + the
|
|
1352
|
+
* `list-url.ts` builder + the `source-icons.ts` label / icon / type entries. */
|
|
1353
|
+
const REF_GLYPH_CARD_CONFIGS: Record<string, GlyphCardConfig> = {
|
|
1355
1354
|
design_doc: { label: 'Design doc', icon: () => <FileContentIcon size={24} /> },
|
|
1356
1355
|
openframe_tenant: { label: 'OpenFrame tenant', icon: () => <BuildingsIcon size={24} /> },
|
|
1356
|
+
};
|
|
1357
|
+
function refGlyphRegistryEntries(): Record<string, ChatCardRegistryEntry> {
|
|
1358
|
+
return registryEntries(REF_GLYPH_CARD_CONFIGS, (cfg, docType) =>
|
|
1359
|
+
refHydratedEntry(docType, cfg.label, (displayRef, opts) => (
|
|
1360
|
+
<GlyphChatCard chatRef={displayRef} icon={cfg.icon()} isNewTab={opts.isNewTab} discuss={opts.discuss} />
|
|
1361
|
+
)),
|
|
1362
|
+
);
|
|
1363
|
+
}
|
|
1364
|
+
|
|
1365
|
+
/** People-hub employee feeds hydrate from their EXISTING list APIs
|
|
1366
|
+
* (`/api/what-i-shipped?ids=`, `/api/how-i-work?ids=`) — entry-shaped rows
|
|
1367
|
+
* (title / summary / author), not ChatRefs, hence the bespoke row→display
|
|
1368
|
+
* mapping (the FAQ precedent). The destination comes from the ref (the
|
|
1369
|
+
* server-resolved entry url) or, on a bare marker, the host's
|
|
1370
|
+
* `composeContentUrl` seam for the type. */
|
|
1371
|
+
function fetchedEmployeeEntryDisplayRef(item: unknown, chatRef: ChatRef): ChatRef {
|
|
1372
|
+
const it = item as { title?: unknown; summary?: unknown; author?: { full_name?: unknown } | null };
|
|
1373
|
+
const title = typeof it?.title === 'string' && it.title.trim().length > 0 ? it.title.trim() : chatRef.title;
|
|
1374
|
+
const author = typeof it?.author?.full_name === 'string' ? it.author.full_name.trim() : '';
|
|
1375
|
+
const summary = typeof it?.summary === 'string' ? it.summary.trim() : '';
|
|
1376
|
+
const preview = [author, summary].filter(x => x.length > 0).join(' · ');
|
|
1377
|
+
return { ...chatRef, title, preview: preview.length > 0 ? preview : chatRef.preview };
|
|
1378
|
+
}
|
|
1379
|
+
const EMPLOYEE_ENTRY_CARD_CONFIGS: Record<string, GlyphCardConfig> = {
|
|
1357
1380
|
what_i_shipped: { label: 'What I Shipped', icon: () => <Rocket02Icon size={24} /> },
|
|
1358
1381
|
how_i_work: { label: 'How I Work', icon: () => <ClipboardListIcon size={24} /> },
|
|
1359
1382
|
};
|
|
1360
|
-
function
|
|
1361
|
-
return registryEntries(
|
|
1383
|
+
function employeeEntryRegistryEntries(): Record<string, ChatCardRegistryEntry> {
|
|
1384
|
+
return registryEntries(EMPLOYEE_ENTRY_CARD_CONFIGS, (cfg, docType) => ({
|
|
1362
1385
|
label: cfg.label,
|
|
1363
1386
|
bareInline: true,
|
|
1364
|
-
|
|
1365
|
-
|
|
1387
|
+
contentRefType: docType,
|
|
1388
|
+
skeleton: () => <MingoInfoCardSkeleton />,
|
|
1389
|
+
render: (item, chatRef, opts) => (
|
|
1390
|
+
<GlyphChatCard
|
|
1391
|
+
chatRef={fetchedEmployeeEntryDisplayRef(item, chatRef)}
|
|
1392
|
+
icon={cfg.icon()}
|
|
1393
|
+
isNewTab={opts.isNewTab}
|
|
1394
|
+
discuss={opts.discuss}
|
|
1395
|
+
/>
|
|
1366
1396
|
),
|
|
1367
1397
|
}));
|
|
1368
1398
|
}
|
|
@@ -1479,7 +1509,8 @@ const CHAT_CARD_REGISTRY: Record<string, ChatCardRegistryEntry> = {
|
|
|
1479
1509
|
),
|
|
1480
1510
|
},
|
|
1481
1511
|
// ───────── ref-only types (no list endpoint; the ChatRef IS the card) ─────────
|
|
1482
|
-
...
|
|
1512
|
+
...refGlyphRegistryEntries(),
|
|
1513
|
+
...employeeEntryRegistryEntries(),
|
|
1483
1514
|
slack_message: refHydratedEntry('slack_message', 'Slack message', (displayRef, opts) => (
|
|
1484
1515
|
<SlackChatCard chatRef={displayRef} isNewTab={opts.isNewTab} discuss={opts.discuss} />
|
|
1485
1516
|
)),
|
|
@@ -48,6 +48,12 @@ const BASELINE: Record<string, string> = {
|
|
|
48
48
|
profit_loss: '/api/financials/profit-loss?ids=a,b',
|
|
49
49
|
balance_sheet: '/api/financials/balance-sheet?ids=a,b',
|
|
50
50
|
cash_flow: '/api/financials/cash-flow?ids=a,b',
|
|
51
|
+
// 2026-09: hub-internal chat sources (people-hub feeds via their list APIs,
|
|
52
|
+
// product-hub design docs + tenants via per-object card routes).
|
|
53
|
+
what_i_shipped: '/api/what-i-shipped?ids=a,b&limit=2',
|
|
54
|
+
how_i_work: '/api/how-i-work?ids=a,b&limit=2',
|
|
55
|
+
design_doc: '/api/design-docs?ids=a,b',
|
|
56
|
+
openframe_tenant: '/api/openframe-tenants?ids=a,b',
|
|
51
57
|
};
|
|
52
58
|
|
|
53
59
|
describe('buildListUrl — byte parity with the hub mappers', () => {
|
package/src/utils/list-url.ts
CHANGED
|
@@ -104,6 +104,14 @@ const BUILDERS: Record<string, (ids: string[], base: string) => string> = {
|
|
|
104
104
|
profit_loss: (ids, b) => `${b}/api/financials/profit-loss?ids=${ids.join(',')}`,
|
|
105
105
|
balance_sheet: (ids, b) => `${b}/api/financials/balance-sheet?ids=${ids.join(',')}`,
|
|
106
106
|
cash_flow: (ids, b) => `${b}/api/financials/cash-flow?ids=${ids.join(',')}`,
|
|
107
|
+
// People-hub employee feeds — their EXISTING list APIs (`?ids=`, also feeding
|
|
108
|
+
// the related-content rail + author page), entry-shaped rows.
|
|
109
|
+
what_i_shipped: (ids, b) => `${b}/api/what-i-shipped?ids=${ids.join(',')}&limit=${ids.length}`,
|
|
110
|
+
how_i_work: (ids, b) => `${b}/api/how-i-work?ids=${ids.join(',')}&limit=${ids.length}`,
|
|
111
|
+
// Product-hub internal objects — per-object card-hydration routes
|
|
112
|
+
// (ChatRef-shaped items, `handleEntityCardList`), like github / slack.
|
|
113
|
+
design_doc: (ids, b) => `${b}/api/design-docs?ids=${ids.join(',')}`,
|
|
114
|
+
openframe_tenant: (ids, b) => `${b}/api/openframe-tenants?ids=${ids.join(',')}`,
|
|
107
115
|
};
|
|
108
116
|
|
|
109
117
|
/**
|
|
@@ -39,6 +39,7 @@ export const SOURCE_ICON_NAMES: Record<string, string> = {
|
|
|
39
39
|
events: 'calendar',
|
|
40
40
|
podcasts: 'headphones',
|
|
41
41
|
'customer-interviews': 'users',
|
|
42
|
+
faqs: 'info',
|
|
42
43
|
|
|
43
44
|
// Financials
|
|
44
45
|
'investor-updates': 'mail',
|
|
@@ -112,6 +113,7 @@ export const SOURCE_LABELS_BY_TABLE: Record<string, string> = {
|
|
|
112
113
|
events: 'Events',
|
|
113
114
|
podcasts: 'Podcasts',
|
|
114
115
|
'customer-interviews': 'Customer Interviews',
|
|
116
|
+
faqs: 'FAQs',
|
|
115
117
|
|
|
116
118
|
// Financials
|
|
117
119
|
'investor-updates': 'Investor Updates',
|
|
@@ -199,6 +201,7 @@ export const DEFAULT_DOCUMENT_TYPE_TO_TABLE_ID: Record<string, string> = {
|
|
|
199
201
|
event: 'events',
|
|
200
202
|
podcast: 'podcasts',
|
|
201
203
|
customer_interview: 'customer-interviews',
|
|
204
|
+
faq: 'faqs',
|
|
202
205
|
|
|
203
206
|
// Financials
|
|
204
207
|
investor_update: 'investor-updates',
|