@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.
- package/dist/build/export-map.json +1 -1
- package/dist/{case-study-card-WP5Z234Q.cjs → case-study-card-6VAMNHLU.cjs} +8 -8
- package/dist/{chunk-2W22LY3W.cjs → chunk-2JCA7BRK.cjs} +19 -19
- package/dist/{chunk-53QPG7SJ.cjs → chunk-2MCPK6AX.cjs} +28 -28
- package/dist/{chunk-QOW2GP3V.cjs → chunk-2P72KAG5.cjs} +23 -23
- package/dist/{chunk-NMWLXHFH.cjs → chunk-3GJ75OUL.cjs} +183 -183
- package/dist/{chunk-P63CRPWI.cjs → chunk-4H3J57AN.cjs} +25 -25
- package/dist/{chunk-6GWRPW6B.cjs → chunk-5NK3FUHY.cjs} +4 -4
- package/dist/{chunk-DLTPSP5F.cjs → chunk-5TYG5JNB.cjs} +2 -2
- package/dist/{chunk-EIACEY2L.cjs → chunk-65NMKAPQ.cjs} +12 -12
- package/dist/{chunk-IGVAPIEW.cjs → chunk-6C4OR4MZ.cjs} +2 -2
- package/dist/{chunk-GG466XFQ.cjs → chunk-6DMH4GXN.cjs} +30 -5
- package/dist/{chunk-EF2FZ7GT.cjs → chunk-6VVQJU76.cjs} +54 -54
- package/dist/{chunk-G7GF4PWA.cjs → chunk-77GX573I.cjs} +9 -9
- package/dist/{chunk-7RZHSBNX.cjs → chunk-AOOHJLXS.cjs} +90 -90
- package/dist/{chunk-O3EKOXFZ.cjs → chunk-AYMY2VNB.cjs} +37 -43
- package/dist/{chunk-67CZ2Q5K.cjs → chunk-BSPIGZCC.cjs} +36 -36
- package/dist/{chunk-FW7RKWPY.cjs → chunk-D6GEMVHD.cjs} +3 -3
- package/dist/{chunk-KEV6F3QN.cjs → chunk-DPNFI5XM.cjs} +100 -100
- package/dist/{chunk-6V2M2X3M.cjs → chunk-DTZ6KASI.cjs} +6 -6
- package/dist/{chunk-SSKMGH5O.cjs → chunk-DXVGGWLG.cjs} +10 -10
- package/dist/{chunk-IO6NN3SL.cjs → chunk-EOUEUYCQ.cjs} +54 -54
- package/dist/{chunk-5RMBLOJ5.cjs → chunk-ESGE7CUX.cjs} +14 -14
- package/dist/{chunk-ETZFBB7O.cjs → chunk-EXQSIX2I.cjs} +4 -4
- package/dist/{chunk-IC4IJJB2.cjs → chunk-F33EAPD2.cjs} +124 -124
- package/dist/{chunk-COWMXUHN.cjs → chunk-GK577ZLJ.cjs} +6 -14
- package/dist/{chunk-E4MFQKPC.cjs → chunk-GZYRDLJW.cjs} +103 -103
- package/dist/{chunk-LFEURIZN.cjs → chunk-HML3JUXF.cjs} +324 -322
- package/dist/{chunk-BNHTBLAG.cjs → chunk-J3CFRGZ2.cjs} +17 -17
- package/dist/{chunk-USPUZO53.cjs → chunk-KZAQPRTA.cjs} +9 -11
- package/dist/{chunk-HTYJUMFB.cjs → chunk-LSLRJJFP.cjs} +2 -2
- package/dist/{chunk-TBGQMHCG.cjs → chunk-MINFN3IG.cjs} +8 -8
- package/dist/{chunk-KHOB3TES.cjs → chunk-MX52LZ6M.cjs} +6 -6
- package/dist/{chunk-OH5TXFRR.cjs → chunk-O4CPT3RK.cjs} +7 -7
- package/dist/{chunk-HF3V6WBJ.cjs → chunk-OTHQ2KQW.cjs} +3 -3
- package/dist/{chunk-IUDBG3HJ.cjs → chunk-PCQ2HKU3.cjs} +5 -5
- package/dist/{chunk-BNG6JOGZ.cjs → chunk-QPHXYE5P.cjs} +27 -27
- package/dist/{chunk-UO2EJGRJ.cjs → chunk-QZXCUY36.cjs} +53 -53
- package/dist/{chunk-COJG2ATY.cjs → chunk-RIJU4HZ2.cjs} +51 -55
- package/dist/{chunk-KKFDRCQF.cjs → chunk-RY7INTYU.cjs} +14 -1
- package/dist/{chunk-GI3MMBP3.cjs → chunk-SQ7YHWEP.cjs} +228 -15
- package/dist/{chunk-U767P4JU.cjs → chunk-STV6VJ3U.cjs} +21 -21
- package/dist/chunk-T54I5ZZY.cjs +62 -0
- package/dist/{chunk-UV45EPXN.cjs → chunk-TW5Y4D5I.cjs} +7 -7
- package/dist/{chunk-FX35L4Y6.cjs → chunk-XCQ5I27Z.cjs} +3 -3
- package/dist/{chunk-AZEO7HBB.cjs → chunk-Y44EF4JW.cjs} +2 -2
- package/dist/{chunk-W7OFAROY.cjs → chunk-YSXVRTGT.cjs} +9 -12
- package/dist/{chunk-GI6ECCWB.cjs → chunk-ZUGJLCYP.cjs} +1272 -856
- package/dist/{chunk-KNN2GCMW.cjs → chunk-ZYAVIRQV.cjs} +25 -25
- package/dist/{cloud-tenants-QUL2XPAS.cjs → cloud-tenants-2XFIDDGU.cjs} +28 -29
- package/dist/components/case-studies/index.cjs +44 -45
- package/dist/components/chat/chat-message-row.d.ts +1 -1
- package/dist/components/chat/chat-message-row.d.ts.map +1 -1
- package/dist/components/chat/chat-message-row.js +4 -4
- package/dist/components/chat/entity-cards/use-cover-image-fallback.d.ts +7 -13
- package/dist/components/chat/entity-cards/use-cover-image-fallback.d.ts.map +1 -1
- package/dist/components/chat/entity-cards/use-cover-image-fallback.js +2 -8
- package/dist/components/chat/hooks/use-chat-attachment-image-gallery.d.ts.map +1 -1
- package/dist/components/chat/hooks/use-chat-attachment-image-gallery.js +8 -4
- package/dist/components/chat/index.cjs +22 -23
- package/dist/components/contact/index.cjs +29 -30
- package/dist/components/docs/index.cjs +32 -33
- package/dist/components/embeds/index.cjs +29 -30
- package/dist/components/faq/index.cjs +30 -31
- package/dist/components/features/cloud-tenants/index.d.ts +7 -5
- package/dist/components/features/cloud-tenants/index.d.ts.map +1 -1
- package/dist/components/features/cloud-tenants/index.js +8 -1
- package/dist/components/features/cloud-tenants/single-customer-tenants-table-view.d.ts +26 -0
- package/dist/components/features/cloud-tenants/single-customer-tenants-table-view.d.ts.map +1 -0
- package/dist/components/features/cloud-tenants/single-customer-tenants-table-view.js +176 -0
- package/dist/components/features/cloud-tenants/tenant-access-cell.d.ts +4 -2
- package/dist/components/features/cloud-tenants/tenant-access-cell.d.ts.map +1 -1
- package/dist/components/features/cloud-tenants/tenant-access-cell.js +3 -2
- package/dist/components/features/cloud-tenants/tenant-customer-cell.d.ts +12 -5
- package/dist/components/features/cloud-tenants/tenant-customer-cell.d.ts.map +1 -1
- package/dist/components/features/cloud-tenants/tenant-customer-cell.js +38 -7
- package/dist/components/features/cloud-tenants/tenant-licenses-cell.d.ts +7 -0
- package/dist/components/features/cloud-tenants/tenant-licenses-cell.d.ts.map +1 -0
- package/dist/components/features/cloud-tenants/tenant-licenses-cell.js +17 -0
- package/dist/components/features/cloud-tenants/tenant-presentation.d.ts +19 -0
- package/dist/components/features/cloud-tenants/tenant-presentation.d.ts.map +1 -1
- package/dist/components/features/cloud-tenants/tenant-presentation.js +24 -3
- package/dist/components/features/cloud-tenants/tenant-row.d.ts +35 -8
- package/dist/components/features/cloud-tenants/tenant-row.d.ts.map +1 -1
- package/dist/components/features/cloud-tenants/tenants-table-columns.d.ts +9 -3
- package/dist/components/features/cloud-tenants/tenants-table-columns.d.ts.map +1 -1
- package/dist/components/features/cloud-tenants/tenants-table-columns.js +5 -3
- package/dist/components/features/cloud-tenants/tenants-table-view.d.ts +27 -6
- package/dist/components/features/cloud-tenants/tenants-table-view.d.ts.map +1 -1
- package/dist/components/features/cloud-tenants/tenants-table-view.js +75 -17
- package/dist/components/features/devices/device-directory.d.ts +18 -0
- package/dist/components/features/devices/device-directory.d.ts.map +1 -0
- package/dist/components/features/devices/device-directory.js +35 -0
- package/dist/components/features/devices/devices-filter-toolbar.d.ts +3 -1
- package/dist/components/features/devices/devices-filter-toolbar.d.ts.map +1 -1
- package/dist/components/features/devices/devices-filter-toolbar.js +2 -1
- package/dist/components/features/devices/devices-panel-view.d.ts +3 -1
- package/dist/components/features/devices/devices-panel-view.d.ts.map +1 -1
- package/dist/components/features/devices/devices-panel-view.js +11 -2
- package/dist/components/features/devices/devices-table-columns.d.ts +17 -3
- package/dist/components/features/devices/devices-table-columns.d.ts.map +1 -1
- package/dist/components/features/devices/devices-table-columns.js +80 -10
- package/dist/components/features/devices/index.d.ts +1 -0
- package/dist/components/features/devices/index.d.ts.map +1 -1
- package/dist/components/features/devices/index.js +8 -0
- package/dist/components/features/devices/types.d.ts +14 -0
- package/dist/components/features/devices/types.d.ts.map +1 -1
- package/dist/components/features/devices/use-tag-filter-modal.d.ts +1 -0
- package/dist/components/features/devices/use-tag-filter-modal.d.ts.map +1 -1
- package/dist/components/features/devices/use-tag-filter-modal.js +13 -8
- package/dist/components/features/index.cjs +42 -29
- package/dist/components/help-center-pages/index.cjs +134 -135
- package/dist/components/index.cjs +126 -113
- package/dist/components/meeting-scheduler/index.cjs +102 -103
- package/dist/components/navigation/app-layout.js +2 -2
- package/dist/components/navigation/index.cjs +31 -32
- package/dist/components/onboarding-guides/index.cjs +31 -32
- package/dist/components/product-demo/index.cjs +39 -40
- package/dist/components/related-content/index.cjs +16 -17
- package/dist/components/tickets/index.cjs +35 -36
- package/dist/components/ui/date-picker.d.ts +2 -0
- package/dist/components/ui/date-picker.d.ts.map +1 -1
- package/dist/components/ui/date-picker.js +19 -6
- package/dist/components/ui/entity-image.d.ts +1 -2
- package/dist/components/ui/entity-image.d.ts.map +1 -1
- package/dist/components/ui/entity-image.js +4 -8
- package/dist/components/ui/index.cjs +28 -29
- package/dist/components/ui/markdown/base-components.d.ts +0 -13
- package/dist/components/ui/markdown/base-components.d.ts.map +1 -1
- package/dist/components/ui/markdown/base-components.js +7 -7
- package/dist/components/ui/square-avatar.d.ts.map +1 -1
- package/dist/components/ui/square-avatar.js +3 -8
- package/dist/{devices-LNB4CYPP.cjs → devices-O3DYGIZB.cjs} +29 -30
- package/dist/embed-shims/index.cjs +3 -2
- package/dist/embed-shims/next-image.cjs +3 -2
- package/dist/embed-shims/next-image.d.ts +2 -0
- package/dist/embed-shims/next-image.d.ts.map +1 -1
- package/dist/embed-shims/next-image.js +14 -4
- package/dist/{embeddable-chat-SJEEJI4N.cjs → embeddable-chat-QD7NFD2H.cjs} +100 -101
- package/dist/hooks/index.cjs +27 -16
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +1 -0
- package/dist/hooks/ui/use-content-breakpoint.d.ts +8 -0
- package/dist/hooks/ui/use-content-breakpoint.d.ts.map +1 -1
- package/dist/hooks/ui/use-content-breakpoint.js +17 -3
- package/dist/hooks/ui/use-media-query.d.ts +1 -0
- package/dist/hooks/ui/use-media-query.d.ts.map +1 -1
- package/dist/hooks/ui/use-media-query.js +3 -1
- package/dist/hooks/use-authed-asset-src.d.ts +77 -2
- package/dist/hooks/use-authed-asset-src.d.ts.map +1 -1
- package/dist/hooks/use-authed-asset-src.js +185 -73
- package/dist/hooks/use-authed-image-src.d.ts +11 -4
- package/dist/hooks/use-authed-image-src.d.ts.map +1 -1
- package/dist/hooks/use-authed-image-src.js +6 -2
- package/dist/hooks/use-image-fallback.d.ts +16 -0
- package/dist/hooks/use-image-fallback.d.ts.map +1 -0
- package/dist/hooks/use-image-fallback.js +14 -0
- package/dist/index.cjs +58 -36
- package/dist/{knowledge-UTWKB6XG.cjs → knowledge-K7AFNZNO.cjs} +29 -30
- package/dist/{logs-PMXIWMBQ.cjs → logs-MZ3BR2FR.cjs} +35 -36
- package/dist/{policies-6DCMFDL7.cjs → policies-XVKQ2W7S.cjs} +32 -33
- package/dist/{remote-session-SG44CNOK.cjs → remote-session-VOZJXDM4.cjs} +13 -14
- package/dist/{scripts-2G7LXW7Z.cjs → scripts-IBPMBS6G.cjs} +35 -36
- package/dist/{software-update-MYLKHDHC.cjs → software-update-PXTANMAO.cjs} +32 -33
- package/dist/{tickets-board-SQY2Y6QV.cjs → tickets-board-POYZS7BW.cjs} +16 -17
- package/dist/utils/app-origins.d.ts +3 -6
- package/dist/utils/app-origins.d.ts.map +1 -1
- package/dist/utils/app-origins.js +8 -1
- package/dist/utils/embed-authed-fetch.d.ts +46 -26
- package/dist/utils/embed-authed-fetch.d.ts.map +1 -1
- package/dist/utils/embed-authed-fetch.js +24 -8
- package/dist/utils/index.cjs +4 -1
- package/dist/utils/presentation-for.d.ts +6 -0
- package/dist/utils/presentation-for.d.ts.map +1 -0
- package/dist/utils/presentation-for.js +7 -0
- package/dist/{video-file-player-XMOB234V.cjs → video-file-player-RIOT24NT.cjs} +3 -4
- package/package.json +1 -1
- package/src/components/chat/chat-message-row.tsx +8 -7
- package/src/components/chat/entity-cards/use-cover-image-fallback.ts +8 -28
- package/src/components/chat/hooks/use-chat-attachment-image-gallery.tsx +19 -8
- package/src/components/features/cloud-tenants/index.ts +8 -3
- package/src/components/features/cloud-tenants/single-customer-tenants-table-view.tsx +234 -0
- package/src/components/features/cloud-tenants/tenant-access-cell.tsx +12 -5
- package/src/components/features/cloud-tenants/tenant-customer-cell.tsx +48 -12
- package/src/components/features/cloud-tenants/tenant-licenses-cell.tsx +28 -0
- package/src/components/features/cloud-tenants/tenant-presentation.ts +46 -4
- package/src/components/features/cloud-tenants/tenant-row.ts +38 -8
- package/src/components/features/cloud-tenants/tenants-table-columns.ts +8 -5
- package/src/components/features/cloud-tenants/tenants-table-view.tsx +123 -28
- package/src/components/features/devices/device-directory.ts +55 -0
- package/src/components/features/devices/devices-filter-toolbar.tsx +4 -1
- package/src/components/features/devices/devices-panel-view.tsx +12 -2
- package/src/components/features/devices/devices-table-columns.tsx +123 -8
- package/src/components/features/devices/index.ts +7 -0
- package/src/components/features/devices/types.ts +14 -0
- package/src/components/features/devices/use-tag-filter-modal.ts +32 -14
- package/src/components/navigation/app-layout.tsx +4 -4
- package/src/components/ui/date-picker.tsx +21 -3
- package/src/components/ui/entity-image.tsx +4 -12
- package/src/components/ui/markdown/base-components.tsx +15 -20
- package/src/components/ui/square-avatar.tsx +5 -8
- package/src/embed-shims/next-image.tsx +34 -3
- package/src/hooks/index.ts +1 -0
- package/src/hooks/ui/use-content-breakpoint.ts +21 -2
- package/src/hooks/ui/use-media-query.ts +1 -0
- package/src/hooks/use-authed-asset-src.ts +323 -107
- package/src/hooks/use-authed-image-src.ts +15 -5
- package/src/hooks/use-image-fallback.ts +31 -0
- package/src/utils/app-origins.ts +12 -7
- package/src/utils/embed-authed-fetch.ts +71 -32
- package/src/utils/presentation-for.ts +10 -0
- package/dist/chunk-UAI4VMEF.cjs +0 -46
- 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
|
|
4
|
+
var _chunkDTZ6KASIcjs = require('../../chunk-DTZ6KASI.cjs');
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
var
|
|
12
|
-
require('../../chunk-
|
|
13
|
-
require('../../chunk-
|
|
14
|
-
require('../../chunk-
|
|
15
|
-
require('../../chunk-
|
|
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-
|
|
18
|
+
require('../../chunk-QZXCUY36.cjs');
|
|
19
19
|
require('../../chunk-24I6RFVU.cjs');
|
|
20
|
-
require('../../chunk-
|
|
20
|
+
require('../../chunk-PCQ2HKU3.cjs');
|
|
21
21
|
require('../../chunk-MZ4KBSH7.cjs');
|
|
22
22
|
require('../../chunk-ZZDFMUEU.cjs');
|
|
23
|
-
require('../../chunk-
|
|
24
|
-
require('../../chunk-
|
|
23
|
+
require('../../chunk-F33EAPD2.cjs');
|
|
24
|
+
require('../../chunk-HML3JUXF.cjs');
|
|
25
25
|
require('../../chunk-OT6P57ZS.cjs');
|
|
26
|
-
require('../../chunk-
|
|
27
|
-
require('../../chunk-
|
|
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-
|
|
1821
|
-
require('../../chunk-
|
|
1822
|
-
require('../../chunk-
|
|
1823
|
-
require('../../chunk-
|
|
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-
|
|
1831
|
-
require('../../chunk-
|
|
1832
|
-
require('../../chunk-
|
|
1833
|
-
require('../../chunk-
|
|
1834
|
-
require('../../chunk-
|
|
1835
|
-
require('../../chunk-
|
|
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-
|
|
1846
|
-
require('../../chunk-
|
|
1847
|
-
require('../../chunk-
|
|
1848
|
-
require('../../chunk-
|
|
1849
|
-
require('../../chunk-
|
|
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-
|
|
1853
|
-
require('../../chunk-
|
|
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 =
|
|
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;
|
|
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,
|
|
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:
|
|
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
|
-
|
|
3
|
-
|
|
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
|
-
/**
|
|
8
|
-
|
|
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":"
|
|
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 {
|
|
7
|
-
function TenantCustomerCell({
|
|
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(
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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;
|
|
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
|
};
|