@flamingo-stack/openframe-frontend-core 0.0.853 → 0.0.855

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 (214) hide show
  1. package/dist/build/export-map.json +1 -1
  2. package/dist/{case-study-card-WP5Z234Q.cjs → case-study-card-6VAMNHLU.cjs} +8 -8
  3. package/dist/{chunk-2W22LY3W.cjs → chunk-2JCA7BRK.cjs} +19 -19
  4. package/dist/{chunk-53QPG7SJ.cjs → chunk-2MCPK6AX.cjs} +28 -28
  5. package/dist/{chunk-QOW2GP3V.cjs → chunk-2P72KAG5.cjs} +23 -23
  6. package/dist/{chunk-NMWLXHFH.cjs → chunk-3GJ75OUL.cjs} +183 -183
  7. package/dist/{chunk-P63CRPWI.cjs → chunk-4H3J57AN.cjs} +25 -25
  8. package/dist/{chunk-6GWRPW6B.cjs → chunk-5NK3FUHY.cjs} +4 -4
  9. package/dist/{chunk-DLTPSP5F.cjs → chunk-5TYG5JNB.cjs} +2 -2
  10. package/dist/{chunk-EIACEY2L.cjs → chunk-65NMKAPQ.cjs} +12 -12
  11. package/dist/{chunk-IGVAPIEW.cjs → chunk-6C4OR4MZ.cjs} +2 -2
  12. package/dist/{chunk-GG466XFQ.cjs → chunk-6DMH4GXN.cjs} +30 -5
  13. package/dist/{chunk-EF2FZ7GT.cjs → chunk-6VVQJU76.cjs} +54 -54
  14. package/dist/{chunk-G7GF4PWA.cjs → chunk-77GX573I.cjs} +9 -9
  15. package/dist/{chunk-7RZHSBNX.cjs → chunk-AOOHJLXS.cjs} +90 -90
  16. package/dist/{chunk-O3EKOXFZ.cjs → chunk-AYMY2VNB.cjs} +37 -43
  17. package/dist/{chunk-67CZ2Q5K.cjs → chunk-BSPIGZCC.cjs} +36 -36
  18. package/dist/{chunk-FW7RKWPY.cjs → chunk-D6GEMVHD.cjs} +3 -3
  19. package/dist/{chunk-KEV6F3QN.cjs → chunk-DPNFI5XM.cjs} +100 -100
  20. package/dist/{chunk-6V2M2X3M.cjs → chunk-DTZ6KASI.cjs} +6 -6
  21. package/dist/{chunk-SSKMGH5O.cjs → chunk-DXVGGWLG.cjs} +10 -10
  22. package/dist/{chunk-IO6NN3SL.cjs → chunk-EOUEUYCQ.cjs} +54 -54
  23. package/dist/{chunk-5RMBLOJ5.cjs → chunk-ESGE7CUX.cjs} +14 -14
  24. package/dist/{chunk-ETZFBB7O.cjs → chunk-EXQSIX2I.cjs} +4 -4
  25. package/dist/{chunk-IC4IJJB2.cjs → chunk-F33EAPD2.cjs} +124 -124
  26. package/dist/{chunk-COWMXUHN.cjs → chunk-GK577ZLJ.cjs} +6 -14
  27. package/dist/{chunk-E4MFQKPC.cjs → chunk-GZYRDLJW.cjs} +103 -103
  28. package/dist/{chunk-LFEURIZN.cjs → chunk-HML3JUXF.cjs} +324 -322
  29. package/dist/{chunk-BNHTBLAG.cjs → chunk-J3CFRGZ2.cjs} +17 -17
  30. package/dist/{chunk-USPUZO53.cjs → chunk-KZAQPRTA.cjs} +9 -11
  31. package/dist/{chunk-HTYJUMFB.cjs → chunk-LSLRJJFP.cjs} +2 -2
  32. package/dist/{chunk-TBGQMHCG.cjs → chunk-MINFN3IG.cjs} +8 -8
  33. package/dist/{chunk-KHOB3TES.cjs → chunk-MX52LZ6M.cjs} +6 -6
  34. package/dist/{chunk-OH5TXFRR.cjs → chunk-O4CPT3RK.cjs} +7 -7
  35. package/dist/{chunk-HF3V6WBJ.cjs → chunk-OTHQ2KQW.cjs} +3 -3
  36. package/dist/{chunk-IUDBG3HJ.cjs → chunk-PCQ2HKU3.cjs} +5 -5
  37. package/dist/{chunk-BNG6JOGZ.cjs → chunk-QPHXYE5P.cjs} +27 -27
  38. package/dist/{chunk-UO2EJGRJ.cjs → chunk-QZXCUY36.cjs} +53 -53
  39. package/dist/{chunk-COJG2ATY.cjs → chunk-RIJU4HZ2.cjs} +51 -55
  40. package/dist/{chunk-KKFDRCQF.cjs → chunk-RY7INTYU.cjs} +14 -1
  41. package/dist/{chunk-GI3MMBP3.cjs → chunk-SQ7YHWEP.cjs} +228 -15
  42. package/dist/{chunk-U767P4JU.cjs → chunk-STV6VJ3U.cjs} +21 -21
  43. package/dist/chunk-T54I5ZZY.cjs +62 -0
  44. package/dist/{chunk-UV45EPXN.cjs → chunk-TW5Y4D5I.cjs} +7 -7
  45. package/dist/{chunk-FX35L4Y6.cjs → chunk-XCQ5I27Z.cjs} +3 -3
  46. package/dist/{chunk-AZEO7HBB.cjs → chunk-Y44EF4JW.cjs} +2 -2
  47. package/dist/{chunk-W7OFAROY.cjs → chunk-YSXVRTGT.cjs} +9 -12
  48. package/dist/{chunk-GI6ECCWB.cjs → chunk-ZUGJLCYP.cjs} +1272 -856
  49. package/dist/{chunk-KNN2GCMW.cjs → chunk-ZYAVIRQV.cjs} +25 -25
  50. package/dist/{cloud-tenants-QUL2XPAS.cjs → cloud-tenants-2XFIDDGU.cjs} +28 -29
  51. package/dist/components/case-studies/index.cjs +44 -45
  52. package/dist/components/chat/chat-message-row.d.ts +1 -1
  53. package/dist/components/chat/chat-message-row.d.ts.map +1 -1
  54. package/dist/components/chat/chat-message-row.js +4 -4
  55. package/dist/components/chat/entity-cards/use-cover-image-fallback.d.ts +7 -13
  56. package/dist/components/chat/entity-cards/use-cover-image-fallback.d.ts.map +1 -1
  57. package/dist/components/chat/entity-cards/use-cover-image-fallback.js +2 -8
  58. package/dist/components/chat/hooks/use-chat-attachment-image-gallery.d.ts.map +1 -1
  59. package/dist/components/chat/hooks/use-chat-attachment-image-gallery.js +8 -4
  60. package/dist/components/chat/index.cjs +22 -23
  61. package/dist/components/contact/index.cjs +29 -30
  62. package/dist/components/docs/index.cjs +32 -33
  63. package/dist/components/embeds/index.cjs +29 -30
  64. package/dist/components/faq/index.cjs +30 -31
  65. package/dist/components/features/cloud-tenants/index.d.ts +7 -5
  66. package/dist/components/features/cloud-tenants/index.d.ts.map +1 -1
  67. package/dist/components/features/cloud-tenants/index.js +8 -1
  68. package/dist/components/features/cloud-tenants/single-customer-tenants-table-view.d.ts +26 -0
  69. package/dist/components/features/cloud-tenants/single-customer-tenants-table-view.d.ts.map +1 -0
  70. package/dist/components/features/cloud-tenants/single-customer-tenants-table-view.js +176 -0
  71. package/dist/components/features/cloud-tenants/tenant-access-cell.d.ts +4 -2
  72. package/dist/components/features/cloud-tenants/tenant-access-cell.d.ts.map +1 -1
  73. package/dist/components/features/cloud-tenants/tenant-access-cell.js +3 -2
  74. package/dist/components/features/cloud-tenants/tenant-customer-cell.d.ts +12 -5
  75. package/dist/components/features/cloud-tenants/tenant-customer-cell.d.ts.map +1 -1
  76. package/dist/components/features/cloud-tenants/tenant-customer-cell.js +38 -7
  77. package/dist/components/features/cloud-tenants/tenant-licenses-cell.d.ts +7 -0
  78. package/dist/components/features/cloud-tenants/tenant-licenses-cell.d.ts.map +1 -0
  79. package/dist/components/features/cloud-tenants/tenant-licenses-cell.js +17 -0
  80. package/dist/components/features/cloud-tenants/tenant-presentation.d.ts +19 -0
  81. package/dist/components/features/cloud-tenants/tenant-presentation.d.ts.map +1 -1
  82. package/dist/components/features/cloud-tenants/tenant-presentation.js +24 -3
  83. package/dist/components/features/cloud-tenants/tenant-row.d.ts +35 -8
  84. package/dist/components/features/cloud-tenants/tenant-row.d.ts.map +1 -1
  85. package/dist/components/features/cloud-tenants/tenants-table-columns.d.ts +9 -3
  86. package/dist/components/features/cloud-tenants/tenants-table-columns.d.ts.map +1 -1
  87. package/dist/components/features/cloud-tenants/tenants-table-columns.js +5 -3
  88. package/dist/components/features/cloud-tenants/tenants-table-view.d.ts +27 -6
  89. package/dist/components/features/cloud-tenants/tenants-table-view.d.ts.map +1 -1
  90. package/dist/components/features/cloud-tenants/tenants-table-view.js +75 -17
  91. package/dist/components/features/devices/device-directory.d.ts +18 -0
  92. package/dist/components/features/devices/device-directory.d.ts.map +1 -0
  93. package/dist/components/features/devices/device-directory.js +35 -0
  94. package/dist/components/features/devices/devices-filter-toolbar.d.ts +3 -1
  95. package/dist/components/features/devices/devices-filter-toolbar.d.ts.map +1 -1
  96. package/dist/components/features/devices/devices-filter-toolbar.js +2 -1
  97. package/dist/components/features/devices/devices-panel-view.d.ts +3 -1
  98. package/dist/components/features/devices/devices-panel-view.d.ts.map +1 -1
  99. package/dist/components/features/devices/devices-panel-view.js +11 -2
  100. package/dist/components/features/devices/devices-table-columns.d.ts +17 -3
  101. package/dist/components/features/devices/devices-table-columns.d.ts.map +1 -1
  102. package/dist/components/features/devices/devices-table-columns.js +80 -10
  103. package/dist/components/features/devices/index.d.ts +1 -0
  104. package/dist/components/features/devices/index.d.ts.map +1 -1
  105. package/dist/components/features/devices/index.js +8 -0
  106. package/dist/components/features/devices/types.d.ts +14 -0
  107. package/dist/components/features/devices/types.d.ts.map +1 -1
  108. package/dist/components/features/devices/use-tag-filter-modal.d.ts +1 -0
  109. package/dist/components/features/devices/use-tag-filter-modal.d.ts.map +1 -1
  110. package/dist/components/features/devices/use-tag-filter-modal.js +13 -8
  111. package/dist/components/features/index.cjs +42 -29
  112. package/dist/components/help-center-pages/index.cjs +134 -135
  113. package/dist/components/index.cjs +126 -113
  114. package/dist/components/meeting-scheduler/index.cjs +102 -103
  115. package/dist/components/navigation/app-layout.js +2 -2
  116. package/dist/components/navigation/index.cjs +31 -32
  117. package/dist/components/onboarding-guides/index.cjs +31 -32
  118. package/dist/components/product-demo/index.cjs +39 -40
  119. package/dist/components/related-content/index.cjs +16 -17
  120. package/dist/components/tickets/index.cjs +35 -36
  121. package/dist/components/ui/date-picker.d.ts +2 -0
  122. package/dist/components/ui/date-picker.d.ts.map +1 -1
  123. package/dist/components/ui/date-picker.js +19 -6
  124. package/dist/components/ui/entity-image.d.ts +1 -2
  125. package/dist/components/ui/entity-image.d.ts.map +1 -1
  126. package/dist/components/ui/entity-image.js +4 -8
  127. package/dist/components/ui/index.cjs +28 -29
  128. package/dist/components/ui/markdown/base-components.d.ts +0 -13
  129. package/dist/components/ui/markdown/base-components.d.ts.map +1 -1
  130. package/dist/components/ui/markdown/base-components.js +7 -7
  131. package/dist/components/ui/square-avatar.d.ts.map +1 -1
  132. package/dist/components/ui/square-avatar.js +3 -8
  133. package/dist/{devices-LNB4CYPP.cjs → devices-O3DYGIZB.cjs} +29 -30
  134. package/dist/embed-shims/index.cjs +3 -2
  135. package/dist/embed-shims/next-image.cjs +3 -2
  136. package/dist/embed-shims/next-image.d.ts +2 -0
  137. package/dist/embed-shims/next-image.d.ts.map +1 -1
  138. package/dist/embed-shims/next-image.js +14 -4
  139. package/dist/{embeddable-chat-SJEEJI4N.cjs → embeddable-chat-QD7NFD2H.cjs} +100 -101
  140. package/dist/hooks/index.cjs +27 -16
  141. package/dist/hooks/index.d.ts +1 -0
  142. package/dist/hooks/index.d.ts.map +1 -1
  143. package/dist/hooks/index.js +1 -0
  144. package/dist/hooks/ui/use-content-breakpoint.d.ts +8 -0
  145. package/dist/hooks/ui/use-content-breakpoint.d.ts.map +1 -1
  146. package/dist/hooks/ui/use-content-breakpoint.js +17 -3
  147. package/dist/hooks/ui/use-media-query.d.ts +1 -0
  148. package/dist/hooks/ui/use-media-query.d.ts.map +1 -1
  149. package/dist/hooks/ui/use-media-query.js +3 -1
  150. package/dist/hooks/use-authed-asset-src.d.ts +77 -2
  151. package/dist/hooks/use-authed-asset-src.d.ts.map +1 -1
  152. package/dist/hooks/use-authed-asset-src.js +185 -73
  153. package/dist/hooks/use-authed-image-src.d.ts +11 -4
  154. package/dist/hooks/use-authed-image-src.d.ts.map +1 -1
  155. package/dist/hooks/use-authed-image-src.js +6 -2
  156. package/dist/hooks/use-image-fallback.d.ts +16 -0
  157. package/dist/hooks/use-image-fallback.d.ts.map +1 -0
  158. package/dist/hooks/use-image-fallback.js +14 -0
  159. package/dist/index.cjs +58 -36
  160. package/dist/{knowledge-UTWKB6XG.cjs → knowledge-K7AFNZNO.cjs} +29 -30
  161. package/dist/{logs-PMXIWMBQ.cjs → logs-MZ3BR2FR.cjs} +35 -36
  162. package/dist/{policies-6DCMFDL7.cjs → policies-XVKQ2W7S.cjs} +32 -33
  163. package/dist/{remote-session-SG44CNOK.cjs → remote-session-VOZJXDM4.cjs} +13 -14
  164. package/dist/{scripts-2G7LXW7Z.cjs → scripts-IBPMBS6G.cjs} +35 -36
  165. package/dist/{software-update-MYLKHDHC.cjs → software-update-PXTANMAO.cjs} +32 -33
  166. package/dist/{tickets-board-SQY2Y6QV.cjs → tickets-board-POYZS7BW.cjs} +16 -17
  167. package/dist/utils/app-origins.d.ts +3 -6
  168. package/dist/utils/app-origins.d.ts.map +1 -1
  169. package/dist/utils/app-origins.js +8 -1
  170. package/dist/utils/embed-authed-fetch.d.ts +46 -26
  171. package/dist/utils/embed-authed-fetch.d.ts.map +1 -1
  172. package/dist/utils/embed-authed-fetch.js +24 -8
  173. package/dist/utils/index.cjs +4 -1
  174. package/dist/utils/presentation-for.d.ts +6 -0
  175. package/dist/utils/presentation-for.d.ts.map +1 -0
  176. package/dist/utils/presentation-for.js +7 -0
  177. package/dist/{video-file-player-XMOB234V.cjs → video-file-player-RIOT24NT.cjs} +3 -4
  178. package/package.json +1 -1
  179. package/src/components/chat/chat-message-row.tsx +8 -7
  180. package/src/components/chat/entity-cards/use-cover-image-fallback.ts +8 -28
  181. package/src/components/chat/hooks/use-chat-attachment-image-gallery.tsx +19 -8
  182. package/src/components/features/cloud-tenants/index.ts +8 -3
  183. package/src/components/features/cloud-tenants/single-customer-tenants-table-view.tsx +234 -0
  184. package/src/components/features/cloud-tenants/tenant-access-cell.tsx +12 -5
  185. package/src/components/features/cloud-tenants/tenant-customer-cell.tsx +48 -12
  186. package/src/components/features/cloud-tenants/tenant-licenses-cell.tsx +28 -0
  187. package/src/components/features/cloud-tenants/tenant-presentation.ts +46 -4
  188. package/src/components/features/cloud-tenants/tenant-row.ts +38 -8
  189. package/src/components/features/cloud-tenants/tenants-table-columns.ts +8 -5
  190. package/src/components/features/cloud-tenants/tenants-table-view.tsx +123 -28
  191. package/src/components/features/devices/device-directory.ts +55 -0
  192. package/src/components/features/devices/devices-filter-toolbar.tsx +4 -1
  193. package/src/components/features/devices/devices-panel-view.tsx +12 -2
  194. package/src/components/features/devices/devices-table-columns.tsx +123 -8
  195. package/src/components/features/devices/index.ts +7 -0
  196. package/src/components/features/devices/types.ts +14 -0
  197. package/src/components/features/devices/use-tag-filter-modal.ts +32 -14
  198. package/src/components/navigation/app-layout.tsx +4 -4
  199. package/src/components/ui/date-picker.tsx +21 -3
  200. package/src/components/ui/entity-image.tsx +4 -12
  201. package/src/components/ui/markdown/base-components.tsx +15 -20
  202. package/src/components/ui/square-avatar.tsx +5 -8
  203. package/src/embed-shims/next-image.tsx +34 -3
  204. package/src/hooks/index.ts +1 -0
  205. package/src/hooks/ui/use-content-breakpoint.ts +21 -2
  206. package/src/hooks/ui/use-media-query.ts +1 -0
  207. package/src/hooks/use-authed-asset-src.ts +323 -107
  208. package/src/hooks/use-authed-image-src.ts +15 -5
  209. package/src/hooks/use-image-fallback.ts +31 -0
  210. package/src/utils/app-origins.ts +12 -7
  211. package/src/utils/embed-authed-fetch.ts +71 -32
  212. package/src/utils/presentation-for.ts +10 -0
  213. package/dist/chunk-UAI4VMEF.cjs +0 -46
  214. package/dist/chunk-YSDB6HGQ.cjs +0 -102
@@ -1,30 +1,30 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
2
2
 
3
3
 
4
- var _chunk6V2M2X3Mcjs = require('../../chunk-6V2M2X3M.cjs');
4
+ var _chunkDTZ6KASIcjs = require('../../chunk-DTZ6KASI.cjs');
5
5
 
6
6
 
7
7
 
8
8
 
9
9
 
10
10
 
11
- var _chunkQOW2GP3Vcjs = require('../../chunk-QOW2GP3V.cjs');
12
- require('../../chunk-GI6ECCWB.cjs');
13
- require('../../chunk-USPUZO53.cjs');
14
- require('../../chunk-COJG2ATY.cjs');
15
- require('../../chunk-P63CRPWI.cjs');
11
+ var _chunk2P72KAG5cjs = require('../../chunk-2P72KAG5.cjs');
12
+ require('../../chunk-ZUGJLCYP.cjs');
13
+ require('../../chunk-KZAQPRTA.cjs');
14
+ require('../../chunk-RIJU4HZ2.cjs');
15
+ require('../../chunk-4H3J57AN.cjs');
16
16
  require('../../chunk-HQQE74RO.cjs');
17
17
  require('../../chunk-DEY6XXGO.cjs');
18
- require('../../chunk-UO2EJGRJ.cjs');
18
+ require('../../chunk-QZXCUY36.cjs');
19
19
  require('../../chunk-24I6RFVU.cjs');
20
- require('../../chunk-IUDBG3HJ.cjs');
20
+ require('../../chunk-PCQ2HKU3.cjs');
21
21
  require('../../chunk-MZ4KBSH7.cjs');
22
22
  require('../../chunk-ZZDFMUEU.cjs');
23
- require('../../chunk-IC4IJJB2.cjs');
24
- require('../../chunk-LFEURIZN.cjs');
23
+ require('../../chunk-F33EAPD2.cjs');
24
+ require('../../chunk-HML3JUXF.cjs');
25
25
  require('../../chunk-OT6P57ZS.cjs');
26
- require('../../chunk-EIACEY2L.cjs');
27
- require('../../chunk-U767P4JU.cjs');
26
+ require('../../chunk-65NMKAPQ.cjs');
27
+ require('../../chunk-STV6VJ3U.cjs');
28
28
  require('../../chunk-KXFIYO4O.cjs');
29
29
  require('../../chunk-PGAMWM6C.cjs');
30
30
  require('../../chunk-7HH4Y27U.cjs');
@@ -1817,22 +1817,22 @@ require('../../chunk-LMBYZITR.cjs');
1817
1817
  require('../../chunk-TMVC7S2R.cjs');
1818
1818
  require('../../chunk-IYHH5EIO.cjs');
1819
1819
  require('../../chunk-XIBCMGBW.cjs');
1820
- require('../../chunk-OH5TXFRR.cjs');
1821
- require('../../chunk-G7GF4PWA.cjs');
1822
- require('../../chunk-FW7RKWPY.cjs');
1823
- require('../../chunk-IGVAPIEW.cjs');
1820
+ require('../../chunk-O4CPT3RK.cjs');
1821
+ require('../../chunk-77GX573I.cjs');
1822
+ require('../../chunk-D6GEMVHD.cjs');
1823
+ require('../../chunk-6C4OR4MZ.cjs');
1824
1824
  require('../../chunk-JKX2C3I2.cjs');
1825
1825
  require('../../chunk-WWUSFOJ7.cjs');
1826
1826
  require('../../chunk-SKI6NKOE.cjs');
1827
1827
  require('../../chunk-EWPR7662.cjs');
1828
1828
  require('../../chunk-IX2E3AN7.cjs');
1829
1829
  require('../../chunk-7DNL734S.cjs');
1830
- require('../../chunk-2W22LY3W.cjs');
1831
- require('../../chunk-NMWLXHFH.cjs');
1832
- require('../../chunk-HTYJUMFB.cjs');
1833
- require('../../chunk-W7OFAROY.cjs');
1834
- require('../../chunk-O3EKOXFZ.cjs');
1835
- require('../../chunk-SSKMGH5O.cjs');
1830
+ require('../../chunk-2JCA7BRK.cjs');
1831
+ require('../../chunk-3GJ75OUL.cjs');
1832
+ require('../../chunk-LSLRJJFP.cjs');
1833
+ require('../../chunk-YSXVRTGT.cjs');
1834
+ require('../../chunk-AYMY2VNB.cjs');
1835
+ require('../../chunk-DXVGGWLG.cjs');
1836
1836
  require('../../chunk-X432Y6RM.cjs');
1837
1837
  require('../../chunk-S5C3OZCO.cjs');
1838
1838
  require('../../chunk-32ASZMTV.cjs');
@@ -1842,15 +1842,14 @@ require('../../chunk-6VOOPMP5.cjs');
1842
1842
  require('../../chunk-ORO54HDF.cjs');
1843
1843
  require('../../chunk-RUHKTWGB.cjs');
1844
1844
  require('../../chunk-BLH2SFOO.cjs');
1845
- require('../../chunk-UAI4VMEF.cjs');
1846
- require('../../chunk-COWMXUHN.cjs');
1847
- require('../../chunk-YSDB6HGQ.cjs');
1848
- require('../../chunk-ETZFBB7O.cjs');
1849
- require('../../chunk-FX35L4Y6.cjs');
1850
- require('../../chunk-KKFDRCQF.cjs');
1845
+ require('../../chunk-T54I5ZZY.cjs');
1846
+ require('../../chunk-GK577ZLJ.cjs');
1847
+ require('../../chunk-EXQSIX2I.cjs');
1848
+ require('../../chunk-XCQ5I27Z.cjs');
1849
+ require('../../chunk-RY7INTYU.cjs');
1851
1850
  require('../../chunk-NTPX5GXI.cjs');
1852
- require('../../chunk-GI3MMBP3.cjs');
1853
- require('../../chunk-GG466XFQ.cjs');
1851
+ require('../../chunk-6DMH4GXN.cjs');
1852
+ require('../../chunk-SQ7YHWEP.cjs');
1854
1853
  require('../../chunk-UJ7AXHRZ.cjs');
1855
1854
  require('../../chunk-HXURNKXI.cjs');
1856
1855
  require('../../chunk-VCFQHPOO.cjs');
@@ -1869,4 +1868,4 @@ require('../../chunk-QDB2JO55.cjs');
1869
1868
 
1870
1869
 
1871
1870
 
1872
- exports.FAQ_SECTION_SKELETON_QUESTIONS = _chunkQOW2GP3Vcjs.FAQ_SECTION_SKELETON_QUESTIONS; exports.FaqAskCard = _chunkQOW2GP3Vcjs.FaqAskCard; exports.FaqDocumentPage = _chunk6V2M2X3Mcjs.FaqDocumentPage; exports.FaqSection = _chunkQOW2GP3Vcjs.FaqSection; exports.PAGE_FAQ_SECTION_ID = _chunkQOW2GP3Vcjs.PAGE_FAQ_SECTION_ID; exports.SharedPageFaq = _chunkQOW2GP3Vcjs.SharedPageFaq;
1871
+ exports.FAQ_SECTION_SKELETON_QUESTIONS = _chunk2P72KAG5cjs.FAQ_SECTION_SKELETON_QUESTIONS; exports.FaqAskCard = _chunk2P72KAG5cjs.FaqAskCard; exports.FaqDocumentPage = _chunkDTZ6KASIcjs.FaqDocumentPage; exports.FaqSection = _chunk2P72KAG5cjs.FaqSection; exports.PAGE_FAQ_SECTION_ID = _chunk2P72KAG5cjs.PAGE_FAQ_SECTION_ID; exports.SharedPageFaq = _chunk2P72KAG5cjs.SharedPageFaq;
@@ -1,14 +1,16 @@
1
- export { TenantsTableView } from './tenants-table-view';
2
- export type { TenantsTableViewProps } from './tenants-table-view';
1
+ export { TENANTS_TABLE_FILTER_COLUMNS, TenantsTableView } from './tenants-table-view';
2
+ export type { TenantsTableFilterColumn, TenantsTableFilters, TenantsTableViewProps } from './tenants-table-view';
3
3
  export { TenantCell } from './tenant-cell';
4
4
  export type { TenantCellProps } from './tenant-cell';
5
5
  export { TenantCustomerCell } from './tenant-customer-cell';
6
6
  export type { TenantCustomerCellProps } from './tenant-customer-cell';
7
+ export { TenantLicensesCell } from './tenant-licenses-cell';
8
+ export type { TenantLicensesCellProps } from './tenant-licenses-cell';
7
9
  export { TenantAccessCell } from './tenant-access-cell';
8
10
  export type { TenantAccessCellProps } from './tenant-access-cell';
9
11
  export { TENANT_COLUMNS, TENANTS_TABLE_COLUMNS } from './tenants-table-columns';
10
12
  export type { TenantsTableColumn } from './tenants-table-columns';
11
- export type { TenantRow } from './tenant-row';
12
- export { accessStateTag, formatLastRead, lastReadAt, providerMark, TENANT_EMPTY_VALUE, usersCountLabel, } from './tenant-presentation';
13
- export type { ProviderLogo, ProviderMark, TenantStatusTag, TenantAccessState, TenantProvider, } from './tenant-presentation';
13
+ export type { MultiCustomerTenantRow, TenantCustomer, TenantLicenseSummary, TenantRow } from './tenant-row';
14
+ export { accessStateTag, formatLastRead, lastReadAt, licenseSummaryLines, providerMark, TENANT_EMPTY_VALUE, unattributedLabel, usersCountLabel, } from './tenant-presentation';
15
+ export type { ProviderLogo, ProviderMark, TenantLicenseLines, TenantStatusTag, TenantAccessState, TenantProvider, } from './tenant-presentation';
14
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/features/cloud-tenants/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,YAAY,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,YAAY,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,YAAY,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChF,YAAY,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,YAAY,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EACL,cAAc,EACd,cAAc,EACd,UAAU,EACV,YAAY,EACZ,kBAAkB,EAClB,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,cAAc,GACf,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/features/cloud-tenants/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,4BAA4B,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACtF,YAAY,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AACjH,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,YAAY,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,YAAY,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,YAAY,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChF,YAAY,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,YAAY,EAAE,sBAAsB,EAAE,cAAc,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC5G,OAAO,EACL,cAAc,EACd,cAAc,EACd,UAAU,EACV,mBAAmB,EACnB,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,cAAc,GACf,MAAM,uBAAuB,CAAC"}
@@ -1,27 +1,34 @@
1
- import { TenantsTableView } from "./tenants-table-view.js";
1
+ import { TENANTS_TABLE_FILTER_COLUMNS, TenantsTableView } from "./tenants-table-view.js";
2
2
  import { TenantCell } from "./tenant-cell.js";
3
3
  import { TenantCustomerCell } from "./tenant-customer-cell.js";
4
+ import { TenantLicensesCell } from "./tenant-licenses-cell.js";
4
5
  import { TenantAccessCell } from "./tenant-access-cell.js";
5
6
  import { TENANT_COLUMNS, TENANTS_TABLE_COLUMNS } from "./tenants-table-columns.js";
6
7
  import {
7
8
  accessStateTag,
8
9
  formatLastRead,
9
10
  lastReadAt,
11
+ licenseSummaryLines,
10
12
  providerMark,
11
13
  TENANT_EMPTY_VALUE,
14
+ unattributedLabel,
12
15
  usersCountLabel
13
16
  } from "./tenant-presentation.js";
14
17
  export {
15
18
  TENANTS_TABLE_COLUMNS,
19
+ TENANTS_TABLE_FILTER_COLUMNS,
16
20
  TENANT_COLUMNS,
17
21
  TENANT_EMPTY_VALUE,
18
22
  TenantAccessCell,
19
23
  TenantCell,
20
24
  TenantCustomerCell,
25
+ TenantLicensesCell,
21
26
  TenantsTableView,
22
27
  accessStateTag,
23
28
  formatLastRead,
24
29
  lastReadAt,
30
+ licenseSummaryLines,
25
31
  providerMark,
32
+ unattributedLabel,
26
33
  usersCountLabel
27
34
  };
@@ -0,0 +1,26 @@
1
+ import type { TenantRow } from './tenant-row';
2
+ export interface SingleCustomerTenantsTableViewProps {
3
+ /** The default: one customer per tenant, no licences and no funnels. */
4
+ variant?: 'single-customer';
5
+ rows: TenantRow[];
6
+ /** Where a row leads: the row is a link to it, and its last cell opens it in a new tab. */
7
+ getHref: (row: TenantRow) => string;
8
+ /** The search the rows answer; named by the "no match" message. */
9
+ search?: string;
10
+ /** Funnels belong to the multi-customer list. */
11
+ filters?: never;
12
+ /** The rows on screen are the previous result of a search still loading: they dim. */
13
+ isPending?: boolean;
14
+ /** All matching tenants, loaded or not. Default: the rows given. */
15
+ totalCount?: number;
16
+ stickyHeaderOffset?: string;
17
+ skeletonRows?: number;
18
+ hasNextPage?: boolean;
19
+ isFetchingNextPage?: boolean;
20
+ onLoadMore?: () => void;
21
+ /** The clock "Last read" is relative to. Default: the moment of the render. */
22
+ now?: Date;
23
+ }
24
+ /** The tenants list: tenant, customer, access state and a way into each tenant's details. */
25
+ export declare function SingleCustomerTenantsTableView({ rows, getHref, search, isPending, totalCount, stickyHeaderOffset, skeletonRows, hasNextPage, isFetchingNextPage, onLoadMore, now, }: SingleCustomerTenantsTableViewProps): import("react").JSX.Element;
26
+ //# sourceMappingURL=single-customer-tenants-table-view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"single-customer-tenants-table-view.d.ts","sourceRoot":"","sources":["../../../../src/components/features/cloud-tenants/single-customer-tenants-table-view.tsx"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AA0F9C,MAAM,WAAW,mCAAmC;IAClD,wEAAwE;IACxE,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,IAAI,EAAE,SAAS,EAAE,CAAC;IAClB,2FAA2F;IAC3F,OAAO,EAAE,CAAC,GAAG,EAAE,SAAS,KAAK,MAAM,CAAC;IACpC,mEAAmE;IACnE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iDAAiD;IACjD,OAAO,CAAC,EAAE,KAAK,CAAC;IAChB,sFAAsF;IACtF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,+EAA+E;IAC/E,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ;AAKD,6FAA6F;AAC7F,wBAAgB,8BAA8B,CAAC,EAC7C,IAAI,EACJ,OAAO,EACP,MAAW,EACX,SAAiB,EACjB,UAAU,EACV,kBAAkB,EAClB,YAA0C,EAC1C,WAAmB,EACnB,kBAA0B,EAC1B,UAAU,EACV,GAAG,GACJ,EAAE,mCAAmC,+BAuFrC"}
@@ -0,0 +1,176 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { useMemo } from "react";
4
+ import { cn } from "../../../utils/cn.js";
5
+ import { openInNewTab } from "../../../utils/open-in-new-tab.js";
6
+ import { ArrowRightUpIcon } from "../../icons-v2-generated/arrows/arrow-right-up-icon.js";
7
+ import { Button } from "../../ui/button/index.js";
8
+ import { DataTable, dataTableLoadingRows, useDataTable } from "../../ui/data-table/index.js";
9
+ import { useLoadingScope } from "../../ui/loading-scope.js";
10
+ import { SquareAvatar } from "../../ui/square-avatar.js";
11
+ import { Tag } from "../../ui/tag.js";
12
+ import { TruncateText } from "../../ui/truncate-text.js";
13
+ import { TenantCell } from "./tenant-cell.js";
14
+ import { accessStateTag, formatLastRead, usersCountLabel } from "./tenant-presentation.js";
15
+ const SINGLE_CUSTOMER_TENANT_COLUMNS = {
16
+ tenant: { id: "tenant", header: "Tenant", width: "flex-1 min-w-0" },
17
+ customer: { id: "customer", header: "Customers", width: "w-[220px] content-lg:w-[340px]", hideAt: "md" },
18
+ access: { id: "access", header: "Access", width: "w-[200px] content-lg:w-[216px]" },
19
+ open: { id: "open", width: "w-12 shrink-0 flex-none", hideAt: "md", align: "right" }
20
+ };
21
+ const getRowId = (row) => row.id;
22
+ const columnMeta = ({ width, hideAt, align }) => ({ width, hideAt, align });
23
+ const loadingTenant = (id) => ({
24
+ id,
25
+ name: "",
26
+ provider: "",
27
+ customer: { name: "" },
28
+ accessState: ""
29
+ });
30
+ function SingleCustomerTenantCustomerCell({
31
+ name,
32
+ imageUrl,
33
+ userCount
34
+ }) {
35
+ const loading = useLoadingScope();
36
+ return /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-col justify-center", children: [
37
+ /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center gap-[var(--spacing-system-xxs)]", children: [
38
+ /* @__PURE__ */ jsx(SquareAvatar, { src: imageUrl ?? void 0, alt: name, fallback: name, size: "xs", variant: "square" }),
39
+ /* @__PURE__ */ jsx(TruncateText, { children: name })
40
+ ] }),
41
+ /* @__PURE__ */ jsx(TruncateText, { variant: "h6", tone: "secondary", loading, children: usersCountLabel(userCount) })
42
+ ] });
43
+ }
44
+ function SingleCustomerTenantAccessCell({
45
+ accessState,
46
+ lastReadAt,
47
+ now
48
+ }) {
49
+ const loading = useLoadingScope();
50
+ return /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-col justify-center gap-[var(--spacing-system-xxs)]", children: [
51
+ /* @__PURE__ */ jsx(Tag, { ...accessStateTag(accessState), loading, className: "self-start" }),
52
+ /* @__PURE__ */ jsx(TruncateText, { variant: "h6", tone: "secondary", loading, children: `Last read: ${formatLastRead(lastReadAt, now)}` })
53
+ ] });
54
+ }
55
+ function OpenTenantButton({ href, name }) {
56
+ const loading = useLoadingScope();
57
+ return (
58
+ // The row itself is the details link; a nested `<a>` is invalid, so this opens the same href.
59
+ /* @__PURE__ */ jsx("div", { "data-no-row-click": true, className: "pointer-events-auto flex items-center justify-end", children: /* @__PURE__ */ jsx(
60
+ Button,
61
+ {
62
+ onClick: loading ? void 0 : openInNewTab(href),
63
+ disabled: loading,
64
+ variant: "outline",
65
+ size: "icon",
66
+ leftIcon: /* @__PURE__ */ jsx(ArrowRightUpIcon, { className: "h-5 w-5" }),
67
+ "aria-label": `Open ${name} in new tab`,
68
+ className: "bg-ods-card"
69
+ }
70
+ ) })
71
+ );
72
+ }
73
+ const TENANTS_TABLE_SKELETON_ROWS = 20;
74
+ function SingleCustomerTenantsTableView({
75
+ rows,
76
+ getHref,
77
+ search = "",
78
+ isPending = false,
79
+ totalCount,
80
+ stickyHeaderOffset,
81
+ skeletonRows = TENANTS_TABLE_SKELETON_ROWS,
82
+ hasNextPage = false,
83
+ isFetchingNextPage = false,
84
+ onLoadMore,
85
+ now
86
+ }) {
87
+ const columns = useMemo(
88
+ () => [
89
+ {
90
+ id: SINGLE_CUSTOMER_TENANT_COLUMNS.tenant.id,
91
+ header: SINGLE_CUSTOMER_TENANT_COLUMNS.tenant.header,
92
+ cell: ({ row }) => /* @__PURE__ */ jsx(TenantCell, { provider: row.original.provider, name: row.original.name, domain: row.original.domain }),
93
+ enableSorting: false,
94
+ meta: columnMeta(SINGLE_CUSTOMER_TENANT_COLUMNS.tenant)
95
+ },
96
+ {
97
+ id: SINGLE_CUSTOMER_TENANT_COLUMNS.customer.id,
98
+ header: SINGLE_CUSTOMER_TENANT_COLUMNS.customer.header,
99
+ cell: ({ row }) => /* @__PURE__ */ jsx(
100
+ SingleCustomerTenantCustomerCell,
101
+ {
102
+ name: row.original.customer.name,
103
+ imageUrl: row.original.customer.imageUrl,
104
+ userCount: row.original.userCount
105
+ }
106
+ ),
107
+ enableSorting: false,
108
+ meta: columnMeta(SINGLE_CUSTOMER_TENANT_COLUMNS.customer)
109
+ },
110
+ {
111
+ id: SINGLE_CUSTOMER_TENANT_COLUMNS.access.id,
112
+ header: SINGLE_CUSTOMER_TENANT_COLUMNS.access.header,
113
+ cell: ({ row }) => /* @__PURE__ */ jsx(
114
+ SingleCustomerTenantAccessCell,
115
+ {
116
+ accessState: row.original.accessState,
117
+ lastReadAt: row.original.lastReadAt,
118
+ now
119
+ }
120
+ ),
121
+ enableSorting: false,
122
+ meta: columnMeta(SINGLE_CUSTOMER_TENANT_COLUMNS.access)
123
+ },
124
+ {
125
+ id: SINGLE_CUSTOMER_TENANT_COLUMNS.open.id,
126
+ cell: ({ row }) => /* @__PURE__ */ jsx(OpenTenantButton, { href: getHref(row.original), name: row.original.name }),
127
+ enableSorting: false,
128
+ meta: columnMeta(SINGLE_CUSTOMER_TENANT_COLUMNS.open)
129
+ }
130
+ ],
131
+ [getHref, now]
132
+ );
133
+ const loading = useLoadingScope();
134
+ const loadingRows = useMemo(
135
+ () => loading ? dataTableLoadingRows(skeletonRows, loadingTenant) : null,
136
+ [loading, skeletonRows]
137
+ );
138
+ const table = useDataTable({ data: loadingRows ?? rows, columns, getRowId, enableSorting: false });
139
+ return (
140
+ // Dim, don't unmount, the stale rows while a deferred search refetches.
141
+ /* @__PURE__ */ jsx("div", { className: cn("transition-opacity duration-200", isPending && "opacity-60"), children: /* @__PURE__ */ jsxs(DataTable, { table, children: [
142
+ /* @__PURE__ */ jsx(
143
+ DataTable.Header,
144
+ {
145
+ stickyHeader: stickyHeaderOffset !== void 0,
146
+ stickyHeaderOffset,
147
+ rightSlot: /* @__PURE__ */ jsx(DataTable.RowCount, { itemName: "result", totalCount: totalCount ?? rows.length, loading })
148
+ }
149
+ ),
150
+ /* @__PURE__ */ jsx(
151
+ DataTable.Body,
152
+ {
153
+ loadingCells: true,
154
+ skeletonRows,
155
+ emptyState: {
156
+ title: "No tenants match",
157
+ description: `Nothing matches "${search}". Try a different name, domain or customer.`
158
+ },
159
+ rowClassName: "mb-[var(--spacing-system-xxs)]",
160
+ rowHref: getHref
161
+ }
162
+ ),
163
+ rows.length > 0 && onLoadMore && /* @__PURE__ */ jsx(
164
+ DataTable.InfiniteFooter,
165
+ {
166
+ hasNextPage,
167
+ isFetchingNextPage,
168
+ onLoadMore
169
+ }
170
+ )
171
+ ] }) })
172
+ );
173
+ }
174
+ export {
175
+ SingleCustomerTenantsTableView
176
+ };
@@ -1,9 +1,11 @@
1
1
  export interface TenantAccessCellProps {
2
2
  accessState: string;
3
3
  lastReadAt?: string | null;
4
+ /** A person paused the sync: said instead of the last read. */
5
+ syncPaused?: boolean;
4
6
  /** The clock "Last read" is relative to. Default: the moment of the render. */
5
7
  now?: Date;
6
8
  }
7
- /** ACCESS column: the access tag over "Last read: ...". */
8
- export declare function TenantAccessCell({ accessState, lastReadAt, now }: TenantAccessCellProps): import("react").JSX.Element;
9
+ /** ACCESS column: the access tag over "Last read: ..." or "Sync paused"; a phone keeps the tag alone (Figma 3033-9343). */
10
+ export declare function TenantAccessCell({ accessState, lastReadAt, syncPaused, now }: TenantAccessCellProps): import("react").JSX.Element;
9
11
  //# sourceMappingURL=tenant-access-cell.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tenant-access-cell.d.ts","sourceRoot":"","sources":["../../../../src/components/features/cloud-tenants/tenant-access-cell.tsx"],"names":[],"mappings":"AAOA,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,+EAA+E;IAC/E,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ;AAED,2DAA2D;AAC3D,wBAAgB,gBAAgB,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,qBAAqB,+BAWvF"}
1
+ {"version":3,"file":"tenant-access-cell.d.ts","sourceRoot":"","sources":["../../../../src/components/features/cloud-tenants/tenant-access-cell.tsx"],"names":[],"mappings":"AAOA,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,+DAA+D;IAC/D,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,+EAA+E;IAC/E,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ;AAED,2HAA2H;AAC3H,wBAAgB,gBAAgB,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,UAAkB,EAAE,GAAG,EAAE,EAAE,qBAAqB,+BAgB3G"}
@@ -4,11 +4,12 @@ import { useLoadingScope } from "../../ui/loading-scope.js";
4
4
  import { Tag } from "../../ui/tag.js";
5
5
  import { TruncateText } from "../../ui/truncate-text.js";
6
6
  import { accessStateTag, formatLastRead } from "./tenant-presentation.js";
7
- function TenantAccessCell({ accessState, lastReadAt, now }) {
7
+ function TenantAccessCell({ accessState, lastReadAt, syncPaused = false, now }) {
8
8
  const loading = useLoadingScope();
9
+ const line = syncPaused ? "Sync paused" : lastReadAt ? `Last read: ${formatLastRead(lastReadAt, now)}` : null;
9
10
  return /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-col justify-center gap-[var(--spacing-system-xxs)]", children: [
10
11
  /* @__PURE__ */ jsx(Tag, { ...accessStateTag(accessState), loading, className: "self-start" }),
11
- /* @__PURE__ */ jsx(TruncateText, { variant: "h6", tone: "secondary", loading, children: `Last read: ${formatLastRead(lastReadAt, now)}` })
12
+ (loading || line) && /* @__PURE__ */ jsx("div", { className: "hidden min-w-0 content-md:block", children: /* @__PURE__ */ jsx(TruncateText, { variant: "h6", tone: "secondary", loading, children: line ?? "" }) })
12
13
  ] });
13
14
  }
14
15
  export {
@@ -1,9 +1,16 @@
1
+ import type { TenantCustomer } from './tenant-row';
1
2
  export interface TenantCustomerCellProps {
2
- name: string;
3
- /** A URL the browser can load as is. */
4
- imageUrl?: string | null;
3
+ /** In the host's order: the cell names the first and counts the rest. */
4
+ customers: readonly TenantCustomer[];
5
5
  userCount?: number | null;
6
+ /** Users no customer's rule claims: while there are any, the count line says how many, in the warning colour. */
7
+ unattributedUserCount?: number | null;
8
+ /** Nothing has been read from this directory yet: the count line says so. */
9
+ neverRead?: boolean;
6
10
  }
7
- /** CUSTOMERS column: customer logo + name over the synced user count. */
8
- export declare function TenantCustomerCell({ name, imageUrl, userCount }: TenantCustomerCellProps): import("react").JSX.Element;
11
+ /**
12
+ * CUSTOMERS column: the first customer's logo + name and "+N" for the rest, over the synced user count — or
13
+ * "30 of 412 unattributed" while some users belong to no customer, or "Never read" before the first read.
14
+ */
15
+ export declare function TenantCustomerCell({ customers, userCount, unattributedUserCount, neverRead, }: TenantCustomerCellProps): import("react").JSX.Element;
9
16
  //# sourceMappingURL=tenant-customer-cell.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tenant-customer-cell.d.ts","sourceRoot":"","sources":["../../../../src/components/features/cloud-tenants/tenant-customer-cell.tsx"],"names":[],"mappings":"AAOA,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,yEAAyE;AACzE,wBAAgB,kBAAkB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,uBAAuB,+BAcxF"}
1
+ {"version":3,"file":"tenant-customer-cell.d.ts","sourceRoot":"","sources":["../../../../src/components/features/cloud-tenants/tenant-customer-cell.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,MAAM,WAAW,uBAAuB;IACtC,yEAAyE;IACzE,SAAS,EAAE,SAAS,cAAc,EAAE,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,iHAAiH;IACjH,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,6EAA6E;IAC7E,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,SAAS,EACT,SAAS,EACT,qBAAqB,EACrB,SAAiB,GAClB,EAAE,uBAAuB,+BAsCzB"}
@@ -3,15 +3,46 @@ import { jsx, jsxs } from "react/jsx-runtime";
3
3
  import { useLoadingScope } from "../../ui/loading-scope.js";
4
4
  import { SquareAvatar } from "../../ui/square-avatar.js";
5
5
  import { TruncateText } from "../../ui/truncate-text.js";
6
- import { usersCountLabel } from "./tenant-presentation.js";
7
- function TenantCustomerCell({ name, imageUrl, userCount }) {
6
+ import { lowercaseUsersCountLabel, TENANT_EMPTY_VALUE, unattributedLabel } from "./tenant-presentation.js";
7
+ function TenantCustomerCell({
8
+ customers,
9
+ userCount,
10
+ unattributedUserCount,
11
+ neverRead = false
12
+ }) {
8
13
  const loading = useLoadingScope();
14
+ const [first] = customers;
15
+ const more = customers.length - 1;
16
+ const unattributed = unattributedLabel(unattributedUserCount, userCount);
9
17
  return /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-col justify-center", children: [
10
- /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center gap-[var(--spacing-system-xxs)]", children: [
11
- /* @__PURE__ */ jsx(SquareAvatar, { src: imageUrl ?? void 0, alt: name, fallback: name, size: "xs", variant: "square" }),
12
- /* @__PURE__ */ jsx(TruncateText, { children: name })
13
- ] }),
14
- /* @__PURE__ */ jsx(TruncateText, { variant: "h6", tone: "secondary", loading, children: usersCountLabel(userCount) })
18
+ first ? /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center gap-[var(--spacing-system-xxs)]", children: [
19
+ /* @__PURE__ */ jsx(
20
+ SquareAvatar,
21
+ {
22
+ src: first.imageUrl ?? void 0,
23
+ alt: first.name,
24
+ fallback: first.name,
25
+ size: "xs",
26
+ variant: "square"
27
+ }
28
+ ),
29
+ /* @__PURE__ */ jsx(TruncateText, { children: first.name }),
30
+ more > 0 && /* @__PURE__ */ jsxs("span", { className: "shrink-0 text-ods-text-secondary text-h4", children: [
31
+ "+",
32
+ more,
33
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: more === 1 ? " more customer" : " more customers" })
34
+ ] })
35
+ ] }) : /* @__PURE__ */ jsx(TruncateText, { children: TENANT_EMPTY_VALUE }),
36
+ /* @__PURE__ */ jsx(
37
+ TruncateText,
38
+ {
39
+ variant: "h6",
40
+ tone: "secondary",
41
+ loading,
42
+ className: unattributed ? "text-ods-warning" : void 0,
43
+ children: unattributed ?? (neverRead ? "Never read" : lowercaseUsersCountLabel(userCount))
44
+ }
45
+ )
15
46
  ] });
16
47
  }
17
48
  export {
@@ -0,0 +1,7 @@
1
+ import type { TenantLicenseSummary } from './tenant-row';
2
+ export interface TenantLicensesCellProps {
3
+ licenses?: TenantLicenseSummary | null;
4
+ }
5
+ /** LICENCES column: assigned of purchased over what is unused (Figma 3025-3536). */
6
+ export declare function TenantLicensesCell({ licenses }: TenantLicensesCellProps): import("react").JSX.Element;
7
+ //# sourceMappingURL=tenant-licenses-cell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenant-licenses-cell.d.ts","sourceRoot":"","sources":["../../../../src/components/features/cloud-tenants/tenant-licenses-cell.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEzD,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;CACxC;AAED,oFAAoF;AACpF,wBAAgB,kBAAkB,CAAC,EAAE,QAAQ,EAAE,EAAE,uBAAuB,+BAcvE"}
@@ -0,0 +1,17 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { cn } from "../../../utils/cn.js";
4
+ import { useLoadingScope } from "../../ui/loading-scope.js";
5
+ import { TruncateText } from "../../ui/truncate-text.js";
6
+ import { licenseSummaryLines } from "./tenant-presentation.js";
7
+ function TenantLicensesCell({ licenses }) {
8
+ const loading = useLoadingScope();
9
+ const { value, detail, warning } = licenseSummaryLines(licenses);
10
+ return /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-col justify-center", children: [
11
+ /* @__PURE__ */ jsx(TruncateText, { loading, children: value }),
12
+ (loading || detail) && /* @__PURE__ */ jsx(TruncateText, { variant: "h6", tone: "secondary", loading, className: cn(warning && "text-ods-warning"), children: detail ?? "" })
13
+ ] });
14
+ }
15
+ export {
16
+ TenantLicensesCell
17
+ };
@@ -1,5 +1,6 @@
1
1
  import type { ComponentType, SVGProps } from 'react';
2
2
  import type { TagProps } from '../../ui/tag';
3
+ import type { TenantLicenseSummary } from './tenant-row';
3
4
  /** What a cell shows when it has no value. */
4
5
  export declare const TENANT_EMPTY_VALUE = "\u2014";
5
6
  type TagVariant = NonNullable<TagProps['variant']>;
@@ -38,5 +39,23 @@ export declare function lastReadAt(connection: {
38
39
  export declare function formatLastRead(iso: string | null | undefined, now?: Date): string;
39
40
  /** "227 Users" under the customer, the empty mark before the first read. */
40
41
  export declare function usersCountLabel(count: number | null | undefined): string;
42
+ /** The multi-customer list's count line (Figma 3025-3536): "227 users", the empty mark before the first read. */
43
+ export declare function lowercaseUsersCountLabel(count: number | null | undefined): string;
44
+ /**
45
+ * "30 of 412 unattributed" while some synced users belong to no customer (no customer's rule claims them), or `null`
46
+ * while every user is attributed or nothing has been read.
47
+ */
48
+ export declare function unattributedLabel(unattributed: number | null | undefined, users: number | null | undefined): string | null;
49
+ export interface TenantLicenseLines {
50
+ value: string;
51
+ detail: string | null;
52
+ /** The detail is worth a look: draw it in the warning colour. */
53
+ warning: boolean;
54
+ }
55
+ /**
56
+ * The LICENCES cell: "118 of 120" over "2 unused"; "88 assigned" over "Total not available" where the provider reports
57
+ * no purchased seats; the empty mark until the numbers have been read.
58
+ */
59
+ export declare function licenseSummaryLines(summary: TenantLicenseSummary | null | undefined): TenantLicenseLines;
41
60
  export {};
42
61
  //# sourceMappingURL=tenant-presentation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tenant-presentation.d.ts","sourceRoot":"","sources":["../../../../src/components/features/cloud-tenants/tenant-presentation.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAMrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE7C,8CAA8C;AAC9C,eAAO,MAAM,kBAAkB,WAAM,CAAC;AAEtC,KAAK,UAAU,GAAG,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;AAEnD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,UAAU,CAAC;CACrB;AAED,2DAA2D;AAC3D,MAAM,MAAM,iBAAiB,GAC3B,cAAc,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,WAAW,GAAG,iBAAiB,GAAG,eAAe,CAAC;AAE5G,oDAAoD;AACpD,MAAM,MAAM,cAAc,GAAG,eAAe,GAAG,kBAAkB,CAAC;AAmBlE,iFAAiF;AACjF,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,eAAe,CAEhF;AAED,kGAAkG;AAClG,MAAM,MAAM,YAAY,GAAG,aAAa,CACtC;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,YAAY,CAAC,CAC7F,CAAC;AAEF,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,YAAY,CAAC;CACpB;AAOD,iGAAiG;AACjG,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,YAAY,CAE9E;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE;IAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,GAAG,IAAI,CAEvF;AAaD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,GAAG,GAAE,IAAiB,GAAG,MAAM,CAI7F;AAED,4EAA4E;AAC5E,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAGxE"}
1
+ {"version":3,"file":"tenant-presentation.d.ts","sourceRoot":"","sources":["../../../../src/components/features/cloud-tenants/tenant-presentation.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAOrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEzD,8CAA8C;AAC9C,eAAO,MAAM,kBAAkB,WAAM,CAAC;AAEtC,KAAK,UAAU,GAAG,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;AAEnD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,UAAU,CAAC;CACrB;AAED,2DAA2D;AAC3D,MAAM,MAAM,iBAAiB,GAC3B,cAAc,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,WAAW,GAAG,iBAAiB,GAAG,eAAe,CAAC;AAE5G,oDAAoD;AACpD,MAAM,MAAM,cAAc,GAAG,eAAe,GAAG,kBAAkB,CAAC;AAelE,iFAAiF;AACjF,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,eAAe,CAEhF;AAED,kGAAkG;AAClG,MAAM,MAAM,YAAY,GAAG,aAAa,CACtC;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,YAAY,CAAC,CAC7F,CAAC;AAEF,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,YAAY,CAAC;CACpB;AAOD,iGAAiG;AACjG,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,YAAY,CAE9E;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE;IAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,GAAG,IAAI,CAEvF;AAaD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,GAAG,GAAE,IAAiB,GAAG,MAAM,CAI7F;AAED,4EAA4E;AAC5E,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAGxE;AAED,iHAAiH;AACjH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAGjF;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACvC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC/B,MAAM,GAAG,IAAI,CAGf;AAKD,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,iEAAiE;IACjE,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI,GAAG,SAAS,GAAG,kBAAkB,CAUxG"}
@@ -1,13 +1,11 @@
1
1
  "use client";
2
2
  import { formatRelativeTimeFrom } from "../../../utils/date-utils.js";
3
3
  import { formatDate } from "../../../utils/format-date.js";
4
+ import { presentationFor } from "../../../utils/presentation-for.js";
4
5
  import { GoogleLogoIcon } from "../../icons-v2-generated/brand-logos/google-logo-icon.js";
5
6
  import { Office365LogoIcon } from "../../icons-v2-generated/brand-logos/office-365-logo-icon.js";
6
7
  import { CodingForkIcon } from "../../icons-v2-generated/coding/coding-fork-icon.js";
7
8
  const TENANT_EMPTY_VALUE = "\u2014";
8
- function presentationFor(map, key) {
9
- return key != null && key in map ? map[key] : void 0;
10
- }
11
9
  const ACCESS_STATE_PRESENTATION = {
12
10
  DISCONNECTED: { label: "Disconnected", variant: "error" },
13
11
  NOT_AUTHORISED: { label: "Not authorised", variant: "error" },
@@ -45,11 +43,34 @@ function usersCountLabel(count) {
45
43
  if (count == null) return TENANT_EMPTY_VALUE;
46
44
  return `${count} ${count === 1 ? "User" : "Users"}`;
47
45
  }
46
+ function lowercaseUsersCountLabel(count) {
47
+ if (count == null) return TENANT_EMPTY_VALUE;
48
+ return `${count} ${count === 1 ? "user" : "users"}`;
49
+ }
50
+ function unattributedLabel(unattributed, users) {
51
+ if (unattributed == null || unattributed <= 0) return null;
52
+ return users == null ? `${unattributed} unattributed` : `${unattributed} of ${users} unattributed`;
53
+ }
54
+ const UNUSED_WARNING_SHARE = 0.1;
55
+ function licenseSummaryLines(summary) {
56
+ if (!summary) return { value: TENANT_EMPTY_VALUE, detail: null, warning: false };
57
+ const { assigned, purchased } = summary;
58
+ if (purchased == null) return { value: `${assigned} assigned`, detail: "Total not available", warning: false };
59
+ const unused = summary.unused ?? purchased - assigned;
60
+ return {
61
+ value: `${assigned} of ${purchased}`,
62
+ detail: unused < 0 ? `${-unused} over` : `${unused} unused`,
63
+ warning: unused > 0 && unused / purchased >= UNUSED_WARNING_SHARE
64
+ };
65
+ }
48
66
  export {
49
67
  TENANT_EMPTY_VALUE,
50
68
  accessStateTag,
51
69
  formatLastRead,
52
70
  lastReadAt,
71
+ licenseSummaryLines,
72
+ lowercaseUsersCountLabel,
53
73
  providerMark,
74
+ unattributedLabel,
54
75
  usersCountLabel
55
76
  };