@flamingo-stack/openframe-frontend-core 0.0.760 → 0.0.763

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 (100) hide show
  1. package/dist/build/export-map.json +1 -1
  2. package/dist/{chunk-7Z4EQOIX.cjs → chunk-22XAPV6N.cjs} +35 -35
  3. package/dist/{chunk-AXBVN5SW.cjs → chunk-2IFCRPNP.cjs} +38 -38
  4. package/dist/{chunk-4ZMCKCXN.cjs → chunk-3JUIDOHB.cjs} +43 -43
  5. package/dist/{chunk-CSJO7ZGN.cjs → chunk-3RYIF4OW.cjs} +3 -3
  6. package/dist/{chunk-35BJY5RR.cjs → chunk-47GZ33ND.cjs} +44 -44
  7. package/dist/{chunk-EMKGOU54.cjs → chunk-4NGXJA3V.cjs} +4 -4
  8. package/dist/{chunk-QCXE7BSY.cjs → chunk-66FQUWKF.cjs} +59 -59
  9. package/dist/{chunk-SULCTARW.cjs → chunk-6XCE2VLH.cjs} +8 -8
  10. package/dist/{chunk-GL5KJ4PK.cjs → chunk-AXGTRPF6.cjs} +20 -20
  11. package/dist/{chunk-PSLL4FAS.cjs → chunk-CEJDHCFZ.cjs} +89 -89
  12. package/dist/{chunk-2ANICXS7.cjs → chunk-E4LA4BEH.cjs} +21 -21
  13. package/dist/{chunk-JHQNUWFM.cjs → chunk-EQZXJUYV.cjs} +3 -3
  14. package/dist/{chunk-LU7TD6QS.cjs → chunk-FQSXZC2K.cjs} +3 -3
  15. package/dist/{chunk-BDCEMTWU.cjs → chunk-G5NCY5IE.cjs} +100 -100
  16. package/dist/{chunk-QU5K52OP.cjs → chunk-GY2JESOC.cjs} +2 -2
  17. package/dist/{chunk-LOFDIDSD.cjs → chunk-GZKWF6NH.cjs} +9 -9
  18. package/dist/{chunk-4VRXTQVZ.cjs → chunk-IJMPXTGV.cjs} +14 -14
  19. package/dist/{chunk-EYVYPX5N.cjs → chunk-IUIDZS6W.cjs} +574 -567
  20. package/dist/{chunk-EC7VXTJ3.cjs → chunk-J4P47JHM.cjs} +20 -20
  21. package/dist/{chunk-D2HMQUK5.cjs → chunk-LUNXHJ53.cjs} +32 -32
  22. package/dist/{chunk-WBOHLXFC.cjs → chunk-LVKUMVUJ.cjs} +2 -2
  23. package/dist/{chunk-L2IQESTQ.cjs → chunk-M7YZGRAV.cjs} +2 -2
  24. package/dist/{chunk-R34JD6NP.cjs → chunk-MWLD6NXV.cjs} +3 -3
  25. package/dist/{chunk-W2RM764D.cjs → chunk-NET74KSQ.cjs} +5 -4
  26. package/dist/{chunk-B27XV2TC.cjs → chunk-NS64LMVE.cjs} +10 -10
  27. package/dist/{chunk-UT4W73YG.cjs → chunk-O2VRIGDI.cjs} +83 -83
  28. package/dist/{chunk-QYLIHZKZ.cjs → chunk-OJJ4RL2T.cjs} +4 -4
  29. package/dist/{chunk-F64VMOIB.cjs → chunk-PE26VSWT.cjs} +19 -19
  30. package/dist/{chunk-ITO3JRVB.cjs → chunk-QCO32MEE.cjs} +17 -17
  31. package/dist/{chunk-KTPR66EE.cjs → chunk-R3TWQ3ZJ.cjs} +10 -0
  32. package/dist/{chunk-VUSXDMCE.cjs → chunk-RM6AHNM4.cjs} +7 -7
  33. package/dist/{chunk-T4BBZ5ST.cjs → chunk-RO72PRQI.cjs} +2 -2
  34. package/dist/{chunk-PIV4FVTR.cjs → chunk-SU3EXXVC.cjs} +22 -22
  35. package/dist/{chunk-WI2OTGKC.cjs → chunk-SVP6DJFL.cjs} +2 -2
  36. package/dist/{chunk-QTYSYEHK.cjs → chunk-TQPQKBBL.cjs} +253 -246
  37. package/dist/{chunk-5E6JHOGX.cjs → chunk-TSJUL6IH.cjs} +3 -3
  38. package/dist/{chunk-3LNKXYMI.cjs → chunk-UUBHKQOH.cjs} +6 -6
  39. package/dist/{chunk-VUWPLQBY.cjs → chunk-XCH7SPGI.cjs} +44 -44
  40. package/dist/{chunk-NC4QUV73.cjs → chunk-ZUF5WDGE.cjs} +28 -28
  41. package/dist/{cloud-tenants-2NMXXIA6.cjs → cloud-tenants-4AGSRBJ2.cjs} +22 -22
  42. package/dist/components/case-studies/index.cjs +36 -36
  43. package/dist/components/chat/chat-message-enhanced.d.ts.map +1 -1
  44. package/dist/components/chat/chat-message-enhanced.js +9 -6
  45. package/dist/components/chat/chat-message-list.d.ts.map +1 -1
  46. package/dist/components/chat/chat-message-list.js +2 -0
  47. package/dist/components/chat/index.cjs +15 -15
  48. package/dist/components/chat/types/component.types.d.ts +10 -0
  49. package/dist/components/chat/types/component.types.d.ts.map +1 -1
  50. package/dist/components/contact/index.cjs +23 -23
  51. package/dist/components/docs/index.cjs +26 -26
  52. package/dist/components/embeds/index.cjs +23 -23
  53. package/dist/components/faq/index.cjs +24 -24
  54. package/dist/components/features/index.cjs +24 -22
  55. package/dist/components/features/walkthrough-video.d.ts +7 -0
  56. package/dist/components/features/walkthrough-video.d.ts.map +1 -1
  57. package/dist/components/features/walkthrough-video.js +9 -1
  58. package/dist/components/help-center-pages/index.cjs +125 -125
  59. package/dist/components/index.cjs +85 -83
  60. package/dist/components/meeting-scheduler/index.cjs +77 -77
  61. package/dist/components/navigation/index.cjs +25 -25
  62. package/dist/components/onboarding-guides/index.cjs +25 -25
  63. package/dist/components/product-demo/index.cjs +9 -9
  64. package/dist/components/related-content/index.cjs +10 -10
  65. package/dist/components/tickets/index.cjs +28 -28
  66. package/dist/components/ui/index.cjs +22 -22
  67. package/dist/{devices-5XZVTD7G.cjs → devices-FKRZIBJP.cjs} +23 -23
  68. package/dist/{embeddable-chat-LTXUQWEK.cjs → embeddable-chat-HWQSP3DY.cjs} +93 -93
  69. package/dist/hooks/index.cjs +8 -8
  70. package/dist/index.cjs +30 -28
  71. package/dist/{knowledge-7QSJQB4P.cjs → knowledge-25CBYZ7E.cjs} +23 -23
  72. package/dist/{logs-URLNW334.cjs → logs-HQ7NDBVV.cjs} +30 -30
  73. package/dist/platform-domains.cjs +2 -0
  74. package/dist/platform-domains.d.ts.map +1 -1
  75. package/dist/platform-domains.js +2 -0
  76. package/dist/{policies-NNW6PMAN.cjs → policies-2RV2CQD3.cjs} +26 -26
  77. package/dist/{remote-session-SKNXYG6K.cjs → remote-session-F72S6I7J.cjs} +9 -9
  78. package/dist/{scripts-WPYKAZYF.cjs → scripts-32EM4WDI.cjs} +29 -29
  79. package/dist/{software-update-KB6BIWUT.cjs → software-update-WVIARIUG.cjs} +26 -26
  80. package/dist/{tickets-board-B2FH7Z4B.cjs → tickets-board-4PBXPSGJ.cjs} +12 -12
  81. package/dist/types/platform.d.ts +1 -1
  82. package/dist/types/platform.d.ts.map +1 -1
  83. package/dist/utils/index.cjs +13 -0
  84. package/dist/utils/platform-config.d.ts.map +1 -1
  85. package/dist/utils/platform-config.js +1 -0
  86. package/dist/utils/platform-identity.cjs +10 -0
  87. package/dist/utils/platform-identity.d.ts +3 -2
  88. package/dist/utils/platform-identity.d.ts.map +1 -1
  89. package/dist/utils/platform-identity.js +10 -0
  90. package/package.json +1 -1
  91. package/src/components/chat/chat-message-enhanced.tsx +19 -9
  92. package/src/components/chat/chat-message-list.tsx +2 -0
  93. package/src/components/chat/types/component.types.ts +10 -0
  94. package/src/components/features/walkthrough-video.tsx +17 -0
  95. package/src/platform-domains.ts +2 -0
  96. package/src/styles/README.md +1 -0
  97. package/src/styles/ods-colors.css +16 -0
  98. package/src/types/platform.ts +1 -0
  99. package/src/utils/platform-config.tsx +1 -0
  100. package/src/utils/platform-identity.ts +19 -2
@@ -15,26 +15,26 @@ var _chunkDKOLQPE7cjs = require('./chunk-DKOLQPE7.cjs');
15
15
 
16
16
 
17
17
 
18
- var _chunkEYVYPX5Ncjs = require('./chunk-EYVYPX5N.cjs');
19
- require('./chunk-2ANICXS7.cjs');
20
- require('./chunk-QU5K52OP.cjs');
18
+ var _chunkIUIDZS6Wcjs = require('./chunk-IUIDZS6W.cjs');
19
+ require('./chunk-E4LA4BEH.cjs');
20
+ require('./chunk-GY2JESOC.cjs');
21
21
 
22
22
 
23
- var _chunkAXBVN5SWcjs = require('./chunk-AXBVN5SW.cjs');
23
+ var _chunk2IFCRPNPcjs = require('./chunk-2IFCRPNP.cjs');
24
24
  require('./chunk-HQQE74RO.cjs');
25
25
  require('./chunk-DEY6XXGO.cjs');
26
- require('./chunk-VUWPLQBY.cjs');
27
- require('./chunk-LU7TD6QS.cjs');
26
+ require('./chunk-XCH7SPGI.cjs');
27
+ require('./chunk-FQSXZC2K.cjs');
28
28
  require('./chunk-24I6RFVU.cjs');
29
29
  require('./chunk-A6P6DHEZ.cjs');
30
30
  require('./chunk-MZ4KBSH7.cjs');
31
- require('./chunk-T4BBZ5ST.cjs');
31
+ require('./chunk-RO72PRQI.cjs');
32
32
  require('./chunk-YUMFVQIN.cjs');
33
- require('./chunk-PSLL4FAS.cjs');
34
- require('./chunk-QTYSYEHK.cjs');
35
- require('./chunk-F64VMOIB.cjs');
33
+ require('./chunk-CEJDHCFZ.cjs');
34
+ require('./chunk-TQPQKBBL.cjs');
35
+ require('./chunk-PE26VSWT.cjs');
36
36
  require('./chunk-3RFQPQ7Z.cjs');
37
- require('./chunk-LOFDIDSD.cjs');
37
+ require('./chunk-GZKWF6NH.cjs');
38
38
  require('./chunk-EFTUFJS2.cjs');
39
39
  require('./chunk-ZOZR3QI2.cjs');
40
40
  require('./chunk-OMV5S5PI.cjs');
@@ -1824,20 +1824,20 @@ require('./chunk-LMBYZITR.cjs');
1824
1824
  require('./chunk-TMVC7S2R.cjs');
1825
1825
  require('./chunk-IYHH5EIO.cjs');
1826
1826
  require('./chunk-XIBCMGBW.cjs');
1827
- require('./chunk-W2RM764D.cjs');
1828
- require('./chunk-CSJO7ZGN.cjs');
1829
- require('./chunk-WI2OTGKC.cjs');
1827
+ require('./chunk-NET74KSQ.cjs');
1828
+ require('./chunk-3RYIF4OW.cjs');
1829
+ require('./chunk-SVP6DJFL.cjs');
1830
1830
  require('./chunk-JKX2C3I2.cjs');
1831
1831
  require('./chunk-7DNL734S.cjs');
1832
1832
  require('./chunk-WWUSFOJ7.cjs');
1833
1833
  require('./chunk-SKI6NKOE.cjs');
1834
1834
  require('./chunk-EWPR7662.cjs');
1835
- require('./chunk-B27XV2TC.cjs');
1836
- require('./chunk-7Z4EQOIX.cjs');
1837
- require('./chunk-QYLIHZKZ.cjs');
1835
+ require('./chunk-NS64LMVE.cjs');
1836
+ require('./chunk-22XAPV6N.cjs');
1837
+ require('./chunk-OJJ4RL2T.cjs');
1838
1838
  require('./chunk-63N4FN5V.cjs');
1839
- require('./chunk-L2IQESTQ.cjs');
1840
- require('./chunk-JHQNUWFM.cjs');
1839
+ require('./chunk-M7YZGRAV.cjs');
1840
+ require('./chunk-EQZXJUYV.cjs');
1841
1841
  require('./chunk-S5C3OZCO.cjs');
1842
1842
  require('./chunk-32ASZMTV.cjs');
1843
1843
  require('./chunk-OOYBIS7D.cjs');
@@ -1849,8 +1849,8 @@ require('./chunk-BLH2SFOO.cjs');
1849
1849
  require('./chunk-I5MSCD57.cjs');
1850
1850
  require('./chunk-ASMNNSUQ.cjs');
1851
1851
  require('./chunk-CW3ML76U.cjs');
1852
- require('./chunk-R34JD6NP.cjs');
1853
- require('./chunk-KTPR66EE.cjs');
1852
+ require('./chunk-MWLD6NXV.cjs');
1853
+ require('./chunk-R3TWQ3ZJ.cjs');
1854
1854
  require('./chunk-DGFDBPO7.cjs');
1855
1855
  require('./chunk-HOTM4UM6.cjs');
1856
1856
  require('./chunk-UJ7AXHRZ.cjs');
@@ -1922,14 +1922,14 @@ var noop = () => {
1922
1922
  var HIDDEN_WHEN_COMPACT = ["organization"];
1923
1923
  function StaticPackageField({ value }) {
1924
1924
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1925
- _chunkAXBVN5SWcjs.Autocomplete,
1925
+ _chunk2IFCRPNPcjs.Autocomplete,
1926
1926
  {
1927
- label: _chunkEYVYPX5Ncjs.PACKAGE_SEARCH_LABEL,
1927
+ label: _chunkIUIDZS6Wcjs.PACKAGE_SEARCH_LABEL,
1928
1928
  labelVariant: "large",
1929
1929
  options: value ? [{ value: value.id, label: value.name, description: _nullishCoalesce(value.description, () => ( void 0)) }] : [],
1930
1930
  value: _nullishCoalesce(_optionalChain([value, 'optionalAccess', _ => _.id]), () => ( null)),
1931
1931
  onChange: noop,
1932
- placeholder: _chunkEYVYPX5Ncjs.PACKAGE_SEARCH_PLACEHOLDER
1932
+ placeholder: _chunkIUIDZS6Wcjs.PACKAGE_SEARCH_PLACEHOLDER
1933
1933
  }
1934
1934
  );
1935
1935
  }
@@ -1943,7 +1943,7 @@ function SoftwareUpdateScreen({ compact = false }) {
1943
1943
  [fixture.devices, fixture.selectedIds]
1944
1944
  );
1945
1945
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "h-full bg-ods-bg pt-[var(--spacing-system-l)]", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "h-full", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1946
- _chunkEYVYPX5Ncjs.SoftwareActionForm,
1946
+ _chunkIUIDZS6Wcjs.SoftwareActionForm,
1947
1947
  {
1948
1948
  action: fixture.action,
1949
1949
  showHeader: false,
@@ -1955,7 +1955,7 @@ function SoftwareUpdateScreen({ compact = false }) {
1955
1955
  initialValues: fixture.initialValues,
1956
1956
  renderPackageSearch,
1957
1957
  renderDevicePicker: () => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1958
- _chunkEYVYPX5Ncjs.DeviceSelector,
1958
+ _chunkIUIDZS6Wcjs.DeviceSelector,
1959
1959
  {
1960
1960
  devices: selected,
1961
1961
  loading: false,
@@ -10,9 +10,9 @@ var _chunkDKOLQPE7cjs = require('./chunk-DKOLQPE7.cjs');
10
10
 
11
11
 
12
12
 
13
- var _chunk2ANICXS7cjs = require('./chunk-2ANICXS7.cjs');
14
- require('./chunk-LU7TD6QS.cjs');
15
- require('./chunk-F64VMOIB.cjs');
13
+ var _chunkE4LA4BEHcjs = require('./chunk-E4LA4BEH.cjs');
14
+ require('./chunk-FQSXZC2K.cjs');
15
+ require('./chunk-PE26VSWT.cjs');
16
16
  require('./chunk-EFTUFJS2.cjs');
17
17
  require('./chunk-ZOZR3QI2.cjs');
18
18
  require('./chunk-OMV5S5PI.cjs');
@@ -1802,11 +1802,11 @@ require('./chunk-LMBYZITR.cjs');
1802
1802
  require('./chunk-TMVC7S2R.cjs');
1803
1803
  require('./chunk-IYHH5EIO.cjs');
1804
1804
  require('./chunk-XIBCMGBW.cjs');
1805
- require('./chunk-WI2OTGKC.cjs');
1805
+ require('./chunk-SVP6DJFL.cjs');
1806
1806
  require('./chunk-WWUSFOJ7.cjs');
1807
1807
  require('./chunk-SKI6NKOE.cjs');
1808
- require('./chunk-QYLIHZKZ.cjs');
1809
- require('./chunk-JHQNUWFM.cjs');
1808
+ require('./chunk-OJJ4RL2T.cjs');
1809
+ require('./chunk-EQZXJUYV.cjs');
1810
1810
  require('./chunk-S5C3OZCO.cjs');
1811
1811
  require('./chunk-32ASZMTV.cjs');
1812
1812
  require('./chunk-OOYBIS7D.cjs');
@@ -1815,7 +1815,7 @@ require('./chunk-6VOOPMP5.cjs');
1815
1815
  require('./chunk-ORO54HDF.cjs');
1816
1816
  require('./chunk-RUHKTWGB.cjs');
1817
1817
  require('./chunk-ASMNNSUQ.cjs');
1818
- require('./chunk-KTPR66EE.cjs');
1818
+ require('./chunk-R3TWQ3ZJ.cjs');
1819
1819
  require('./chunk-DGFDBPO7.cjs');
1820
1820
  require('./chunk-HOTM4UM6.cjs');
1821
1821
  require('./chunk-AKK3EO37.cjs');
@@ -1840,7 +1840,7 @@ function buildTicketsBoardFixture(cast) {
1840
1840
  const dana = assignee(cast.person("dana"));
1841
1841
  const alex = assignee(cast.person("alex"));
1842
1842
  return [
1843
- _chunk2ANICXS7cjs.columnFromTicketStatus.call(void 0, "ACTIVE", [
1843
+ _chunkE4LA4BEHcjs.columnFromTicketStatus.call(void 0, "ACTIVE", [
1844
1844
  ticket("tk-1051", "Printer offline at the front desk", "ACTIVE", {
1845
1845
  ticketNumber: "1051",
1846
1846
  agent: "fae",
@@ -1858,7 +1858,7 @@ function buildTicketsBoardFixture(cast) {
1858
1858
  tags: ["onboarding"]
1859
1859
  })
1860
1860
  ]),
1861
- _chunk2ANICXS7cjs.columnFromTicketStatus.call(void 0, "TECH_REQUIRED", [
1861
+ _chunkE4LA4BEHcjs.columnFromTicketStatus.call(void 0, "TECH_REQUIRED", [
1862
1862
  ticket("tk-1049", "Acrobat Pro for Maya", "TECH_REQUIRED", {
1863
1863
  ticketNumber: "1049",
1864
1864
  agent: "fae",
@@ -1882,7 +1882,7 @@ function buildTicketsBoardFixture(cast) {
1882
1882
  escalatedByUser: true
1883
1883
  })
1884
1884
  ]),
1885
- _chunk2ANICXS7cjs.columnFromTicketStatus.call(void 0, "ON_HOLD", [
1885
+ _chunkE4LA4BEHcjs.columnFromTicketStatus.call(void 0, "ON_HOLD", [
1886
1886
  ticket("tk-1046", "Replace the conference room display", "ON_HOLD", {
1887
1887
  ticketNumber: "1046",
1888
1888
  organizationName: _chunkDKOLQPE7cjs.DEMO_ORGANIZATIONS.acme.name,
@@ -1891,7 +1891,7 @@ function buildTicketsBoardFixture(cast) {
1891
1891
  activity: { kind: "waiting-external" }
1892
1892
  })
1893
1893
  ]),
1894
- _chunk2ANICXS7cjs.columnFromTicketStatus.call(void 0,
1894
+ _chunkE4LA4BEHcjs.columnFromTicketStatus.call(void 0,
1895
1895
  "RESOLVED",
1896
1896
  [
1897
1897
  ticket("tk-1048", "Slow laptop", "RESOLVED", {
@@ -1927,7 +1927,7 @@ function TicketsBoardScreen({ compact = false }) {
1927
1927
  const cast = _chunkSTEJZPIOcjs.useProductDemoCast.call(void 0, );
1928
1928
  const board = _react.useMemo.call(void 0, () => buildTicketsBoardFixture(cast), [cast]);
1929
1929
  const columns = compact ? board.filter((column) => column.id !== "ON_HOLD") : board;
1930
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "h-full bg-ods-bg p-[var(--spacing-system-m)]", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk2ANICXS7cjs.Board, { columns, onChange: noop, initialCollapsed: compact ? void 0 : FOLDED }) });
1930
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "h-full bg-ods-bg p-[var(--spacing-system-m)]", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkE4LA4BEHcjs.Board, { columns, onChange: noop, initialCollapsed: compact ? void 0 : FOLDED }) });
1931
1931
  }
1932
1932
 
1933
1933
 
@@ -1,4 +1,4 @@
1
- export type PlatformName = 'openmsp' | 'tmcg' | 'flamingo' | 'universal' | 'marketing-hub' | 'product-hub' | 'revenue-hub' | 'people-hub' | 'openframe' | 'company-hub' | 'mlg';
1
+ export type PlatformName = 'openmsp' | 'tmcg' | 'flamingo' | 'universal' | 'marketing-hub' | 'product-hub' | 'revenue-hub' | 'people-hub' | 'coding-hub' | 'openframe' | 'company-hub' | 'mlg';
2
2
  /**
3
3
  * Every platform that is a deployable app type (i.e. a `NEXT_PUBLIC_APP_TYPE` value).
4
4
  * `universal` is a content scope, never a deployment, so it is excluded.
@@ -1 +1 @@
1
- {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../../src/types/platform.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,YAAY,GACpB,SAAS,GACT,MAAM,GACN,UAAU,GACV,WAAW,GACX,eAAe,GACf,aAAa,GACb,aAAa,GACb,YAAY,GACZ,WAAW,GACX,aAAa,GACb,KAAK,CAAC;AAEV;;;;;GAKG;AACH,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;AAGjE,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,YAAY,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IAGrB,kBAAkB,EAAE,OAAO,CAAC;IAG5B,eAAe,EAAE,OAAO,CAAC;IAOzB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,8BAA8B,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/C,YAAY,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAGD,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AAGD,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAGD,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,KAAK,CAAC;AAGlD,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,CAAC;AAG7D,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,YAAY,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;CACpB"}
1
+ {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../../src/types/platform.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,YAAY,GACpB,SAAS,GACT,MAAM,GACN,UAAU,GACV,WAAW,GACX,eAAe,GACf,aAAa,GACb,aAAa,GACb,YAAY,GACZ,YAAY,GACZ,WAAW,GACX,aAAa,GACb,KAAK,CAAC;AAEV;;;;;GAKG;AACH,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;AAGjE,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,YAAY,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IAGrB,kBAAkB,EAAE,OAAO,CAAC;IAG5B,eAAe,EAAE,OAAO,CAAC;IAOzB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,8BAA8B,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/C,YAAY,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAGD,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AAGD,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAGD,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,KAAK,CAAC;AAGlD,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,CAAC;AAG7D,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,YAAY,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;CACpB"}
@@ -79975,6 +79975,7 @@ var PLATFORM_DOMAINS = [
79975
79975
  { key: "product-hub", defaultUrl: "https://product-hub.flamingo.so", envVar: "NEXT_PUBLIC_PRODUCT_HUB_URL" },
79976
79976
  { key: "revenue-hub", defaultUrl: "https://revenue-hub.flamingo.so", envVar: "NEXT_PUBLIC_REVENUE_HUB_URL" },
79977
79977
  { key: "people-hub", defaultUrl: "https://people-hub.flamingo.so", envVar: "NEXT_PUBLIC_PEOPLE_HUB_URL" },
79978
+ { key: "coding-hub", defaultUrl: "https://coding-hub.flamingo.so", envVar: "NEXT_PUBLIC_CODING_HUB_URL" },
79978
79979
  { key: "openmsp", defaultUrl: "https://www.openmsp.ai", envVar: "NEXT_PUBLIC_OPENMSP_URL" },
79979
79980
  // ORDERING INVARIANT (first-wins, load-bearing): `flamingo` MUST precede `universal`.
79980
79981
  // Both resolve to www.flamingo.run; the reverse index is first-wins → flamingo claims the shared host,
@@ -80008,6 +80009,7 @@ var ENV_OVERRIDES = {
80008
80009
  NEXT_PUBLIC_PRODUCT_HUB_URL: process.env.NEXT_PUBLIC_PRODUCT_HUB_URL,
80009
80010
  NEXT_PUBLIC_REVENUE_HUB_URL: process.env.NEXT_PUBLIC_REVENUE_HUB_URL,
80010
80011
  NEXT_PUBLIC_PEOPLE_HUB_URL: process.env.NEXT_PUBLIC_PEOPLE_HUB_URL,
80012
+ NEXT_PUBLIC_CODING_HUB_URL: process.env.NEXT_PUBLIC_CODING_HUB_URL,
80011
80013
  NEXT_PUBLIC_OPENMSP_URL: process.env.NEXT_PUBLIC_OPENMSP_URL,
80012
80014
  NEXT_PUBLIC_FLAMINGO_URL: process.env.NEXT_PUBLIC_FLAMINGO_URL,
80013
80015
  NEXT_PUBLIC_TMCG_URL: process.env.NEXT_PUBLIC_TMCG_URL,
@@ -80975,6 +80977,7 @@ var platformDisplayNames = {
80975
80977
  "product-hub": "Flamingo Product Hub",
80976
80978
  "revenue-hub": "Flamingo Revenue Hub",
80977
80979
  "people-hub": "Flamingo People Hub",
80980
+ "coding-hub": "Flamingo Coding Hub",
80978
80981
  "company-hub": "Flamingo Company Hub",
80979
80982
  tmcg: "TMCG",
80980
80983
  mlg: "Major League GitHub",
@@ -81018,6 +81021,7 @@ var ODS_STEM_TOKENS = {
81018
81021
  success: "attention-green-success",
81019
81022
  warning: "attention-yellow-warning",
81020
81023
  error: "attention-red-error",
81024
+ "text-primary": "system-greys-white",
81021
81025
  "text-secondary": "system-greys-grey"
81022
81026
  };
81023
81027
  var ODS_STEM_CLASSES = {
@@ -81057,6 +81061,12 @@ var ODS_STEM_CLASSES = {
81057
81061
  bgSoft: "bg-ods-error/10",
81058
81062
  borderSoft: "border-ods-error/30"
81059
81063
  },
81064
+ "text-primary": {
81065
+ text: "text-ods-text-primary",
81066
+ bg: "bg-ods-text-primary",
81067
+ bgSoft: "bg-ods-text-primary/10",
81068
+ borderSoft: "border-ods-text-primary/30"
81069
+ },
81060
81070
  "text-secondary": {
81061
81071
  text: "text-ods-text-secondary",
81062
81072
  bg: "bg-ods-text-secondary",
@@ -81080,6 +81090,7 @@ var PLATFORM_BRAND = {
81080
81090
  "product-hub": { accentStem: "success", secondaryStem: "success" },
81081
81091
  "revenue-hub": { accentStem: "warning", secondaryStem: "warning" },
81082
81092
  "people-hub": { accentStem: "flamingo-cyan", secondaryStem: "flamingo-cyan" },
81093
+ "coding-hub": { accentStem: "text-primary", secondaryStem: "text-primary" },
81083
81094
  "company-hub": { accentStem: "error", secondaryStem: "error" },
81084
81095
  mlg: { accentStem: "flamingo-pink", secondaryStem: "flamingo-cyan" },
81085
81096
  universal: { accentStem: "text-secondary", secondaryStem: "text-secondary" }
@@ -81132,6 +81143,7 @@ var platformHexColors = {
81132
81143
  "product-hub": "#5ea62e",
81133
81144
  "revenue-hub": "#e1b32f",
81134
81145
  "people-hub": "#5efaf0",
81146
+ "coding-hub": "#fafafa",
81135
81147
  "company-hub": "#f36666",
81136
81148
  tmcg: "#f357bb",
81137
81149
  mlg: "#f357bb"
@@ -81496,6 +81508,7 @@ var platformIcons = {
81496
81508
  "product-hub": renderPlatformIcon("product-hub", "h-5 w-5"),
81497
81509
  "revenue-hub": renderPlatformIcon("revenue-hub", "h-5 w-5"),
81498
81510
  "people-hub": renderPlatformIcon("people-hub", "h-5 w-5"),
81511
+ "coding-hub": renderPlatformIcon("coding-hub", "h-5 w-5"),
81499
81512
  "company-hub": renderPlatformIcon("company-hub", "h-5 w-5"),
81500
81513
  tmcg: renderPlatformIcon("tmcg", "h-5 w-5"),
81501
81514
  mlg: renderPlatformIcon("mlg", "h-5 w-5"),
@@ -1 +1 @@
1
- {"version":3,"file":"platform-config.d.ts","sourceRoot":"","sources":["../../src/utils/platform-config.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAgBtE,4EAA4E;AAC5E,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC,SAAS,CAY/D,CAAC;AAIF,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,sBAAsB,EACtB,oBAAoB,EACpB,sBAAsB,EACtB,iBAAiB,EACjB,gBAAgB,EAChB,0BAA0B,GAC3B,MAAM,qBAAqB,CAAC;AAE7B,wBAAgB,iCAAiC,CAAC,eAAe,EAAE,cAAc,EAAE,GAAG,gBAAgB,EAAE,CASvG;AAED,uCAAuC;AACvC,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,KAAK,CAAC,SAAS,CAErE;AAED,wDAAwD;AACxD,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,KAAK,CAAC,SAAS,CAE1E;AAED,2EAA2E;AAC3E,wBAAgB,wBAAwB,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,GAAE,MAAkB,GAAG,KAAK,CAAC,SAAS,CAE7G"}
1
+ {"version":3,"file":"platform-config.d.ts","sourceRoot":"","sources":["../../src/utils/platform-config.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAgBtE,4EAA4E;AAC5E,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC,SAAS,CAa/D,CAAC;AAIF,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,sBAAsB,EACtB,oBAAoB,EACpB,sBAAsB,EACtB,iBAAiB,EACjB,gBAAgB,EAChB,0BAA0B,GAC3B,MAAM,qBAAqB,CAAC;AAE7B,wBAAgB,iCAAiC,CAAC,eAAe,EAAE,cAAc,EAAE,GAAG,gBAAgB,EAAE,CASvG;AAED,uCAAuC;AACvC,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,KAAK,CAAC,SAAS,CAErE;AAED,wDAAwD;AACxD,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,KAAK,CAAC,SAAS,CAE1E;AAED,2EAA2E;AAC3E,wBAAgB,wBAAwB,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,GAAE,MAAkB,GAAG,KAAK,CAAC,SAAS,CAE7G"}
@@ -16,6 +16,7 @@ const platformIcons = {
16
16
  "product-hub": renderPlatformIcon("product-hub", "h-5 w-5"),
17
17
  "revenue-hub": renderPlatformIcon("revenue-hub", "h-5 w-5"),
18
18
  "people-hub": renderPlatformIcon("people-hub", "h-5 w-5"),
19
+ "coding-hub": renderPlatformIcon("coding-hub", "h-5 w-5"),
19
20
  "company-hub": renderPlatformIcon("company-hub", "h-5 w-5"),
20
21
  tmcg: renderPlatformIcon("tmcg", "h-5 w-5"),
21
22
  mlg: renderPlatformIcon("mlg", "h-5 w-5"),
@@ -9,6 +9,7 @@ var platformDisplayNames = {
9
9
  "product-hub": "Flamingo Product Hub",
10
10
  "revenue-hub": "Flamingo Revenue Hub",
11
11
  "people-hub": "Flamingo People Hub",
12
+ "coding-hub": "Flamingo Coding Hub",
12
13
  "company-hub": "Flamingo Company Hub",
13
14
  tmcg: "TMCG",
14
15
  mlg: "Major League GitHub",
@@ -52,6 +53,7 @@ var ODS_STEM_TOKENS = {
52
53
  success: "attention-green-success",
53
54
  warning: "attention-yellow-warning",
54
55
  error: "attention-red-error",
56
+ "text-primary": "system-greys-white",
55
57
  "text-secondary": "system-greys-grey"
56
58
  };
57
59
  var ODS_STEM_CLASSES = {
@@ -91,6 +93,12 @@ var ODS_STEM_CLASSES = {
91
93
  bgSoft: "bg-ods-error/10",
92
94
  borderSoft: "border-ods-error/30"
93
95
  },
96
+ "text-primary": {
97
+ text: "text-ods-text-primary",
98
+ bg: "bg-ods-text-primary",
99
+ bgSoft: "bg-ods-text-primary/10",
100
+ borderSoft: "border-ods-text-primary/30"
101
+ },
94
102
  "text-secondary": {
95
103
  text: "text-ods-text-secondary",
96
104
  bg: "bg-ods-text-secondary",
@@ -114,6 +122,7 @@ var PLATFORM_BRAND = {
114
122
  "product-hub": { accentStem: "success", secondaryStem: "success" },
115
123
  "revenue-hub": { accentStem: "warning", secondaryStem: "warning" },
116
124
  "people-hub": { accentStem: "flamingo-cyan", secondaryStem: "flamingo-cyan" },
125
+ "coding-hub": { accentStem: "text-primary", secondaryStem: "text-primary" },
117
126
  "company-hub": { accentStem: "error", secondaryStem: "error" },
118
127
  mlg: { accentStem: "flamingo-pink", secondaryStem: "flamingo-cyan" },
119
128
  universal: { accentStem: "text-secondary", secondaryStem: "text-secondary" }
@@ -166,6 +175,7 @@ var platformHexColors = {
166
175
  "product-hub": "#5ea62e",
167
176
  "revenue-hub": "#e1b32f",
168
177
  "people-hub": "#5efaf0",
178
+ "coding-hub": "#fafafa",
169
179
  "company-hub": "#f36666",
170
180
  tmcg: "#f357bb",
171
181
  mlg: "#f357bb"
@@ -27,6 +27,7 @@ export declare const platformDisplayNames: {
27
27
  'product-hub': string;
28
28
  'revenue-hub': string;
29
29
  'people-hub': string;
30
+ 'coding-hub': string;
30
31
  'company-hub': string;
31
32
  tmcg: string;
32
33
  mlg: string;
@@ -59,10 +60,10 @@ export declare function getPlatformShortName(platformName: string): string;
59
60
  export declare function getPlatformDescription(platformName: string): string;
60
61
  export declare function getPlatformSlogan(platformName: string): string;
61
62
  /**
62
- * The six brand/attention colours (plus the neutral) a platform may adopt, named
63
+ * The six brand/attention colours (plus the two neutrals) a platform may adopt, named
63
64
  * by STEM rather than by token so the token spelling has exactly one home below.
64
65
  */
65
- export type OdsColorStem = 'flamingo-pink' | 'flamingo-cyan' | 'open-yellow' | 'success' | 'warning' | 'error' | 'text-secondary';
66
+ export type OdsColorStem = 'flamingo-pink' | 'flamingo-cyan' | 'open-yellow' | 'success' | 'warning' | 'error' | 'text-primary' | 'text-secondary';
66
67
  /** Stem → ODS token name (without the `--ods-` prefix). THE token spelling. */
67
68
  export declare const ODS_STEM_TOKENS: Record<OdsColorStem, string>;
68
69
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"platform-identity.d.ts","sourceRoot":"","sources":["../../src/utils/platform-identity.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"platform-identity.d.ts","sourceRoot":"","sources":["../../src/utils/platform-identity.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@ const platformDisplayNames = {
6
6
  "product-hub": "Flamingo Product Hub",
7
7
  "revenue-hub": "Flamingo Revenue Hub",
8
8
  "people-hub": "Flamingo People Hub",
9
+ "coding-hub": "Flamingo Coding Hub",
9
10
  "company-hub": "Flamingo Company Hub",
10
11
  tmcg: "TMCG",
11
12
  mlg: "Major League GitHub",
@@ -49,6 +50,7 @@ const ODS_STEM_TOKENS = {
49
50
  success: "attention-green-success",
50
51
  warning: "attention-yellow-warning",
51
52
  error: "attention-red-error",
53
+ "text-primary": "system-greys-white",
52
54
  "text-secondary": "system-greys-grey"
53
55
  };
54
56
  const ODS_STEM_CLASSES = {
@@ -88,6 +90,12 @@ const ODS_STEM_CLASSES = {
88
90
  bgSoft: "bg-ods-error/10",
89
91
  borderSoft: "border-ods-error/30"
90
92
  },
93
+ "text-primary": {
94
+ text: "text-ods-text-primary",
95
+ bg: "bg-ods-text-primary",
96
+ bgSoft: "bg-ods-text-primary/10",
97
+ borderSoft: "border-ods-text-primary/30"
98
+ },
91
99
  "text-secondary": {
92
100
  text: "text-ods-text-secondary",
93
101
  bg: "bg-ods-text-secondary",
@@ -111,6 +119,7 @@ const PLATFORM_BRAND = {
111
119
  "product-hub": { accentStem: "success", secondaryStem: "success" },
112
120
  "revenue-hub": { accentStem: "warning", secondaryStem: "warning" },
113
121
  "people-hub": { accentStem: "flamingo-cyan", secondaryStem: "flamingo-cyan" },
122
+ "coding-hub": { accentStem: "text-primary", secondaryStem: "text-primary" },
114
123
  "company-hub": { accentStem: "error", secondaryStem: "error" },
115
124
  mlg: { accentStem: "flamingo-pink", secondaryStem: "flamingo-cyan" },
116
125
  universal: { accentStem: "text-secondary", secondaryStem: "text-secondary" }
@@ -163,6 +172,7 @@ const platformHexColors = {
163
172
  "product-hub": "#5ea62e",
164
173
  "revenue-hub": "#e1b32f",
165
174
  "people-hub": "#5efaf0",
175
+ "coding-hub": "#fafafa",
166
176
  "company-hub": "#f36666",
167
177
  tmcg: "#f357bb",
168
178
  mlg: "#f357bb"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flamingo-stack/openframe-frontend-core",
3
- "version": "0.0.760",
3
+ "version": "0.0.763",
4
4
  "description": "Shared design system and components for all Flamingo platforms",
5
5
  "type": "module",
6
6
  "sideEffects": [
@@ -102,6 +102,7 @@ const ChatMessageEnhanced = forwardRef<HTMLDivElement, ChatMessageEnhancedProps>
102
102
  approvalVariant,
103
103
  appearance: appearanceProp,
104
104
  authorType: authorTypeProp,
105
+ selfAuthorType,
105
106
  assistantIcon,
106
107
  contextItems,
107
108
  resolveContextIcon,
@@ -115,12 +116,19 @@ const ChatMessageEnhanced = forwardRef<HTMLDivElement, ChatMessageEnhancedProps>
115
116
  },
116
117
  ref,
117
118
  ) => {
118
- const isUser = role === 'user';
119
+ // A `user` row is a PERSON (the end user, a technician, a system line); the
120
+ // agent's turns are `assistant`. Which person is the viewer is the thread's
121
+ // call (`selfAuthorType`): the viewer's own turns draw as the bubble on the
122
+ // right, another person's as an incoming reply.
123
+ const isHuman = role === 'user';
119
124
  const isError = role === 'error';
120
125
  const inheritedAppearance = useChatAppearance();
121
126
  const appearance = appearanceProp ?? inheritedAppearance;
122
127
  const isV2 = appearance === CHAT_APPEARANCE.V2;
123
- const authorType = authorTypeProp ?? (isUser ? 'user' : assistantType === 'mingo' ? 'mingo' : 'fae');
128
+ const authorType = authorTypeProp ?? (isHuman ? 'user' : assistantType === 'mingo' ? 'mingo' : 'fae');
129
+ const isOtherPerson =
130
+ isHuman && selfAuthorType !== undefined && authorType !== 'system' && authorType !== selfAuthorType;
131
+ const isUser = isHuman && !isOtherPerson;
124
132
 
125
133
  // Inline-card rendering uses a HOST-PROVIDED `renderEntityCard` function
126
134
  // (v6.1 §B.2.7 — DRY duplications #2). The OSS-lib stays data-agnostic:
@@ -524,18 +532,19 @@ const ChatMessageEnhanced = forwardRef<HTMLDivElement, ChatMessageEnhancedProps>
524
532
  // its own short line above the message (on the right for the user), never
525
533
  // beside it: a face in the row indents every line of the message by its
526
534
  // width. The NAME is written only where it is the information itself: a
527
- // system line and a human technician answering. Mingo sends the admin's
528
- // own turns as `admin` too; those are the user's words and draw as such.
529
- // Every face carries its name for assistive tech and on hover.
530
- const showName = isSystem || (authorType === 'admin' && !isUser);
531
- const displayName = name || (isUser ? 'User' : assistantType === 'mingo' ? 'Mingo' : 'Fae');
535
+ // system line and another person answering (a technician in the end
536
+ // user's thread). Mingo sends the admin's own turns as `admin` too; those
537
+ // are the user's words and draw as such. Every face carries its name for
538
+ // assistive tech and on hover.
539
+ const showName = isSystem || isOtherPerson || (authorType === 'admin' && !isUser);
540
+ const displayName = name || (isHuman ? 'User' : assistantType === 'mingo' ? 'Mingo' : 'Fae');
532
541
  const faceBox = 'h-5 w-5 flex-shrink-0';
533
542
  const face: ReactNode =
534
- !showAvatar || isSystem ? null : !isUser && !avatar && assistantIcon ? (
543
+ !showAvatar || isSystem ? null : !isHuman && !avatar && assistantIcon ? (
535
544
  <span title={displayName} className={cn('flex items-center justify-center', faceBox)}>
536
545
  {assistantIcon}
537
546
  </span>
538
- ) : !isUser && !avatar && assistantType ? (
547
+ ) : !isHuman && !avatar && assistantType ? (
539
548
  // An agent with no picture shows its packaged mark, never initials.
540
549
  <span role="img" aria-label={displayName} title={displayName} className={cn('inline-flex', faceBox)}>
541
550
  <AgentMark agent={assistantType} className="h-full w-full rounded-full" />
@@ -755,6 +764,7 @@ const MemoizedChatMessageEnhanced = memo(ChatMessageEnhanced, (prevProps, nextPr
755
764
  prevProps.approvalVariant === nextProps.approvalVariant &&
756
765
  prevProps.appearance === nextProps.appearance &&
757
766
  prevProps.authorType === nextProps.authorType &&
767
+ prevProps.selfAuthorType === nextProps.selfAuthorType &&
758
768
  prevProps.assistantIcon === nextProps.assistantIcon &&
759
769
  prevProps.className === nextProps.className &&
760
770
  // Reference equality — the host re-uses the same array instance per
@@ -140,6 +140,7 @@ const ChatMessageList = forwardRef<HTMLDivElement, ChatMessageListProps>(
140
140
  contentClassName,
141
141
  assistantType,
142
142
  approvalVariant,
143
+ selfAuthorType,
143
144
  appearance = CHAT_APPEARANCE.CLASSIC,
144
145
  assistantIcon,
145
146
  pendingApprovals,
@@ -1047,6 +1048,7 @@ const ChatMessageList = forwardRef<HTMLDivElement, ChatMessageListProps>(
1047
1048
  assistantType={message.assistantType || assistantType}
1048
1049
  approvalVariant={approvalVariant}
1049
1050
  authorType={message.authorType}
1051
+ selfAuthorType={selfAuthorType}
1050
1052
  assistantIcon={message.role !== 'user' ? assistantIcon : undefined}
1051
1053
  contextItems={message.contextItems}
1052
1054
  resolveContextIcon={resolveContextIcon}
@@ -138,6 +138,10 @@ export interface ChatMessageEnhancedProps extends Omit<HTMLAttributes<HTMLDivEle
138
138
  name?: string;
139
139
  assistantType?: AssistantType;
140
140
  authorType?: AuthorType;
141
+ /** Whose words are the viewer's own, for a thread where two kinds of people
142
+ * write (`ChatMessageList.selfAuthorType`). Omit and every `user` turn is
143
+ * the viewer's own. */
144
+ selfAuthorType?: AuthorType;
141
145
  /** Viewer variant for approval blocks in this message's segments.
142
146
  * `'admin'` (default) = full command block; `'client'` = end-client
143
147
  * (Fae desktop app) title-only card. Forwarded to
@@ -295,6 +299,12 @@ export interface ChatMessageListProps extends HTMLAttributes<HTMLDivElement> {
295
299
  * `'client'` ONLY on true end-client surfaces — admin views of a Fae
296
300
  * dialog (tickets dialog client tab) keep the default. */
297
301
  approvalVariant?: ApprovalBlockVariant;
302
+ /** The `authorType` whose turns are the viewer's own: a bubble on the right.
303
+ * Every other person's turn (a `user` row of another author type) reads as
304
+ * an incoming reply, with their face and name. Omit where every `user` row
305
+ * is the viewer's (Mingo: the admin's own turns arrive as `admin`); the Fae
306
+ * client passes `'user'`, so a technician (`admin`) answers from the left. */
307
+ selfAuthorType?: AuthorType;
298
308
  /** Visual generation of the whole thread, blocks included. Default
299
309
  * `classic`; the Fae client passes `v2`. See `ChatAppearance`. */
300
310
  appearance?: ChatAppearance;
@@ -79,6 +79,7 @@ import { VolumeXmarkIcon } from '../icons-v2-generated/audio-and-visual/volume-x
79
79
  import { PauseIcon } from '../icons-v2-generated/media-playback/pause-icon';
80
80
  import { PlayIcon } from '../icons-v2-generated/media-playback/play-icon';
81
81
  import { XmarkIcon } from '../icons-v2-generated/signs-and-symbols/xmark-icon';
82
+ import { UnifiedSkeleton } from '../loading/unified-skeleton';
82
83
  import { Button } from '../ui/button';
83
84
  import { DialogPortal, DialogOverlay } from '../ui/dialog';
84
85
  import { SquareAvatar } from '../ui/square-avatar';
@@ -87,6 +88,10 @@ import { Video, type VideoPlayerHandle, type VideoMutedFallbackState } from './v
87
88
  import { VideoPlayBadge, VideoUnmuteGlyph } from './video-center-badge';
88
89
  import { VideoHoverPreviewSurface } from './video-hover-preview';
89
90
 
91
+ /** The inline card's box: 16:9 across the host's width, rounded and bordered. ONE string, read by the card and
92
+ * its skeleton, so the page keeps the same height before and after the player mounts. */
93
+ const INLINE_CARD_BOX_CLASS = 'aspect-video w-full rounded-md border border-ods-border';
94
+
90
95
  /** Wire-shape data for the widget. Kept as the shared contract the hub DAL
91
96
  * re-exports as `PublicWalkthroughVideo & { id }`. `mainVideoUrl`/`youtubeUrl`
92
97
  * stay SEPARATE — YouTube wins when both are set (card matches theater). */
@@ -967,6 +972,7 @@ function WalkthroughVideo({
967
972
  // receives pointer events — the media layer is pointer-events-none, so
968
973
  // a group inside it can never match :hover.
969
974
  'group/card pointer-events-auto relative overflow-hidden rounded-md border border-ods-border bg-ods-card',
975
+ inline && INLINE_CARD_BOX_CLASS,
970
976
  // The lift is what separates a FLOATING card from the page beneath it;
971
977
  // an in-flow block sitting inside a host card needs no shadow at all.
972
978
  !inline && 'shadow-2xl',
@@ -1195,6 +1201,9 @@ function WalkthroughVideo({
1195
1201
 
1196
1202
  return (
1197
1203
  <>
1204
+ {/* Inline, the card mounts after hydration: until then its skeleton holds the same box, so the page below
1205
+ does not jump when the player appears. A floating card is an overlay and takes no space. */}
1206
+ {inline && !showCard && !dismissed && <InlineWalkthroughVideoSkeleton className={className} />}
1198
1207
  {showCard &&
1199
1208
  (inline ? (
1200
1209
  // No wrapper: a positioning / z-index / safe-area shell around an
@@ -1314,3 +1323,11 @@ export function FloatingWalkthroughVideo(props: FloatingWalkthroughVideoProps):
1314
1323
  export function InlineWalkthroughVideo(props: InlineWalkthroughVideoProps): React.ReactElement {
1315
1324
  return <WalkthroughVideo {...props} placement="inline" appearDelayMs={0} dismissal={false} />;
1316
1325
  }
1326
+
1327
+ /**
1328
+ * The inline video's loading state: the shared skeleton in the card's own box. The inline card draws it itself
1329
+ * until its player mounts; a host whose video data is still loading draws it in the same slot.
1330
+ */
1331
+ export function InlineWalkthroughVideoSkeleton({ className }: { className?: string }): React.ReactElement {
1332
+ return <UnifiedSkeleton className={cn(INLINE_CARD_BOX_CLASS, className)} />;
1333
+ }
@@ -38,6 +38,7 @@ export const PLATFORM_DOMAINS: readonly PlatformDomainEntry[] = [
38
38
  { key: 'product-hub', defaultUrl: 'https://product-hub.flamingo.so', envVar: 'NEXT_PUBLIC_PRODUCT_HUB_URL' },
39
39
  { key: 'revenue-hub', defaultUrl: 'https://revenue-hub.flamingo.so', envVar: 'NEXT_PUBLIC_REVENUE_HUB_URL' },
40
40
  { key: 'people-hub', defaultUrl: 'https://people-hub.flamingo.so', envVar: 'NEXT_PUBLIC_PEOPLE_HUB_URL' },
41
+ { key: 'coding-hub', defaultUrl: 'https://coding-hub.flamingo.so', envVar: 'NEXT_PUBLIC_CODING_HUB_URL' },
41
42
  { key: 'openmsp', defaultUrl: 'https://www.openmsp.ai', envVar: 'NEXT_PUBLIC_OPENMSP_URL' },
42
43
  // ORDERING INVARIANT (first-wins, load-bearing): `flamingo` MUST precede `universal`.
43
44
  // Both resolve to www.flamingo.run; the reverse index is first-wins → flamingo claims the shared host,
@@ -86,6 +87,7 @@ const ENV_OVERRIDES = {
86
87
  NEXT_PUBLIC_PRODUCT_HUB_URL: process.env.NEXT_PUBLIC_PRODUCT_HUB_URL,
87
88
  NEXT_PUBLIC_REVENUE_HUB_URL: process.env.NEXT_PUBLIC_REVENUE_HUB_URL,
88
89
  NEXT_PUBLIC_PEOPLE_HUB_URL: process.env.NEXT_PUBLIC_PEOPLE_HUB_URL,
90
+ NEXT_PUBLIC_CODING_HUB_URL: process.env.NEXT_PUBLIC_CODING_HUB_URL,
89
91
  NEXT_PUBLIC_OPENMSP_URL: process.env.NEXT_PUBLIC_OPENMSP_URL,
90
92
  NEXT_PUBLIC_FLAMINGO_URL: process.env.NEXT_PUBLIC_FLAMINGO_URL,
91
93
  NEXT_PUBLIC_TMCG_URL: process.env.NEXT_PUBLIC_TMCG_URL,
@@ -167,6 +167,7 @@ Platforms set **brand accent + link colors only** (and a couple of intentional b
167
167
  | `product-hub` | Green `--ods-attention-green-success` | |
168
168
  | `revenue-hub` | Yellow-warning `--ods-attention-yellow-warning` | |
169
169
  | `people-hub` | Cyan `--ods-flamingo-cyan-base` | |
170
+ | `coding-hub` | White `--ods-system-greys-white` | Black secondary; mark is white on black |
170
171
  | `company-hub` | Red `--ods-attention-red-error` | |
171
172
 
172
173
  Adding a new platform = add one `[data-app-type="…"]` block in `ods-colors.css`. Because the block references `--ods-*` primitives (not raw hex), the new platform inherits dark/light flipping for free.
@@ -600,6 +600,22 @@
600
600
  --ods-accent: var(--ods-flamingo-cyan-base);
601
601
  }
602
602
 
603
+ [data-app-type='coding-hub'] {
604
+ --color-accent-primary: var(--ods-system-greys-white);
605
+ --color-accent-hover: var(--ods-system-greys-white-hover);
606
+ --color-accent-active: var(--ods-system-greys-white-action);
607
+ --color-accent-secondary: var(--ods-system-greys-black);
608
+ --color-accent-secondary-hover: var(--ods-system-greys-black-hover);
609
+ --color-accent-secondary-active: var(--ods-system-greys-black-action);
610
+ --color-accent-focus: var(--ods-system-greys-white);
611
+ --color-focus-ring: var(--ods-system-greys-white);
612
+ --color-focus-visible: var(--ods-system-greys-white);
613
+ --color-link: var(--ods-system-greys-white);
614
+ --color-link-hover: var(--ods-system-greys-white-hover);
615
+ --ods-current: var(--ods-system-greys-white);
616
+ --ods-accent: var(--ods-system-greys-white);
617
+ }
618
+
603
619
  [data-app-type='company-hub'] {
604
620
  --color-accent-primary: var(--ods-attention-red-error);
605
621
  --color-accent-hover: var(--ods-attention-red-error-hover);