@arbidocs/blocks 0.4.146 → 0.4.150
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/ConnectedNativeDocxComparison-3XQSINPQ.cjs +44 -0
- package/dist/ConnectedNativeDocxComparison-3XQSINPQ.cjs.map +1 -0
- package/dist/ConnectedNativeDocxComparison-XQSXVGHR.js +35 -0
- package/dist/ConnectedNativeDocxComparison-XQSXVGHR.js.map +1 -0
- package/dist/ConnectedNativeDocxEditor-IPEZDERL.js +33 -0
- package/dist/ConnectedNativeDocxEditor-IPEZDERL.js.map +1 -0
- package/dist/ConnectedNativeDocxEditor-OUWFMIPH.cjs +46 -0
- package/dist/ConnectedNativeDocxEditor-OUWFMIPH.cjs.map +1 -0
- package/dist/ConnectedStreamedWordArtifact-D5LSMDO4.cjs +44 -0
- package/dist/ConnectedStreamedWordArtifact-D5LSMDO4.cjs.map +1 -0
- package/dist/ConnectedStreamedWordArtifact-UZVNBKQB.js +35 -0
- package/dist/ConnectedStreamedWordArtifact-UZVNBKQB.js.map +1 -0
- package/dist/FactTextEditor-YESAU2IJ.js +25 -0
- package/dist/FactTextEditor-YESAU2IJ.js.map +1 -0
- package/dist/FactTextEditor-YUPBCTXK.cjs +27 -0
- package/dist/FactTextEditor-YUPBCTXK.cjs.map +1 -0
- package/dist/{NativeDocxEditor-BE2OEOTJ.cjs → NativeDocxEditor-5VBNM5I7.cjs} +8 -8
- package/dist/{NativeDocxEditor-BE2OEOTJ.cjs.map → NativeDocxEditor-5VBNM5I7.cjs.map} +1 -1
- package/dist/{NativeDocxEditor-KOPFMRYW.js → NativeDocxEditor-XT5ZLFGU.js} +4 -4
- package/dist/{NativeDocxEditor-KOPFMRYW.js.map → NativeDocxEditor-XT5ZLFGU.js.map} +1 -1
- package/dist/agents/index.cjs +265 -266
- package/dist/agents/index.js +8 -9
- package/dist/calendar/index.cjs +117 -125
- package/dist/calendar/index.d.ts +0 -1
- package/dist/calendar/index.js +1 -1
- package/dist/calls/index.cjs +3 -3
- package/dist/calls/index.js +2 -2
- package/dist/chat/index.cjs +78 -78
- package/dist/chat/index.js +3 -3
- package/dist/{chunk-2FL7QJKJ.js → chunk-265GOG4W.js} +3 -3
- package/dist/{chunk-2FL7QJKJ.js.map → chunk-265GOG4W.js.map} +1 -1
- package/dist/{chunk-IJST4EBM.js → chunk-3E2F4AHD.js} +8 -8
- package/dist/{chunk-IJST4EBM.js.map → chunk-3E2F4AHD.js.map} +1 -1
- package/dist/chunk-3FSXWVHW.cjs +5184 -0
- package/dist/chunk-3FSXWVHW.cjs.map +1 -0
- package/dist/{chunk-LPYEUD2D.cjs → chunk-4JNKXOFZ.cjs} +3 -3
- package/dist/{chunk-LPYEUD2D.cjs.map → chunk-4JNKXOFZ.cjs.map} +1 -1
- package/dist/{chunk-ODRHHWHY.cjs → chunk-4KMLM3GY.cjs} +4 -4
- package/dist/chunk-4KMLM3GY.cjs.map +1 -0
- package/dist/{chunk-MHFF5N65.cjs → chunk-757OYF6G.cjs} +4 -38
- package/dist/chunk-757OYF6G.cjs.map +1 -0
- package/dist/chunk-AXTDDWMR.js +16 -0
- package/dist/chunk-AXTDDWMR.js.map +1 -0
- package/dist/{chunk-B3AHCIV5.js → chunk-BJ24VPOA.js} +4 -55
- package/dist/chunk-BJ24VPOA.js.map +1 -0
- package/dist/chunk-C7PTF6BQ.cjs +172 -0
- package/dist/chunk-C7PTF6BQ.cjs.map +1 -0
- package/dist/{chunk-T5B7FM7S.js → chunk-COA3S3CZ.js} +3 -3
- package/dist/{chunk-T5B7FM7S.js.map → chunk-COA3S3CZ.js.map} +1 -1
- package/dist/{chunk-C44TDH54.js → chunk-CQPFW64W.js} +5 -5
- package/dist/{chunk-C44TDH54.js.map → chunk-CQPFW64W.js.map} +1 -1
- package/dist/chunk-D3WFIFRY.cjs +659 -0
- package/dist/chunk-D3WFIFRY.cjs.map +1 -0
- package/dist/{chunk-QXMR5YHC.js → chunk-DIB4JYUY.js} +19 -3
- package/dist/chunk-DIB4JYUY.js.map +1 -0
- package/dist/chunk-DVB5ZKOF.js +22 -0
- package/dist/chunk-DVB5ZKOF.js.map +1 -0
- package/dist/{chunk-VHJHY7TT.js → chunk-ECERC6TI.js} +3 -3
- package/dist/{chunk-VHJHY7TT.js.map → chunk-ECERC6TI.js.map} +1 -1
- package/dist/chunk-EDV7CYG6.cjs +18 -0
- package/dist/chunk-EDV7CYG6.cjs.map +1 -0
- package/dist/chunk-FAXXN7KI.cjs +213 -0
- package/dist/chunk-FAXXN7KI.cjs.map +1 -0
- package/dist/{chunk-2MJWWPHY.js → chunk-G4IYES7G.js} +140 -15
- package/dist/chunk-G4IYES7G.js.map +1 -0
- package/dist/{chunk-MFMASSEO.cjs → chunk-GGTUMLCT.cjs} +93 -91
- package/dist/chunk-GGTUMLCT.cjs.map +1 -0
- package/dist/{chunk-QI6AIHWP.cjs → chunk-GOWXP5KT.cjs} +145 -14
- package/dist/chunk-GOWXP5KT.cjs.map +1 -0
- package/dist/{chunk-O6IEZDRC.cjs → chunk-GRGS5M6O.cjs} +181 -3
- package/dist/chunk-GRGS5M6O.cjs.map +1 -0
- package/dist/{chunk-A6IU4GIW.js → chunk-HGLC566X.js} +598 -13
- package/dist/chunk-HGLC566X.js.map +1 -0
- package/dist/{chunk-O2GW5IY6.cjs → chunk-ILM42LE6.cjs} +33 -33
- package/dist/{chunk-O2GW5IY6.cjs.map → chunk-ILM42LE6.cjs.map} +1 -1
- package/dist/{chunk-C3CGJK7A.cjs → chunk-IPQ5MJ4Z.cjs} +636 -31
- package/dist/chunk-IPQ5MJ4Z.cjs.map +1 -0
- package/dist/{chunk-NRFAWUVD.js → chunk-JAANWQGB.js} +157 -157
- package/dist/chunk-JAANWQGB.js.map +1 -0
- package/dist/{chunk-7RJTEWYM.js → chunk-JGOST4IL.js} +350 -64
- package/dist/chunk-JGOST4IL.js.map +1 -0
- package/dist/chunk-KHXEIEXN.js +41 -0
- package/dist/chunk-KHXEIEXN.js.map +1 -0
- package/dist/chunk-KLPRAQCE.cjs +22 -0
- package/dist/chunk-KLPRAQCE.cjs.map +1 -0
- package/dist/chunk-KQYPP72K.js +644 -0
- package/dist/chunk-KQYPP72K.js.map +1 -0
- package/dist/chunk-KUT2Y7JF.cjs +43 -0
- package/dist/chunk-KUT2Y7JF.cjs.map +1 -0
- package/dist/{chunk-6YTHQ73P.cjs → chunk-LLYZGH3L.cjs} +3 -56
- package/dist/chunk-LLYZGH3L.cjs.map +1 -0
- package/dist/{chunk-YSHIC4NJ.cjs → chunk-LXTOOUEN.cjs} +159 -154
- package/dist/chunk-LXTOOUEN.cjs.map +1 -0
- package/dist/{chunk-EVUEIBNU.js → chunk-M4S75AEJ.js} +44 -5
- package/dist/chunk-M4S75AEJ.js.map +1 -0
- package/dist/{chunk-V5OAXIBN.cjs → chunk-NPR5BGFF.cjs} +11 -11
- package/dist/{chunk-V5OAXIBN.cjs.map → chunk-NPR5BGFF.cjs.map} +1 -1
- package/dist/{chunk-PLJ7PHWU.cjs → chunk-NS7NVX4E.cjs} +3 -3
- package/dist/{chunk-PLJ7PHWU.cjs.map → chunk-NS7NVX4E.cjs.map} +1 -1
- package/dist/{chunk-RB7GX2VT.cjs → chunk-NWNAYXC7.cjs} +9 -9
- package/dist/{chunk-RB7GX2VT.cjs.map → chunk-NWNAYXC7.cjs.map} +1 -1
- package/dist/chunk-Q6N6MZKO.js +5004 -0
- package/dist/chunk-Q6N6MZKO.js.map +1 -0
- package/dist/{chunk-I2QSDQQV.cjs → chunk-QT3A4PFC.cjs} +21 -2
- package/dist/chunk-QT3A4PFC.cjs.map +1 -0
- package/dist/{chunk-6HCJ3ZEU.js → chunk-R6VCPDPF.js} +178 -6
- package/dist/chunk-R6VCPDPF.js.map +1 -0
- package/dist/{chunk-ZM26YEOT.js → chunk-RY2SODRN.js} +3 -3
- package/dist/{chunk-ZM26YEOT.js.map → chunk-RY2SODRN.js.map} +1 -1
- package/dist/chunk-SDOEHEJP.js +208 -0
- package/dist/chunk-SDOEHEJP.js.map +1 -0
- package/dist/{chunk-DETZZBG2.cjs → chunk-SIB6C7P7.cjs} +43 -2
- package/dist/chunk-SIB6C7P7.cjs.map +1 -0
- package/dist/{chunk-OPTBQSCV.cjs → chunk-SMN32BQ3.cjs} +4 -183
- package/dist/chunk-SMN32BQ3.cjs.map +1 -0
- package/dist/chunk-TAWPVD6C.cjs +1956 -0
- package/dist/chunk-TAWPVD6C.cjs.map +1 -0
- package/dist/chunk-TC25LGIM.js +6584 -0
- package/dist/chunk-TC25LGIM.js.map +1 -0
- package/dist/{chunk-OBWYM25Y.js → chunk-TL45OJQE.js} +85 -83
- package/dist/chunk-TL45OJQE.js.map +1 -0
- package/dist/{chunk-AOSUHWIL.js → chunk-TZOQKV64.js} +4 -37
- package/dist/chunk-TZOQKV64.js.map +1 -0
- package/dist/chunk-UTVY63DG.js +16 -0
- package/dist/chunk-UTVY63DG.js.map +1 -0
- package/dist/chunk-V4YZXGXR.cjs +6751 -0
- package/dist/chunk-V4YZXGXR.cjs.map +1 -0
- package/dist/chunk-XRWHFMHK.js +19 -0
- package/dist/chunk-XRWHFMHK.js.map +1 -0
- package/dist/{chunk-O4YPVYPO.cjs → chunk-YAEXSCUW.cjs} +364 -60
- package/dist/chunk-YAEXSCUW.cjs.map +1 -0
- package/dist/chunk-YIFCLNII.cjs +18 -0
- package/dist/chunk-YIFCLNII.cjs.map +1 -0
- package/dist/chunk-Z27QMJ6S.cjs +25 -0
- package/dist/chunk-Z27QMJ6S.cjs.map +1 -0
- package/dist/{chunk-CSI2B2H5.js → chunk-Z4NQ3TED.js} +4 -4
- package/dist/chunk-Z4NQ3TED.js.map +1 -0
- package/dist/{chunk-DWZXSPMB.cjs → chunk-ZAVEMQ37.cjs} +3 -3
- package/dist/{chunk-DWZXSPMB.cjs.map → chunk-ZAVEMQ37.cjs.map} +1 -1
- package/dist/{chunk-FUTMU4FR.js → chunk-ZLEYLCE4.js} +8 -181
- package/dist/chunk-ZLEYLCE4.js.map +1 -0
- package/dist/chunk-ZNLTEZEF.js +170 -0
- package/dist/chunk-ZNLTEZEF.js.map +1 -0
- package/dist/chunk-ZO7PJMCO.js +1907 -0
- package/dist/chunk-ZO7PJMCO.js.map +1 -0
- package/dist/citations/index.cjs +14 -14
- package/dist/citations/index.js +2 -2
- package/dist/collaboration/index.cjs +74 -74
- package/dist/collaboration/index.js +3 -3
- package/dist/connect/docx.cjs +23 -28
- package/dist/connect/docx.cjs.map +1 -1
- package/dist/connect/docx.js +12 -28
- package/dist/connect/docx.js.map +1 -1
- package/dist/connect/index.cjs +8799 -2057
- package/dist/connect/index.cjs.map +1 -1
- package/dist/connect/index.d.ts +11 -2
- package/dist/connect/index.js +8578 -1884
- package/dist/connect/index.js.map +1 -1
- package/dist/connect/viewer.cjs +1229 -0
- package/dist/connect/viewer.cjs.map +1 -0
- package/dist/connect/viewer.d.ts +8 -0
- package/dist/connect/viewer.js +1226 -0
- package/dist/connect/viewer.js.map +1 -0
- package/dist/connection/ConnectedWorkflowsTable.d.ts +2 -12
- package/dist/connection/ai.d.ts +2 -9
- package/dist/connection/billing/AddAddonDialog.d.ts +24 -0
- package/dist/connection/billing/BillingCard.d.ts +18 -0
- package/dist/connection/billing/BillingProjectEntity.d.ts +9 -0
- package/dist/connection/billing/ChangePlanDialog.d.ts +20 -0
- package/dist/connection/billing/ChangeProPlan.d.ts +20 -0
- package/dist/connection/billing/CheckoutTotal.d.ts +12 -0
- package/dist/connection/billing/DailyCapEditor.d.ts +4 -0
- package/dist/connection/billing/InvoicesModal.d.ts +6 -0
- package/dist/connection/billing/NewProjectFlow.d.ts +14 -0
- package/dist/connection/billing/PlanChangeLines.d.ts +13 -0
- package/dist/connection/billing/PlanSelector.d.ts +50 -0
- package/dist/connection/billing/ProjectBilling.d.ts +24 -0
- package/dist/connection/billing/ProjectDetail.d.ts +16 -0
- package/dist/connection/billing/ProjectUsageCard.d.ts +21 -0
- package/dist/connection/billing/ProjectUsageContent.d.ts +18 -0
- package/dist/connection/billing/ProjectsTable.d.ts +13 -0
- package/dist/connection/billing/ReduceAddonDialog.d.ts +18 -0
- package/dist/connection/billing/ReferralReward.d.ts +32 -0
- package/dist/connection/billing/SharedProjects.d.ts +13 -0
- package/dist/connection/billing/StripeCheckoutModal.d.ts +32 -0
- package/dist/connection/billing/SubscriptionPlans.d.ts +15 -0
- package/dist/connection/billing/SubscriptionStatus.d.ts +10 -0
- package/dist/connection/billing/addon-pricing.d.ts +97 -0
- package/dist/connection/billing/api-error.d.ts +6 -0
- package/dist/connection/billing/billing-country.d.ts +14 -0
- package/dist/connection/billing/billing-focus.d.ts +11 -0
- package/dist/connection/billing/index.d.ts +22 -0
- package/dist/connection/billing/plan-badge.d.ts +15 -0
- package/dist/connection/billing/plan-change-outcome.d.ts +15 -0
- package/dist/connection/billing/plan-constants.d.ts +29 -0
- package/dist/connection/billing/plan-pricing.d.ts +67 -0
- package/dist/connection/billing/quota-items.d.ts +33 -0
- package/dist/connection/billing/referral-reward.d.ts +28 -0
- package/dist/connection/billing/refusal-copy.d.ts +5 -0
- package/dist/connection/billing/reward-balance.d.ts +19 -0
- package/dist/connection/billing/support.d.ts +35 -0
- package/dist/connection/billing/tax-quote.d.ts +36 -0
- package/dist/connection/billing/useAddonPurchase.d.ts +32 -0
- package/dist/connection/billing/useAutoRefreshPendingProjects.d.ts +11 -0
- package/dist/connection/billing/useCheckoutQuote.d.ts +30 -0
- package/dist/connection/billing/useOpenBillingPortal.d.ts +12 -0
- package/dist/connection/calendar/CalendarSettingsDialog.d.ts +1 -1
- package/dist/connection/connectors/ConnectedAppsSettings.d.ts +24 -0
- package/dist/connection/connectors/ConnectedDriveSyncDialog.d.ts +12 -0
- package/dist/connection/connectors/ConnectedMailboxSyncDialog.d.ts +12 -0
- package/dist/connection/connectors/index.d.ts +4 -0
- package/dist/connection/connectors/sync-labels.d.ts +21 -0
- package/dist/connection/facts/ConnectedFactsPage.d.ts +50 -0
- package/dist/connection/facts/FactMarkdownEditor.d.ts +57 -0
- package/dist/connection/facts/FactSourcesPopover.d.ts +38 -0
- package/dist/connection/facts/FactTextEditor.d.ts +2 -0
- package/dist/connection/facts/factNouns.d.ts +4 -0
- package/dist/connection/facts/factPageColumns.d.ts +37 -0
- package/dist/connection/facts/types.d.ts +127 -0
- package/dist/connection/facts/useFactActions.d.ts +10 -0
- package/dist/connection/facts/useFactComposer.d.ts +54 -0
- package/dist/connection/facts/useFactFilters.d.ts +101 -0
- package/dist/connection/facts/useFactSelection.d.ts +82 -0
- package/dist/connection/facts/useFactsGrid.d.ts +87 -0
- package/dist/connection/facts/useFactsPageView.d.ts +4 -0
- package/dist/connection/mail/ConnectedMailComposer.d.ts +3 -1
- package/dist/connection/mail/ConnectedMailbox.d.ts +4 -2
- package/dist/connection/mail/MailComposerForm.d.ts +4 -2
- package/dist/connection/mail/MailRecipientInput.d.ts +14 -0
- package/dist/connection/mail/index.d.ts +1 -1
- package/dist/connection/mail/types.d.ts +10 -0
- package/dist/connection/search/ConnectedSearchPage.d.ts +64 -0
- package/dist/connection/search/SearchResultRows.d.ts +38 -0
- package/dist/connection/search/index.d.ts +2 -0
- package/dist/connection/settings-page/ConnectedSettingsPage.d.ts +4 -0
- package/dist/connection/settings-page/index.d.ts +1 -1
- package/dist/connection/tags/ConnectedTagTable.d.ts +108 -0
- package/dist/connection/tags/ConnectedTagsPage.d.ts +55 -0
- package/dist/connection/tags/DocTagPassages.d.ts +25 -0
- package/dist/connection/tags/GlossaryExport.d.ts +7 -0
- package/dist/connection/tags/TagCombineFilter.d.ts +14 -0
- package/dist/connection/tags/TagPlacement.d.ts +16 -0
- package/dist/connection/tags/TagsPageSections.d.ts +36 -0
- package/dist/connection/tags/tagCombine.d.ts +55 -0
- package/dist/connection/useConnectedWorkNotifications.d.ts +7 -24
- package/dist/connection/viewer/ConnectedDocumentToolsProvider.d.ts +11 -0
- package/dist/connection/viewer/ConnectedDocumentViewer.d.ts +21 -0
- package/dist/connection/viewer/FinaliseTranslationButton.d.ts +15 -0
- package/dist/connection/viewer/ViewerPdfPane.d.ts +46 -0
- package/dist/connection/viewer/support.d.ts +79 -0
- package/dist/connection/viewer/useImageCrop.d.ts +13 -0
- package/dist/connection/viewer/useViewedDocument.d.ts +70 -0
- package/dist/connection/viewer/useViewerBlobs.d.ts +15 -0
- package/dist/connection/viewer/useViewerTabs.d.ts +18 -0
- package/dist/connection/viewer/useViewerVersions.d.ts +11 -0
- package/dist/connection/workspace-settings/useConnectedWorkspaceSettings.d.ts +6 -0
- package/dist/document-tools/index.cjs +59 -652
- package/dist/document-tools/index.cjs.map +1 -1
- package/dist/document-tools/index.js +2 -641
- package/dist/document-tools/index.js.map +1 -1
- package/dist/docx/index.cjs +48 -47
- package/dist/docx/index.js +4 -3
- package/dist/facts/FactsBulkBar.d.ts +6 -3
- package/dist/facts/cited-version-ref.d.ts +1 -0
- package/dist/facts/index.cjs +206 -1942
- package/dist/facts/index.cjs.map +1 -1
- package/dist/facts/index.d.ts +1 -0
- package/dist/facts/index.js +15 -1897
- package/dist/facts/index.js.map +1 -1
- package/dist/files/ViewerChrome.d.ts +5 -4
- package/dist/files/ViewerControlBar.d.ts +12 -0
- package/dist/files/doc-labels.d.ts +35 -0
- package/dist/files/grid/FilterButton.d.ts +12 -0
- package/dist/files/grid/RowDensityControl.d.ts +18 -0
- package/dist/files/grid/row-density.d.ts +27 -0
- package/dist/files/index.cjs +779 -7100
- package/dist/files/index.cjs.map +1 -1
- package/dist/files/index.d.ts +5 -0
- package/dist/files/index.js +14 -6919
- package/dist/files/index.js.map +1 -1
- package/dist/home/index.cjs +2 -2
- package/dist/home/index.js +2 -2
- package/dist/index.cjs +1043 -1259
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +27 -360
- package/dist/index.js.map +1 -1
- package/dist/retrieval/SearchSnippet.d.ts +6 -0
- package/dist/retrieval/index.cjs +75 -42
- package/dist/retrieval/index.d.ts +2 -0
- package/dist/retrieval/index.js +3 -2
- package/dist/retrieval/search-results.d.ts +46 -0
- package/dist/settings/Billing.d.ts +0 -66
- package/dist/settings/PlanBadge.d.ts +1 -1
- package/dist/settings/SubscriptionParts.d.ts +1 -50
- package/dist/settings/index.cjs +501 -3714
- package/dist/settings/index.cjs.map +1 -1
- package/dist/settings/index.d.ts +3 -2
- package/dist/settings/index.js +10 -3527
- package/dist/settings/index.js.map +1 -1
- package/dist/settings/inverted-index-filter.d.ts +26 -0
- package/dist/shell/index.cjs +2 -2
- package/dist/shell/index.js +2 -2
- package/dist/site/index.cjs +5 -5
- package/dist/site/index.js +1 -1
- package/dist/studio/index.cjs +6 -6
- package/dist/studio/index.js +5 -5
- package/dist/tags/definitions.d.ts +10 -0
- package/dist/tags/index.d.ts +4 -1
- package/dist/tags/page/ExtractEntitiesDialog.d.ts +24 -0
- package/dist/tags/page/TagPicker.d.ts +16 -0
- package/dist/tags/page/tagsPageLabels.d.ts +36 -0
- package/dist/workflow-canvas/index.cjs +21 -22
- package/dist/workflow-canvas/index.cjs.map +1 -1
- package/dist/workflow-canvas/index.js +8 -9
- package/dist/workflow-canvas/index.js.map +1 -1
- package/node_modules/@arbidocs/coedit/package.json +1 -1
- package/package.json +13 -4
- package/dist/calendar/access-setup.d.ts +0 -8
- package/dist/chunk-2MJWWPHY.js.map +0 -1
- package/dist/chunk-3AFWGEDJ.cjs +0 -53
- package/dist/chunk-3AFWGEDJ.cjs.map +0 -1
- package/dist/chunk-5YHEHEJT.js +0 -1667
- package/dist/chunk-5YHEHEJT.js.map +0 -1
- package/dist/chunk-6HCJ3ZEU.js.map +0 -1
- package/dist/chunk-6YTHQ73P.cjs.map +0 -1
- package/dist/chunk-7RJTEWYM.js.map +0 -1
- package/dist/chunk-A6IU4GIW.js.map +0 -1
- package/dist/chunk-AOSUHWIL.js.map +0 -1
- package/dist/chunk-B3AHCIV5.js.map +0 -1
- package/dist/chunk-C3CGJK7A.cjs.map +0 -1
- package/dist/chunk-CSI2B2H5.js.map +0 -1
- package/dist/chunk-DETZZBG2.cjs.map +0 -1
- package/dist/chunk-EVUEIBNU.js.map +0 -1
- package/dist/chunk-FUTMU4FR.js.map +0 -1
- package/dist/chunk-I2QSDQQV.cjs.map +0 -1
- package/dist/chunk-J5CWKFSC.js +0 -170
- package/dist/chunk-J5CWKFSC.js.map +0 -1
- package/dist/chunk-MFMASSEO.cjs.map +0 -1
- package/dist/chunk-MHFF5N65.cjs.map +0 -1
- package/dist/chunk-NRFAWUVD.js.map +0 -1
- package/dist/chunk-O4YPVYPO.cjs.map +0 -1
- package/dist/chunk-O6IEZDRC.cjs.map +0 -1
- package/dist/chunk-OBWYM25Y.js.map +0 -1
- package/dist/chunk-ODRHHWHY.cjs.map +0 -1
- package/dist/chunk-OPTBQSCV.cjs.map +0 -1
- package/dist/chunk-QI6AIHWP.cjs.map +0 -1
- package/dist/chunk-QXMR5YHC.js.map +0 -1
- package/dist/chunk-RFXJYIDV.js +0 -50
- package/dist/chunk-RFXJYIDV.js.map +0 -1
- package/dist/chunk-U73KPFYH.cjs +0 -1717
- package/dist/chunk-U73KPFYH.cjs.map +0 -1
- package/dist/chunk-XVUOMWMD.cjs +0 -177
- package/dist/chunk-XVUOMWMD.cjs.map +0 -1
- package/dist/chunk-YSHIC4NJ.cjs.map +0 -1
- package/dist/connection/ConnectedTagTable.d.ts +0 -32
- package/dist/connection/calendar/CopyField.d.ts +0 -9
- package/dist/connection/calendar/OpenAccessPanel.d.ts +0 -7
package/dist/settings/index.cjs
CHANGED
|
@@ -1,3751 +1,660 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var chunk3FSXWVHW_cjs = require('../chunk-3FSXWVHW.cjs');
|
|
5
5
|
var chunk223D4727_cjs = require('../chunk-223D4727.cjs');
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
require('../chunk-QZTNTP75.cjs');
|
|
7
|
+
require('../chunk-NWNVWO6L.cjs');
|
|
8
8
|
var chunkRFIBUWLF_cjs = require('../chunk-RFIBUWLF.cjs');
|
|
9
9
|
var chunkRQ2Y7USX_cjs = require('../chunk-RQ2Y7USX.cjs');
|
|
10
|
-
|
|
10
|
+
require('../chunk-DVUZTGVL.cjs');
|
|
11
11
|
require('../chunk-ADOKTJHV.cjs');
|
|
12
|
-
var
|
|
13
|
-
|
|
14
|
-
var chunk32HW2Q33_cjs = require('../chunk-32HW2Q33.cjs');
|
|
15
|
-
require('../chunk-PPCATBOY.cjs');
|
|
16
|
-
var chunkMHVNT4J3_cjs = require('../chunk-MHVNT4J3.cjs');
|
|
12
|
+
var chunkZAVEMQ37_cjs = require('../chunk-ZAVEMQ37.cjs');
|
|
13
|
+
require('../chunk-7RGLTF76.cjs');
|
|
17
14
|
var chunkULWRNGGE_cjs = require('../chunk-ULWRNGGE.cjs');
|
|
18
|
-
|
|
15
|
+
require('../chunk-32HW2Q33.cjs');
|
|
16
|
+
require('../chunk-PPCATBOY.cjs');
|
|
17
|
+
require('../chunk-MHVNT4J3.cjs');
|
|
18
|
+
require('../chunk-KDG6FER6.cjs');
|
|
19
19
|
require('../chunk-DES3K4SD.cjs');
|
|
20
|
-
var RadioGroupPrimitive = require('@radix-ui/react-radio-group');
|
|
21
|
-
var ui = require('@arbidocs/react/ui');
|
|
22
|
-
var jsxRuntime = require('react/jsx-runtime');
|
|
23
|
-
var react = require('react');
|
|
24
|
-
var lucideReact = require('lucide-react');
|
|
25
|
-
var classVarianceAuthority = require('class-variance-authority');
|
|
26
|
-
|
|
27
|
-
function _interopNamespace(e) {
|
|
28
|
-
if (e && e.__esModule) return e;
|
|
29
|
-
var n = Object.create(null);
|
|
30
|
-
if (e) {
|
|
31
|
-
Object.keys(e).forEach(function (k) {
|
|
32
|
-
if (k !== 'default') {
|
|
33
|
-
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
34
|
-
Object.defineProperty(n, k, d.get ? d : {
|
|
35
|
-
enumerable: true,
|
|
36
|
-
get: function () { return e[k]; }
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
n.default = e;
|
|
42
|
-
return Object.freeze(n);
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
var RadioGroupPrimitive__namespace = /*#__PURE__*/_interopNamespace(RadioGroupPrimitive);
|
|
46
20
|
|
|
47
|
-
function SegmentedControl({
|
|
48
|
-
value,
|
|
49
|
-
onChange,
|
|
50
|
-
options,
|
|
51
|
-
ariaLabel,
|
|
52
|
-
className
|
|
53
|
-
}) {
|
|
54
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
55
|
-
RadioGroupPrimitive__namespace.Root,
|
|
56
|
-
{
|
|
57
|
-
"data-slot": "segmented-control",
|
|
58
|
-
"aria-label": ariaLabel,
|
|
59
|
-
value,
|
|
60
|
-
onValueChange: (next) => onChange(next),
|
|
61
|
-
orientation: "horizontal",
|
|
62
|
-
className: ui.cn("inline-flex rounded-lg border border-border bg-background p-1", className),
|
|
63
|
-
children: options.map((option) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
64
|
-
RadioGroupPrimitive__namespace.Item,
|
|
65
|
-
{
|
|
66
|
-
value: option.value,
|
|
67
|
-
"data-testid": option.testId,
|
|
68
|
-
className: ui.cn(
|
|
69
|
-
"flex items-center gap-2 rounded-md px-4 py-1.5 text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:min-h-11 pointer-coarse:py-2.5",
|
|
70
|
-
option.value === value ? "bg-accent text-accent-foreground" : "text-muted-foreground hover:text-foreground"
|
|
71
|
-
),
|
|
72
|
-
children: [
|
|
73
|
-
option.icon,
|
|
74
|
-
option.label
|
|
75
|
-
]
|
|
76
|
-
},
|
|
77
|
-
option.value
|
|
78
|
-
))
|
|
79
|
-
}
|
|
80
|
-
);
|
|
81
|
-
}
|
|
82
|
-
function FloatingPanel({
|
|
83
|
-
panelId,
|
|
84
|
-
mode,
|
|
85
|
-
title,
|
|
86
|
-
subtitle,
|
|
87
|
-
headerIcon,
|
|
88
|
-
headerActions,
|
|
89
|
-
tabLabel,
|
|
90
|
-
modeSwitcher,
|
|
91
|
-
children,
|
|
92
|
-
footer,
|
|
93
|
-
onPanelClick,
|
|
94
|
-
className
|
|
95
|
-
}) {
|
|
96
|
-
const isRenderFunction = typeof children === "function";
|
|
97
|
-
const content = isRenderFunction ? children({ modeSwitcher }) : children;
|
|
98
|
-
const footerEl = footer && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative z-10 flex-shrink-0 border-t border-border p-3", children: footer });
|
|
99
|
-
const body = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
100
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: ui.cn("flex-1", isRenderFunction ? "overflow-hidden" : "overflow-auto p-3"), children: content }),
|
|
101
|
-
footerEl
|
|
102
|
-
] });
|
|
103
|
-
if (mode === "popout") {
|
|
104
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
105
|
-
"div",
|
|
106
|
-
{
|
|
107
|
-
"data-slot": "floating-panel",
|
|
108
|
-
className: ui.cn("flex h-screen flex-col bg-background text-foreground", className),
|
|
109
|
-
children: [
|
|
110
|
-
!isRenderFunction && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-shrink-0 items-start justify-between border-b border-border px-3 py-2", children: [
|
|
111
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 flex-1 flex-col", children: [
|
|
112
|
-
(title || headerIcon) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 text-base font-semibold text-primary", children: [
|
|
113
|
-
headerIcon,
|
|
114
|
-
title && /* @__PURE__ */ jsxRuntime.jsx("span", { children: title })
|
|
115
|
-
] }),
|
|
116
|
-
subtitle && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-muted-foreground", children: subtitle }),
|
|
117
|
-
headerActions && /* @__PURE__ */ jsxRuntime.jsx("div", { className: title ? "mt-1.5" : "", children: headerActions })
|
|
118
|
-
] }),
|
|
119
|
-
modeSwitcher
|
|
120
|
-
] }),
|
|
121
|
-
body
|
|
122
|
-
]
|
|
123
|
-
}
|
|
124
|
-
);
|
|
125
|
-
}
|
|
126
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
127
|
-
"div",
|
|
128
|
-
{
|
|
129
|
-
"data-slot": "floating-panel",
|
|
130
|
-
"data-mode": mode,
|
|
131
|
-
className: ui.cn("flex h-full flex-col bg-background text-foreground", className),
|
|
132
|
-
onClick: onPanelClick,
|
|
133
|
-
children: [
|
|
134
|
-
!isRenderFunction && /* @__PURE__ */ jsxRuntime.jsx(
|
|
135
|
-
chunk7RGLTF76_cjs.TabHeader,
|
|
136
|
-
{
|
|
137
|
-
tabs: [{ id: panelId, label: tabLabel ?? title }],
|
|
138
|
-
activeTabId: panelId,
|
|
139
|
-
onTabChange: () => {
|
|
140
|
-
},
|
|
141
|
-
rightContent: modeSwitcher
|
|
142
|
-
}
|
|
143
|
-
),
|
|
144
|
-
body
|
|
145
|
-
]
|
|
146
|
-
}
|
|
147
|
-
);
|
|
148
|
-
}
|
|
149
|
-
var DEFAULT_CONFIG_SWITCHER_BAR_LABELS = {
|
|
150
|
-
placeholder: "Select configuration...",
|
|
151
|
-
save: "Save",
|
|
152
|
-
saving: "Saving...",
|
|
153
|
-
delete: "Delete"
|
|
154
|
-
};
|
|
155
|
-
var MARKERS = { default: lucideReact.Star, original: lucideReact.Undo2, "last-used": lucideReact.History };
|
|
156
|
-
function ConfigSwitcherBar({
|
|
157
|
-
options,
|
|
158
|
-
value,
|
|
159
|
-
onSelect,
|
|
160
|
-
hasUnsavedChanges,
|
|
161
|
-
unsavedTitle = "Unsaved Changes",
|
|
162
|
-
unsavedSubtitle = "Changes will be lost if you switch",
|
|
163
|
-
showNameField,
|
|
164
|
-
name,
|
|
165
|
-
onNameChange,
|
|
166
|
-
namePlaceholder,
|
|
167
|
-
saveLabel,
|
|
168
|
-
onSave,
|
|
169
|
-
isSaving,
|
|
170
|
-
canDelete,
|
|
171
|
-
onDelete,
|
|
172
|
-
isDeleting,
|
|
173
|
-
nameTestId,
|
|
174
|
-
saveTestId,
|
|
175
|
-
deleteTestId,
|
|
176
|
-
labels,
|
|
177
|
-
className
|
|
178
|
-
}) {
|
|
179
|
-
const l = react.useMemo(() => ({ ...DEFAULT_CONFIG_SWITCHER_BAR_LABELS, ...labels }), [labels]);
|
|
180
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
181
|
-
ui.DialogFooter,
|
|
182
|
-
{
|
|
183
|
-
"data-slot": "config-switcher-bar",
|
|
184
|
-
className: ui.cn("flex-shrink-0 border-t bg-muted px-4 py-4", className),
|
|
185
|
-
children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex w-full flex-col gap-3", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-h-[36px] items-center gap-3", children: [
|
|
186
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
187
|
-
ui.Select,
|
|
188
|
-
{
|
|
189
|
-
value: hasUnsavedChanges ? "unsaved" : value,
|
|
190
|
-
onValueChange: (v) => {
|
|
191
|
-
if (v !== "unsaved") onSelect(v);
|
|
192
|
-
},
|
|
193
|
-
children: [
|
|
194
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.SelectTrigger, { className: "h-9 min-w-0 flex-1 border-0 bg-background", children: /* @__PURE__ */ jsxRuntime.jsx(ui.SelectValue, { placeholder: l.placeholder }) }),
|
|
195
|
-
/* @__PURE__ */ jsxRuntime.jsxs(ui.SelectContent, { position: "popper", children: [
|
|
196
|
-
hasUnsavedChanges && /* @__PURE__ */ jsxRuntime.jsx(ui.SelectItem, { value: "unsaved", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col", children: [
|
|
197
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium", children: unsavedTitle }),
|
|
198
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-muted-foreground", children: unsavedSubtitle })
|
|
199
|
-
] }) }),
|
|
200
|
-
options.map((o) => {
|
|
201
|
-
const Marker = o.marker ? MARKERS[o.marker] : null;
|
|
202
|
-
return /* @__PURE__ */ jsxRuntime.jsx(ui.SelectItem, { value: o.value, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start justify-between gap-2", children: [
|
|
203
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col", children: [
|
|
204
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium", children: o.title }),
|
|
205
|
-
o.subtitle && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-muted-foreground", children: o.subtitle })
|
|
206
|
-
] }),
|
|
207
|
-
Marker && /* @__PURE__ */ jsxRuntime.jsx(Marker, { className: "mt-0.5 size-3 flex-shrink-0 text-muted-foreground" })
|
|
208
|
-
] }) }, o.value);
|
|
209
|
-
})
|
|
210
|
-
] })
|
|
211
|
-
]
|
|
212
|
-
}
|
|
213
|
-
),
|
|
214
|
-
showNameField && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
215
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
216
|
-
ui.Input,
|
|
217
|
-
{
|
|
218
|
-
value: name,
|
|
219
|
-
onChange: (e) => onNameChange(e.target.value),
|
|
220
|
-
placeholder: namePlaceholder,
|
|
221
|
-
className: "h-9 min-w-0 flex-1 bg-background",
|
|
222
|
-
"data-testid": chunkMHVNT4J3_cjs.testIdOr(nameTestId, { testId: "config-name-input" })
|
|
223
|
-
}
|
|
224
|
-
),
|
|
225
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
226
|
-
ui.Button,
|
|
227
|
-
{
|
|
228
|
-
variant: "outline",
|
|
229
|
-
size: "sm",
|
|
230
|
-
className: "h-9",
|
|
231
|
-
onClick: onSave,
|
|
232
|
-
disabled: isSaving || !name.trim(),
|
|
233
|
-
"data-testid": chunkMHVNT4J3_cjs.testIdOr(saveTestId, { testId: "save-config-button" }),
|
|
234
|
-
children: isSaving ? l.saving : saveLabel
|
|
235
|
-
}
|
|
236
|
-
)
|
|
237
|
-
] }),
|
|
238
|
-
canDelete && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
239
|
-
ui.Button,
|
|
240
|
-
{
|
|
241
|
-
variant: "outline",
|
|
242
|
-
size: "sm",
|
|
243
|
-
className: "h-9 border-destructive text-destructive hover:bg-destructive hover:text-destructive-foreground",
|
|
244
|
-
onClick: onDelete,
|
|
245
|
-
disabled: isDeleting,
|
|
246
|
-
"data-testid": chunkMHVNT4J3_cjs.testIdOr(deleteTestId, { testId: "delete-config-button" }),
|
|
247
|
-
children: [
|
|
248
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Trash2, { className: "mr-2 size-4" }),
|
|
249
|
-
l.delete
|
|
250
|
-
]
|
|
251
|
-
}
|
|
252
|
-
)
|
|
253
|
-
] }) })
|
|
254
|
-
}
|
|
255
|
-
);
|
|
256
|
-
}
|
|
257
|
-
var CONVERSATION_TITLE_MAX = 50;
|
|
258
|
-
var DEFAULT_CONVERSATION_TITLE_SECTION_LABELS = {
|
|
259
|
-
title: "Conversation Title",
|
|
260
|
-
placeholder: "New Conversation",
|
|
261
|
-
share: "Share",
|
|
262
|
-
shared: "Shared",
|
|
263
|
-
ownerOnlyShare: "Only available to conversation owner",
|
|
264
|
-
makePrivate: "Make private again",
|
|
265
|
-
characters: (count, max) => `${count}/${max} characters`,
|
|
266
|
-
saving: "Saving...",
|
|
267
|
-
ownerOnlyEdit: "Only the conversation owner can edit the title"
|
|
268
|
-
};
|
|
269
|
-
var SECTION_CLASS = "rounded-md border bg-muted/50 p-4";
|
|
270
|
-
function ConversationTitleSection({
|
|
271
|
-
title,
|
|
272
|
-
onTitleChange,
|
|
273
|
-
onTitleCommit,
|
|
274
|
-
isOwner,
|
|
275
|
-
isShared,
|
|
276
|
-
isSharing,
|
|
277
|
-
isSavingTitle,
|
|
278
|
-
onShare,
|
|
279
|
-
onUnshare,
|
|
280
|
-
inputTestId,
|
|
281
|
-
shareTestId,
|
|
282
|
-
labels
|
|
283
|
-
}) {
|
|
284
|
-
const l = react.useMemo(() => ({ ...DEFAULT_CONVERSATION_TITLE_SECTION_LABELS, ...labels }), [labels]);
|
|
285
|
-
const trimmed = title.trim();
|
|
286
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(chunkULWRNGGE_cjs.ModalSection, { className: SECTION_CLASS, children: [
|
|
287
|
-
/* @__PURE__ */ jsxRuntime.jsx(chunkULWRNGGE_cjs.ModalSectionTitle, { children: l.title }),
|
|
288
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-3", children: [
|
|
289
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
290
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
291
|
-
ui.Input,
|
|
292
|
-
{
|
|
293
|
-
value: title,
|
|
294
|
-
onChange: (e) => {
|
|
295
|
-
if (isOwner && e.target.value.length <= CONVERSATION_TITLE_MAX) {
|
|
296
|
-
onTitleChange(e.target.value);
|
|
297
|
-
}
|
|
298
|
-
},
|
|
299
|
-
onBlur: () => {
|
|
300
|
-
if (isOwner && trimmed && trimmed.length <= CONVERSATION_TITLE_MAX) onTitleCommit();
|
|
301
|
-
},
|
|
302
|
-
placeholder: l.placeholder,
|
|
303
|
-
maxLength: 60,
|
|
304
|
-
disabled: !isOwner,
|
|
305
|
-
"data-testid": chunkMHVNT4J3_cjs.testIdOr(inputTestId, { testId: "conversation-title-input" })
|
|
306
|
-
}
|
|
307
|
-
),
|
|
308
|
-
/* @__PURE__ */ jsxRuntime.jsxs(ui.Tooltip, { children: [
|
|
309
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx("span", { tabIndex: !isOwner ? 0 : void 0, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
310
|
-
ui.Button,
|
|
311
|
-
{
|
|
312
|
-
variant: isShared ? "secondary" : "outline",
|
|
313
|
-
size: "sm",
|
|
314
|
-
className: "h-9 px-3 pointer-coarse:h-11",
|
|
315
|
-
onClick: () => {
|
|
316
|
-
if (!isOwner) return;
|
|
317
|
-
if (isShared) onUnshare?.();
|
|
318
|
-
else onShare();
|
|
319
|
-
},
|
|
320
|
-
disabled: !isOwner || isShared && !onUnshare || isSharing,
|
|
321
|
-
title: isOwner && isShared && onUnshare ? l.makePrivate : void 0,
|
|
322
|
-
"data-testid": chunkMHVNT4J3_cjs.testIdOr(shareTestId, { testId: "share-conversation-button" }),
|
|
323
|
-
children: [
|
|
324
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Users, { className: "mr-1 size-3" }),
|
|
325
|
-
isShared ? l.shared : l.share
|
|
326
|
-
]
|
|
327
|
-
}
|
|
328
|
-
) }) }),
|
|
329
|
-
!isOwner && /* @__PURE__ */ jsxRuntime.jsx(ui.TooltipContent, { children: /* @__PURE__ */ jsxRuntime.jsx("p", { children: l.ownerOnlyShare }) })
|
|
330
|
-
] })
|
|
331
|
-
] }),
|
|
332
|
-
isOwner ? /* @__PURE__ */ jsxRuntime.jsxs(
|
|
333
|
-
"p",
|
|
334
|
-
{
|
|
335
|
-
className: ui.cn(
|
|
336
|
-
"text-sm",
|
|
337
|
-
title.length > CONVERSATION_TITLE_MAX ? "text-destructive" : "text-muted-foreground"
|
|
338
|
-
),
|
|
339
|
-
children: [
|
|
340
|
-
l.characters(title.length, CONVERSATION_TITLE_MAX),
|
|
341
|
-
isSavingTitle && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-2 text-primary", children: l.saving })
|
|
342
|
-
]
|
|
343
|
-
}
|
|
344
|
-
) : /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: l.ownerOnlyEdit })
|
|
345
|
-
] })
|
|
346
|
-
] });
|
|
347
|
-
}
|
|
348
|
-
var DEFAULT_MODEL_SELECTION_SECTION_LABELS = {
|
|
349
|
-
title: "AI Model Selection",
|
|
350
|
-
description: "Select the AI model to use for this conversation",
|
|
351
|
-
useDefaults: "Use defaults",
|
|
352
|
-
auto: "Auto",
|
|
353
|
-
default: "Default",
|
|
354
|
-
lastUsed: "Last used",
|
|
355
|
-
deepThinking: "Deep Thinking"
|
|
356
|
-
};
|
|
357
|
-
function ModelSelectionSection({
|
|
358
|
-
selector,
|
|
359
|
-
onUseDefaults,
|
|
360
|
-
defaultsTestId,
|
|
361
|
-
labels
|
|
362
|
-
}) {
|
|
363
|
-
const l = react.useMemo(() => ({ ...DEFAULT_MODEL_SELECTION_SECTION_LABELS, ...labels }), [labels]);
|
|
364
|
-
const legend = [
|
|
365
|
-
{ icon: lucideReact.Sparkles, label: l.auto },
|
|
366
|
-
{ icon: lucideReact.Star, label: l.default },
|
|
367
|
-
{ icon: lucideReact.History, label: l.lastUsed },
|
|
368
|
-
{ icon: lucideReact.Brain, label: l.deepThinking }
|
|
369
|
-
];
|
|
370
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(chunkULWRNGGE_cjs.ModalSection, { className: SECTION_CLASS, children: [
|
|
371
|
-
/* @__PURE__ */ jsxRuntime.jsx(chunkULWRNGGE_cjs.ModalSectionTitle, { children: l.title }),
|
|
372
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2", children: [
|
|
373
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: l.description }),
|
|
374
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
375
|
-
selector,
|
|
376
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
377
|
-
ui.Button,
|
|
378
|
-
{
|
|
379
|
-
variant: "outline",
|
|
380
|
-
size: "sm",
|
|
381
|
-
className: "flex h-8 items-center gap-1.5 px-3 pointer-coarse:h-11",
|
|
382
|
-
onClick: onUseDefaults,
|
|
383
|
-
"data-testid": chunkMHVNT4J3_cjs.testIdOr(defaultsTestId, { testId: "use-defaults-button" }),
|
|
384
|
-
children: [
|
|
385
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Star, { className: "size-4" }),
|
|
386
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm", children: l.useDefaults })
|
|
387
|
-
]
|
|
388
|
-
}
|
|
389
|
-
)
|
|
390
|
-
] }),
|
|
391
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap items-center gap-x-4 gap-y-1 text-sm text-muted-foreground", children: legend.map(({ icon: Icon, label }) => /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center gap-1", children: [
|
|
392
|
-
/* @__PURE__ */ jsxRuntime.jsx(Icon, { className: "size-3" }),
|
|
393
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { children: label })
|
|
394
|
-
] }, label)) })
|
|
395
|
-
] })
|
|
396
|
-
] });
|
|
397
|
-
}
|
|
398
|
-
function ThreadPreviewDialog({
|
|
399
|
-
open,
|
|
400
|
-
onOpenChange,
|
|
401
|
-
crumbs,
|
|
402
|
-
description = "Thread visualization",
|
|
403
|
-
width,
|
|
404
|
-
testId,
|
|
405
|
-
children
|
|
406
|
-
}) {
|
|
407
|
-
return /* @__PURE__ */ jsxRuntime.jsx(ui.Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
408
|
-
ui.DialogContent,
|
|
409
|
-
{
|
|
410
|
-
presentation: "sheet",
|
|
411
|
-
className: "flex flex-col overflow-hidden p-0",
|
|
412
|
-
style: { width: `${width}px`, maxWidth: "95vw", height: "80vh", maxHeight: "90vh" },
|
|
413
|
-
"data-testid": testId,
|
|
414
|
-
children: [
|
|
415
|
-
/* @__PURE__ */ jsxRuntime.jsxs(chunkULWRNGGE_cjs.ModalHeader, { children: [
|
|
416
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.DialogTitle, { children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-3", children: crumbs.map((c, i) => /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center gap-3", children: [
|
|
417
|
-
i > 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "/" }),
|
|
418
|
-
c.icon,
|
|
419
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { children: c.label })
|
|
420
|
-
] }, i)) }) }),
|
|
421
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.DialogDescription, { className: "sr-only", children: description })
|
|
422
|
-
] }),
|
|
423
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-h-0 flex-1 overflow-auto px-6 pb-6", children })
|
|
424
|
-
]
|
|
425
|
-
}
|
|
426
|
-
) });
|
|
427
|
-
}
|
|
428
|
-
var ITEMS = { one: "item", other: "items" };
|
|
429
|
-
function isInlineObject(data) {
|
|
430
|
-
if (data === null || data === void 0) return true;
|
|
431
|
-
if (typeof data !== "object") return true;
|
|
432
|
-
if (Array.isArray(data)) return data.length === 0;
|
|
433
|
-
const keys = Object.keys(data);
|
|
434
|
-
if (keys.length === 0) return true;
|
|
435
|
-
if (keys.length > 4) return false;
|
|
436
|
-
return Object.values(data).every(
|
|
437
|
-
(v) => v === null || v === void 0 || typeof v !== "object"
|
|
438
|
-
);
|
|
439
|
-
}
|
|
440
|
-
function inlineSummary(data) {
|
|
441
|
-
const parts = Object.entries(data).map(([k, v]) => {
|
|
442
|
-
if (v === null) return `${k}: null`;
|
|
443
|
-
if (typeof v === "string") return `${k}: "${v.length > 40 ? v.slice(0, 40) + "\u2026" : v}"`;
|
|
444
|
-
return `${k}: ${String(v)}`;
|
|
445
|
-
});
|
|
446
|
-
return `{ ${parts.join(", ")} }`;
|
|
447
|
-
}
|
|
448
|
-
function arrayPreview(data) {
|
|
449
|
-
if (data.length === 0) return "[]";
|
|
450
|
-
const first = data[0];
|
|
451
|
-
if (typeof first !== "object" || first === null) return `[${chunkKDG6FER6_cjs.formatCount(data.length, ITEMS)}]`;
|
|
452
|
-
const obj = first;
|
|
453
|
-
const previewKeys = ["action", "step", "phase", "tool", "name", "type", "id"];
|
|
454
|
-
const parts = previewKeys.filter((k) => obj[k] !== void 0).slice(0, 3).map((k) => `${k}: ${JSON.stringify(obj[k])}`);
|
|
455
|
-
if (parts.length === 0) return `[${chunkKDG6FER6_cjs.formatCount(data.length, ITEMS)}]`;
|
|
456
|
-
return `[${chunkKDG6FER6_cjs.formatCount(data.length, ITEMS)} \u2014 { ${parts.join(", ")} }, \u2026]`;
|
|
457
|
-
}
|
|
458
|
-
var NAME_CLASS = "font-medium text-primary";
|
|
459
|
-
var COPY_CLASS = "rounded p-0.5 opacity-50 transition-opacity hover:bg-muted hover:opacity-100 focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:flex pointer-coarse:size-11 pointer-coarse:items-center pointer-coarse:justify-center pointer-coarse:opacity-100";
|
|
460
|
-
function valueColor(data) {
|
|
461
|
-
if (data === null || data === void 0) return "text-muted-foreground";
|
|
462
|
-
switch (typeof data) {
|
|
463
|
-
case "string":
|
|
464
|
-
return "text-primary";
|
|
465
|
-
case "number":
|
|
466
|
-
return "text-primary";
|
|
467
|
-
case "boolean":
|
|
468
|
-
return "text-purple-700 dark:text-purple-400";
|
|
469
|
-
default:
|
|
470
|
-
return "text-foreground";
|
|
471
|
-
}
|
|
472
|
-
}
|
|
473
|
-
function plainValue(data) {
|
|
474
|
-
if (data === null) return "null";
|
|
475
|
-
if (data === void 0) return "undefined";
|
|
476
|
-
return typeof data === "string" ? `"${data}"` : String(data);
|
|
477
|
-
}
|
|
478
|
-
function JsonTree({
|
|
479
|
-
data,
|
|
480
|
-
name,
|
|
481
|
-
defaultExpanded = false,
|
|
482
|
-
level = 0,
|
|
483
|
-
path = [],
|
|
484
|
-
resolveHint,
|
|
485
|
-
formatValue: formatValue2
|
|
486
|
-
}) {
|
|
487
|
-
const [isExpanded, setIsExpanded] = react.useState(defaultExpanded || level < 2);
|
|
488
|
-
const [copied, setCopied] = react.useState(false);
|
|
489
|
-
const currentPath = name ? [...path, name] : path;
|
|
490
|
-
const hint = name && resolveHint ? resolveHint(currentPath, name) : null;
|
|
491
|
-
const displayName = hint?.displayName || name;
|
|
492
|
-
const handleCopy = (value) => {
|
|
493
|
-
const text = typeof value === "string" ? value : JSON.stringify(value, null, 2);
|
|
494
|
-
void navigator.clipboard.writeText(text).then(() => {
|
|
495
|
-
setCopied(true);
|
|
496
|
-
setTimeout(() => setCopied(false), 2e3);
|
|
497
|
-
});
|
|
498
|
-
};
|
|
499
|
-
const copyButton = (title, value) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
500
|
-
"button",
|
|
501
|
-
{
|
|
502
|
-
type: "button",
|
|
503
|
-
onClick: () => handleCopy(value),
|
|
504
|
-
className: COPY_CLASS,
|
|
505
|
-
title,
|
|
506
|
-
"aria-label": title,
|
|
507
|
-
children: copied ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { size: 12, className: "text-green-text" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Copy, { size: 12 })
|
|
508
|
-
}
|
|
509
|
-
);
|
|
510
|
-
const isArray = Array.isArray(data);
|
|
511
|
-
const isObject = typeof data === "object" && data !== null && !isArray;
|
|
512
|
-
if (!isObject && !isArray) {
|
|
513
|
-
const displayValue = hint && formatValue2 ? formatValue2(data, hint) : plainValue(data);
|
|
514
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
515
|
-
"div",
|
|
516
|
-
{
|
|
517
|
-
"data-slot": "json-tree-leaf",
|
|
518
|
-
className: "group flex items-center gap-2 py-0.5 font-mono text-sm",
|
|
519
|
-
children: [
|
|
520
|
-
displayName && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: NAME_CLASS, title: hint?.description, children: [
|
|
521
|
-
displayName,
|
|
522
|
-
":"
|
|
523
|
-
] }),
|
|
524
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: valueColor(data), children: displayValue }),
|
|
525
|
-
hint?.formatType === "id" && typeof data === "string" && data.length > 20 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-sm text-muted-foreground", title: data, children: [
|
|
526
|
-
"(full: ",
|
|
527
|
-
data,
|
|
528
|
-
")"
|
|
529
|
-
] }),
|
|
530
|
-
copyButton("Copy value", data)
|
|
531
|
-
]
|
|
532
|
-
}
|
|
533
|
-
);
|
|
534
|
-
}
|
|
535
|
-
if (isObject && isInlineObject(data)) {
|
|
536
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
537
|
-
"div",
|
|
538
|
-
{
|
|
539
|
-
"data-slot": "json-tree-leaf",
|
|
540
|
-
className: "group flex items-center gap-2 py-0.5 font-mono text-sm",
|
|
541
|
-
children: [
|
|
542
|
-
displayName && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: NAME_CLASS, children: [
|
|
543
|
-
displayName,
|
|
544
|
-
":"
|
|
545
|
-
] }),
|
|
546
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: inlineSummary(data) }),
|
|
547
|
-
copyButton("Copy object", data)
|
|
548
|
-
]
|
|
549
|
-
}
|
|
550
|
-
);
|
|
551
|
-
}
|
|
552
|
-
const Icon = isExpanded ? lucideReact.ChevronDown : lucideReact.ChevronRight;
|
|
553
|
-
const entries = isArray ? data.map((item, index) => [String(index), item]) : Object.entries(data);
|
|
554
|
-
const collapsedPreview = isArray ? arrayPreview(data) : `{${Object.keys(data).length} fields}`;
|
|
555
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-slot": "json-tree", className: "font-mono text-sm", children: [
|
|
556
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "group flex items-center gap-1 py-0.5", children: [
|
|
557
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
558
|
-
"button",
|
|
559
|
-
{
|
|
560
|
-
type: "button",
|
|
561
|
-
onClick: () => setIsExpanded(!isExpanded),
|
|
562
|
-
"aria-expanded": isExpanded,
|
|
563
|
-
className: "flex items-center gap-1 rounded p-0.5 transition-colors hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:min-h-11",
|
|
564
|
-
title: hint?.description,
|
|
565
|
-
children: [
|
|
566
|
-
/* @__PURE__ */ jsxRuntime.jsx(Icon, { size: 14, className: "shrink-0" }),
|
|
567
|
-
displayName && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: NAME_CLASS, children: [
|
|
568
|
-
displayName,
|
|
569
|
-
":"
|
|
570
|
-
] }),
|
|
571
|
-
!isExpanded && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "max-w-[400px] truncate text-sm text-muted-foreground", children: collapsedPreview }),
|
|
572
|
-
isExpanded && isArray && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-sm text-muted-foreground", children: [
|
|
573
|
-
data.length,
|
|
574
|
-
" items"
|
|
575
|
-
] })
|
|
576
|
-
]
|
|
577
|
-
}
|
|
578
|
-
),
|
|
579
|
-
copyButton("Copy object", data)
|
|
580
|
-
] }),
|
|
581
|
-
isExpanded && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "ml-4 border-l border-border/40 pl-2", children: entries.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "py-0.5 text-sm text-muted-foreground", children: isArray ? "empty array" : "empty object" }) : entries.map(([key, value]) => {
|
|
582
|
-
if (isArray && typeof value === "object" && value !== null && isInlineObject(value)) {
|
|
583
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "py-0.5 font-mono text-sm text-muted-foreground", children: inlineSummary(value) }, key);
|
|
584
|
-
}
|
|
585
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
586
|
-
JsonTree,
|
|
587
|
-
{
|
|
588
|
-
name: isArray ? void 0 : key,
|
|
589
|
-
data: value,
|
|
590
|
-
level: level + 1,
|
|
591
|
-
path: currentPath,
|
|
592
|
-
resolveHint,
|
|
593
|
-
formatValue: formatValue2
|
|
594
|
-
},
|
|
595
|
-
key
|
|
596
|
-
);
|
|
597
|
-
}) })
|
|
598
|
-
] });
|
|
599
|
-
}
|
|
600
21
|
|
|
601
|
-
// src/settings/message-schema-hints.ts
|
|
602
|
-
var messageFieldHints = {
|
|
603
|
-
role: {
|
|
604
|
-
displayName: "Role",
|
|
605
|
-
formatType: "enum",
|
|
606
|
-
description: "Message role (user, assistant, or system)"
|
|
607
|
-
},
|
|
608
|
-
content: {
|
|
609
|
-
displayName: "Content",
|
|
610
|
-
formatType: "long-string",
|
|
611
|
-
description: "Message content text"
|
|
612
|
-
},
|
|
613
|
-
created_at: {
|
|
614
|
-
displayName: "Created At",
|
|
615
|
-
formatType: "timestamp",
|
|
616
|
-
description: "Message creation timestamp"
|
|
617
|
-
},
|
|
618
|
-
external_id: {
|
|
619
|
-
displayName: "Message ID",
|
|
620
|
-
formatType: "id",
|
|
621
|
-
description: "External message identifier"
|
|
622
|
-
},
|
|
623
|
-
conversation_ext_id: {
|
|
624
|
-
displayName: "Conversation ID",
|
|
625
|
-
formatType: "id",
|
|
626
|
-
description: "Parent conversation identifier"
|
|
627
|
-
},
|
|
628
|
-
parent_message_ext_id: {
|
|
629
|
-
displayName: "Parent Message ID",
|
|
630
|
-
formatType: "id",
|
|
631
|
-
description: "Parent message identifier (null for first message)"
|
|
632
|
-
},
|
|
633
|
-
created_by_ext_id: {
|
|
634
|
-
displayName: "Created By",
|
|
635
|
-
formatType: "id",
|
|
636
|
-
description: "User who created this message"
|
|
637
|
-
},
|
|
638
|
-
config_ext_id: {
|
|
639
|
-
displayName: "Config ID",
|
|
640
|
-
formatType: "id",
|
|
641
|
-
description: "Configuration used for this message"
|
|
642
|
-
},
|
|
643
|
-
shared: {
|
|
644
|
-
displayName: "Shared",
|
|
645
|
-
formatType: "boolean",
|
|
646
|
-
description: "Whether message is shared"
|
|
647
|
-
},
|
|
648
|
-
tools: {
|
|
649
|
-
displayName: "Tools",
|
|
650
|
-
formatType: "json",
|
|
651
|
-
description: "Tool outputs (citations, retrieval, trace)"
|
|
652
|
-
},
|
|
653
|
-
meta: {
|
|
654
|
-
displayName: "Metadata",
|
|
655
|
-
formatType: "json",
|
|
656
|
-
description: "Additional metadata"
|
|
657
|
-
}
|
|
658
|
-
};
|
|
659
|
-
var traceToolFieldHints = {
|
|
660
|
-
name: {
|
|
661
|
-
displayName: "Tool Name",
|
|
662
|
-
formatType: "enum",
|
|
663
|
-
description: "Execution trace tool"
|
|
664
|
-
},
|
|
665
|
-
description: {
|
|
666
|
-
displayName: "Description",
|
|
667
|
-
formatType: "string",
|
|
668
|
-
description: "Tool description"
|
|
669
|
-
},
|
|
670
|
-
trace_id: {
|
|
671
|
-
displayName: "Trace ID",
|
|
672
|
-
formatType: "id",
|
|
673
|
-
description: "Unique trace identifier"
|
|
674
|
-
},
|
|
675
|
-
start_time: {
|
|
676
|
-
displayName: "Start Time",
|
|
677
|
-
formatType: "timestamp",
|
|
678
|
-
description: "When execution started"
|
|
679
|
-
},
|
|
680
|
-
duration_seconds: {
|
|
681
|
-
displayName: "Duration (seconds)",
|
|
682
|
-
formatType: "number",
|
|
683
|
-
description: "Total execution time"
|
|
684
|
-
},
|
|
685
|
-
steps: {
|
|
686
|
-
displayName: "Execution Steps",
|
|
687
|
-
formatType: "json",
|
|
688
|
-
description: "Full execution trace with all steps"
|
|
689
|
-
}
|
|
690
|
-
};
|
|
691
|
-
var citationToolFieldHints = {
|
|
692
|
-
name: {
|
|
693
|
-
displayName: "Tool Name",
|
|
694
|
-
formatType: "enum",
|
|
695
|
-
description: "Model citation tool"
|
|
696
|
-
},
|
|
697
|
-
tool_responses: {
|
|
698
|
-
displayName: "Citations",
|
|
699
|
-
formatType: "json",
|
|
700
|
-
description: "Citation data mapped by citation number"
|
|
701
|
-
}
|
|
702
|
-
};
|
|
703
|
-
function getFieldHint(path, fieldName) {
|
|
704
|
-
if (path.length === 1 && path[0] === "message") {
|
|
705
|
-
return messageFieldHints[fieldName] || null;
|
|
706
|
-
}
|
|
707
|
-
if (path.length >= 3 && path[0] === "message" && path[1] === "tools" && path[2] === "trace") {
|
|
708
|
-
return traceToolFieldHints[fieldName] || null;
|
|
709
|
-
}
|
|
710
|
-
if (path.length >= 3 && path[0] === "message" && path[1] === "tools" && path[2] === "model_citations") {
|
|
711
|
-
return citationToolFieldHints[fieldName] || null;
|
|
712
|
-
}
|
|
713
|
-
if (fieldName === "external_id" || fieldName.endsWith("_ext_id")) {
|
|
714
|
-
return { formatType: "id", displayName: fieldName.replace(/_/g, " ") };
|
|
715
|
-
}
|
|
716
|
-
if (fieldName === "created_at" || fieldName === "updated_at" || fieldName.endsWith("_at")) {
|
|
717
|
-
return { formatType: "timestamp", displayName: fieldName.replace(/_/g, " ") };
|
|
718
|
-
}
|
|
719
|
-
if (fieldName.includes("time") && !fieldName.includes("duration")) {
|
|
720
|
-
return { formatType: "timestamp" };
|
|
721
|
-
}
|
|
722
|
-
if (fieldName.includes("duration")) {
|
|
723
|
-
return { formatType: "number", description: "Duration in seconds" };
|
|
724
|
-
}
|
|
725
|
-
if (path.length >= 2 && path[path.length - 2] === "tools" && fieldName === "trace") {
|
|
726
|
-
return {
|
|
727
|
-
displayName: "\u{1F50D} Execution Trace",
|
|
728
|
-
formatType: "json",
|
|
729
|
-
description: "Complete execution trace with all steps and timing"
|
|
730
|
-
};
|
|
731
|
-
}
|
|
732
|
-
return null;
|
|
733
|
-
}
|
|
734
|
-
function formatValue(value, hint) {
|
|
735
|
-
if (value === null) return "null";
|
|
736
|
-
if (value === void 0) return "undefined";
|
|
737
|
-
if (hint?.formatType === "timestamp" && typeof value === "string") {
|
|
738
|
-
try {
|
|
739
|
-
const date = new Date(value);
|
|
740
|
-
if (!isNaN(date.getTime())) {
|
|
741
|
-
return `${date.toLocaleString()} (${value})`;
|
|
742
|
-
}
|
|
743
|
-
} catch {
|
|
744
|
-
}
|
|
745
|
-
}
|
|
746
|
-
if (hint?.formatType === "timestamp" && typeof value === "number") {
|
|
747
|
-
const date = new Date(value * 1e3);
|
|
748
|
-
return `${date.toLocaleString()} (${value})`;
|
|
749
|
-
}
|
|
750
|
-
if (hint?.formatType === "id" && typeof value === "string") {
|
|
751
|
-
if (value.length > 20) {
|
|
752
|
-
return `${value.substring(0, 16)}...${value.substring(value.length - 4)}`;
|
|
753
|
-
}
|
|
754
|
-
}
|
|
755
|
-
if (typeof value === "string") {
|
|
756
|
-
if (value.length > 100) {
|
|
757
|
-
return `"${value.substring(0, 97)}..." (${value.length} chars)`;
|
|
758
|
-
}
|
|
759
|
-
return `"${value}"`;
|
|
760
|
-
}
|
|
761
|
-
return String(value);
|
|
762
|
-
}
|
|
763
|
-
function MessageJsonTree(props) {
|
|
764
|
-
return /* @__PURE__ */ jsxRuntime.jsx(JsonTree, { ...props, resolveHint: getFieldHint, formatValue });
|
|
765
|
-
}
|
|
766
|
-
var DEFAULT_TIPS_EDITOR_LABELS = {
|
|
767
|
-
titleList: "Edit tips",
|
|
768
|
-
titleNew: "New tip",
|
|
769
|
-
titleEdit: "Edit tip",
|
|
770
|
-
descriptionList: "All tips across every page. Change a tip's placement to move it to a page, show it everywhere, or hide it. Changes save instantly.",
|
|
771
|
-
descriptionNew: "Create a tip and choose where it shows.",
|
|
772
|
-
descriptionEdit: "Editing the tip below \u2014 change its copy, button, or placement.",
|
|
773
|
-
hiddenOff: "Hidden (off)",
|
|
774
|
-
customSuffix: " \xB7 custom",
|
|
775
|
-
editTip: "Edit tip",
|
|
776
|
-
deleteTip: "Delete tip",
|
|
777
|
-
addTip: "Add tip",
|
|
778
|
-
testerTitle: "Run a sequence (test)",
|
|
779
|
-
run: "Run",
|
|
780
|
-
cancel: "Cancel",
|
|
781
|
-
newTipIdentity: "New tip",
|
|
782
|
-
customTipIdentity: "Custom tip",
|
|
783
|
-
builtInTipIdentity: (code) => `Built-in tip \xB7 ${code}`,
|
|
784
|
-
yourNewTip: "Your new tip",
|
|
785
|
-
placement: "Placement",
|
|
786
|
-
message: "Message",
|
|
787
|
-
button: "Button",
|
|
788
|
-
noButton: "No button",
|
|
789
|
-
platformAction: "Platform action",
|
|
790
|
-
actionSequence: "Action sequence",
|
|
791
|
-
externalLink: "External link (new window)",
|
|
792
|
-
buttonLabel: "Button label",
|
|
793
|
-
action: "Action",
|
|
794
|
-
sequence: "Sequence",
|
|
795
|
-
url: "URL",
|
|
796
|
-
back: "Back",
|
|
797
|
-
save: "Save",
|
|
798
|
-
saving: "Saving\u2026"
|
|
799
|
-
};
|
|
800
|
-
function SelectField({
|
|
801
|
-
label,
|
|
802
|
-
value,
|
|
803
|
-
onValueChange,
|
|
804
|
-
options
|
|
805
|
-
}) {
|
|
806
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1", children: [
|
|
807
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Label, { children: label }),
|
|
808
|
-
/* @__PURE__ */ jsxRuntime.jsxs(ui.Select, { value, onValueChange, children: [
|
|
809
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.SelectTrigger, { children: /* @__PURE__ */ jsxRuntime.jsx(ui.SelectValue, {}) }),
|
|
810
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.SelectContent, { children: options.map((o) => /* @__PURE__ */ jsxRuntime.jsx(ui.SelectItem, { value: o.value, children: o.label }, o.value)) })
|
|
811
|
-
] })
|
|
812
|
-
] });
|
|
813
|
-
}
|
|
814
|
-
var ROW_BUTTON = "size-7 flex-shrink-0 pointer-coarse:size-11";
|
|
815
|
-
function TipsEditorDialog({
|
|
816
|
-
open,
|
|
817
|
-
onOpenChange,
|
|
818
|
-
form,
|
|
819
|
-
onFormChange,
|
|
820
|
-
onFormBack,
|
|
821
|
-
onFormSave,
|
|
822
|
-
rows,
|
|
823
|
-
onEditRow,
|
|
824
|
-
onDeleteRow,
|
|
825
|
-
onAdd,
|
|
826
|
-
busy,
|
|
827
|
-
error,
|
|
828
|
-
placementOptions,
|
|
829
|
-
actionOptions,
|
|
830
|
-
sequenceOptions,
|
|
831
|
-
activeSequenceId,
|
|
832
|
-
onRunSequence,
|
|
833
|
-
onCancelSequence,
|
|
834
|
-
messageMaxChars,
|
|
835
|
-
ctaLabelMaxChars,
|
|
836
|
-
labels
|
|
837
|
-
}) {
|
|
838
|
-
const tipCtaHrefId = react.useId();
|
|
839
|
-
const tipCtaLabelId = react.useId();
|
|
840
|
-
const tipMessageId = react.useId();
|
|
841
|
-
const l = react.useMemo(() => ({ ...DEFAULT_TIPS_EDITOR_LABELS, ...labels }), [labels]);
|
|
842
|
-
const isNew = form?.code === null;
|
|
843
|
-
const title = form ? isNew ? l.titleNew : l.titleEdit : l.titleList;
|
|
844
|
-
const description = form ? isNew ? l.descriptionNew : l.descriptionEdit : l.descriptionList;
|
|
845
|
-
const targetOptions = [
|
|
846
|
-
{ value: "none", label: l.noButton },
|
|
847
|
-
{ value: "action", label: l.platformAction },
|
|
848
|
-
{ value: "sequence", label: l.actionSequence },
|
|
849
|
-
{ value: "url", label: l.externalLink }
|
|
850
|
-
];
|
|
851
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
852
|
-
chunkULWRNGGE_cjs.ModalScaffold,
|
|
853
|
-
{
|
|
854
|
-
open,
|
|
855
|
-
onOpenChange,
|
|
856
|
-
title,
|
|
857
|
-
description,
|
|
858
|
-
showDescription: true,
|
|
859
|
-
className: "max-w-lg",
|
|
860
|
-
children: [
|
|
861
|
-
error && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-destructive", children: error }),
|
|
862
|
-
form ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-3", children: [
|
|
863
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-md border border-l-4 border-l-red-500 bg-muted/40 px-3 py-2", children: [
|
|
864
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs font-semibold uppercase tracking-wide text-muted-foreground", children: isNew ? l.newTipIdentity : form.isCustom ? l.customTipIdentity : l.builtInTipIdentity(form.code ?? "") }),
|
|
865
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-0.5 truncate text-sm font-medium text-foreground", children: form.original || l.yourNewTip })
|
|
866
|
-
] }),
|
|
867
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
868
|
-
SelectField,
|
|
869
|
-
{
|
|
870
|
-
label: l.placement,
|
|
871
|
-
value: form.placement,
|
|
872
|
-
onValueChange: (placement) => onFormChange({ placement }),
|
|
873
|
-
options: placementOptions
|
|
874
|
-
}
|
|
875
|
-
),
|
|
876
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1", children: [
|
|
877
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
|
|
878
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Label, { htmlFor: tipMessageId, children: l.message }),
|
|
879
|
-
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-xs text-muted-foreground", children: [
|
|
880
|
-
form.message.length,
|
|
881
|
-
"/",
|
|
882
|
-
messageMaxChars
|
|
883
|
-
] })
|
|
884
|
-
] }),
|
|
885
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
886
|
-
ui.Textarea,
|
|
887
|
-
{
|
|
888
|
-
id: tipMessageId,
|
|
889
|
-
value: form.message,
|
|
890
|
-
onChange: (e) => onFormChange({ message: e.target.value.slice(0, messageMaxChars) }),
|
|
891
|
-
maxLength: messageMaxChars,
|
|
892
|
-
rows: 2
|
|
893
|
-
}
|
|
894
|
-
)
|
|
895
|
-
] }),
|
|
896
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
897
|
-
SelectField,
|
|
898
|
-
{
|
|
899
|
-
label: l.button,
|
|
900
|
-
value: form.target,
|
|
901
|
-
onValueChange: (v) => onFormChange({ target: v }),
|
|
902
|
-
options: targetOptions
|
|
903
|
-
}
|
|
904
|
-
),
|
|
905
|
-
form.target !== "none" && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1", children: [
|
|
906
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Label, { htmlFor: tipCtaLabelId, children: l.buttonLabel }),
|
|
907
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
908
|
-
ui.Input,
|
|
909
|
-
{
|
|
910
|
-
id: tipCtaLabelId,
|
|
911
|
-
value: form.ctaLabel,
|
|
912
|
-
onChange: (e) => onFormChange({ ctaLabel: e.target.value.slice(0, ctaLabelMaxChars) }),
|
|
913
|
-
maxLength: ctaLabelMaxChars
|
|
914
|
-
}
|
|
915
|
-
)
|
|
916
|
-
] }),
|
|
917
|
-
form.target === "action" && /* @__PURE__ */ jsxRuntime.jsx(
|
|
918
|
-
SelectField,
|
|
919
|
-
{
|
|
920
|
-
label: l.action,
|
|
921
|
-
value: form.ctaAction,
|
|
922
|
-
onValueChange: (ctaAction) => onFormChange({ ctaAction }),
|
|
923
|
-
options: actionOptions
|
|
924
|
-
}
|
|
925
|
-
),
|
|
926
|
-
form.target === "sequence" && /* @__PURE__ */ jsxRuntime.jsx(
|
|
927
|
-
SelectField,
|
|
928
|
-
{
|
|
929
|
-
label: l.sequence,
|
|
930
|
-
value: form.ctaSequence,
|
|
931
|
-
onValueChange: (ctaSequence) => onFormChange({ ctaSequence }),
|
|
932
|
-
options: sequenceOptions
|
|
933
|
-
}
|
|
934
|
-
),
|
|
935
|
-
form.target === "url" && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1", children: [
|
|
936
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Label, { htmlFor: tipCtaHrefId, children: l.url }),
|
|
937
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
938
|
-
ui.Input,
|
|
939
|
-
{
|
|
940
|
-
id: tipCtaHrefId,
|
|
941
|
-
placeholder: "https://\u2026",
|
|
942
|
-
value: form.ctaHref,
|
|
943
|
-
onChange: (e) => onFormChange({ ctaHref: e.target.value })
|
|
944
|
-
}
|
|
945
|
-
)
|
|
946
|
-
] }),
|
|
947
|
-
/* @__PURE__ */ jsxRuntime.jsxs(ui.DialogFooter, { children: [
|
|
948
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Button, { variant: "ghost", onClick: onFormBack, disabled: busy, children: l.back }),
|
|
949
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Button, { onClick: onFormSave, disabled: busy || !form.message.trim(), children: busy ? l.saving : l.save })
|
|
950
|
-
] })
|
|
951
|
-
] }) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2", children: [
|
|
952
|
-
/* @__PURE__ */ jsxRuntime.jsx("ul", { className: "max-h-[55dvh] divide-y overflow-y-auto rounded border", children: rows.map((row) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex items-center gap-2 p-2 text-sm", children: [
|
|
953
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0 flex-1", children: [
|
|
954
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: ui.cn(row.isHidden && "text-muted-foreground line-through"), children: row.message }),
|
|
955
|
-
/* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-xs text-muted-foreground", children: [
|
|
956
|
-
row.isHidden ? l.hiddenOff : row.placementLabel,
|
|
957
|
-
row.isCustom && l.customSuffix
|
|
958
|
-
] })
|
|
959
|
-
] }),
|
|
960
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
961
|
-
ui.Button,
|
|
962
|
-
{
|
|
963
|
-
size: "icon",
|
|
964
|
-
variant: "ghost",
|
|
965
|
-
className: ROW_BUTTON,
|
|
966
|
-
onClick: () => onEditRow(row.code),
|
|
967
|
-
"aria-label": l.editTip,
|
|
968
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Pencil, { className: "size-3.5" })
|
|
969
|
-
}
|
|
970
|
-
),
|
|
971
|
-
row.isCustom && /* @__PURE__ */ jsxRuntime.jsx(
|
|
972
|
-
ui.Button,
|
|
973
|
-
{
|
|
974
|
-
size: "icon",
|
|
975
|
-
variant: "ghost",
|
|
976
|
-
className: ROW_BUTTON,
|
|
977
|
-
disabled: busy,
|
|
978
|
-
onClick: () => onDeleteRow(row.code),
|
|
979
|
-
"aria-label": l.deleteTip,
|
|
980
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Trash2, { className: "size-3.5" })
|
|
981
|
-
}
|
|
982
|
-
)
|
|
983
|
-
] }, row.code)) }),
|
|
984
|
-
/* @__PURE__ */ jsxRuntime.jsxs(ui.Button, { variant: "outline", size: "sm", onClick: onAdd, children: [
|
|
985
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Plus, { className: "mr-1 size-4" }),
|
|
986
|
-
" ",
|
|
987
|
-
l.addTip
|
|
988
|
-
] }),
|
|
989
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2 rounded border border-dashed p-2", children: [
|
|
990
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs font-semibold uppercase tracking-wide text-muted-foreground", children: l.testerTitle }),
|
|
991
|
-
/* @__PURE__ */ jsxRuntime.jsx("ul", { className: "divide-y rounded border", children: sequenceOptions.map((s) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex items-center gap-2 p-2 text-sm", children: [
|
|
992
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0 flex-1 truncate", children: s.label }),
|
|
993
|
-
activeSequenceId === s.value ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
994
|
-
ui.Button,
|
|
995
|
-
{
|
|
996
|
-
size: "sm",
|
|
997
|
-
variant: "outline",
|
|
998
|
-
className: "h-7 flex-shrink-0 pointer-coarse:h-11",
|
|
999
|
-
onClick: onCancelSequence,
|
|
1000
|
-
children: l.cancel
|
|
1001
|
-
}
|
|
1002
|
-
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
1003
|
-
ui.Button,
|
|
1004
|
-
{
|
|
1005
|
-
size: "sm",
|
|
1006
|
-
variant: "outline",
|
|
1007
|
-
className: "h-7 flex-shrink-0 pointer-coarse:h-11",
|
|
1008
|
-
onClick: () => onRunSequence(s.value),
|
|
1009
|
-
children: l.run
|
|
1010
|
-
}
|
|
1011
|
-
)
|
|
1012
|
-
] }, s.value)) })
|
|
1013
|
-
] })
|
|
1014
|
-
] })
|
|
1015
|
-
]
|
|
1016
|
-
}
|
|
1017
|
-
);
|
|
1018
|
-
}
|
|
1019
|
-
var DEFAULT_SYNC_DIALOG_FOOTER_LABELS = {
|
|
1020
|
-
cancel: "Cancel",
|
|
1021
|
-
save: "Save"
|
|
1022
|
-
};
|
|
1023
|
-
function SyncDialogFooter({
|
|
1024
|
-
onCancel,
|
|
1025
|
-
onSave,
|
|
1026
|
-
saveDisabled,
|
|
1027
|
-
isSaving,
|
|
1028
|
-
cancelButton,
|
|
1029
|
-
saveButton,
|
|
1030
|
-
labels
|
|
1031
|
-
}) {
|
|
1032
|
-
const l = { ...DEFAULT_SYNC_DIALOG_FOOTER_LABELS, ...labels };
|
|
1033
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(ui.DialogFooter, { "data-slot": "sync-dialog-footer", children: [
|
|
1034
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Button, { variant: "outline", size: "sm", onClick: onCancel, "data-testid": cancelButton?.testId, children: l.cancel }),
|
|
1035
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
1036
|
-
ui.Button,
|
|
1037
|
-
{
|
|
1038
|
-
size: "sm",
|
|
1039
|
-
onClick: onSave,
|
|
1040
|
-
disabled: saveDisabled || isSaving,
|
|
1041
|
-
"data-testid": saveButton?.testId,
|
|
1042
|
-
children: [
|
|
1043
|
-
isSaving && /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "mr-1.5 size-3.5 animate-spin" }),
|
|
1044
|
-
l.save
|
|
1045
|
-
]
|
|
1046
|
-
}
|
|
1047
|
-
)
|
|
1048
|
-
] });
|
|
1049
|
-
}
|
|
1050
|
-
function SyncDialogBody({ children }) {
|
|
1051
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-slot": "sync-dialog-body", className: "space-y-4 py-2", children });
|
|
1052
|
-
}
|
|
1053
|
-
function SyncField({ label, htmlFor, actions, hint, children }) {
|
|
1054
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-slot": "sync-field", className: "space-y-1.5", children: [
|
|
1055
|
-
(label || actions) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: ui.cn(actions && "flex items-center justify-between"), children: [
|
|
1056
|
-
label && /* @__PURE__ */ jsxRuntime.jsx(ui.Label, { htmlFor, children: label }),
|
|
1057
|
-
actions
|
|
1058
|
-
] }),
|
|
1059
|
-
children,
|
|
1060
|
-
hint && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground", children: hint })
|
|
1061
|
-
] });
|
|
1062
|
-
}
|
|
1063
|
-
function SyncLinkButton({
|
|
1064
|
-
onClick,
|
|
1065
|
-
testId,
|
|
1066
|
-
children
|
|
1067
|
-
}) {
|
|
1068
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1069
|
-
"button",
|
|
1070
|
-
{
|
|
1071
|
-
type: "button",
|
|
1072
|
-
className: "text-xs font-medium text-primary hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:min-h-11 pointer-coarse:px-1",
|
|
1073
|
-
onClick,
|
|
1074
|
-
"data-testid": testId,
|
|
1075
|
-
children
|
|
1076
|
-
}
|
|
1077
|
-
);
|
|
1078
|
-
}
|
|
1079
|
-
function SyncLinkRow({ children }) {
|
|
1080
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-3", children });
|
|
1081
|
-
}
|
|
1082
|
-
function SyncSelect({
|
|
1083
|
-
id,
|
|
1084
|
-
testId,
|
|
1085
|
-
value,
|
|
1086
|
-
onValueChange,
|
|
1087
|
-
options,
|
|
1088
|
-
placeholder
|
|
1089
|
-
}) {
|
|
1090
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(ui.Select, { value, onValueChange, children: [
|
|
1091
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.SelectTrigger, { id, "data-testid": testId, children: /* @__PURE__ */ jsxRuntime.jsx(ui.SelectValue, { placeholder }) }),
|
|
1092
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.SelectContent, { children: options.map((o) => /* @__PURE__ */ jsxRuntime.jsx(ui.SelectItem, { value: o.value, children: o.label }, o.value)) })
|
|
1093
|
-
] });
|
|
1094
|
-
}
|
|
1095
|
-
function SyncOptionToggle({
|
|
1096
|
-
checked,
|
|
1097
|
-
onCheckedChange,
|
|
1098
|
-
title,
|
|
1099
|
-
description,
|
|
1100
|
-
testId
|
|
1101
|
-
}) {
|
|
1102
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex cursor-pointer items-start gap-2 text-sm", children: [
|
|
1103
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1104
|
-
ui.Checkbox,
|
|
1105
|
-
{
|
|
1106
|
-
className: "mt-0.5",
|
|
1107
|
-
checked,
|
|
1108
|
-
onCheckedChange: (v) => onCheckedChange(v === true),
|
|
1109
|
-
"data-testid": testId
|
|
1110
|
-
}
|
|
1111
|
-
),
|
|
1112
|
-
/* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
|
|
1113
|
-
title,
|
|
1114
|
-
description && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "block text-xs text-muted-foreground", children: description })
|
|
1115
|
-
] })
|
|
1116
|
-
] });
|
|
1117
|
-
}
|
|
1118
|
-
function SyncOptions({ children }) {
|
|
1119
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-slot": "sync-options", className: "space-y-2.5", children });
|
|
1120
|
-
}
|
|
1121
|
-
function SyncLoading({ children, compact }) {
|
|
1122
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1123
|
-
"div",
|
|
1124
|
-
{
|
|
1125
|
-
className: ui.cn("flex items-center gap-2 text-sm text-muted-foreground", !compact && "py-2"),
|
|
1126
|
-
children: [
|
|
1127
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "size-3.5 animate-spin" }),
|
|
1128
|
-
" ",
|
|
1129
|
-
children
|
|
1130
|
-
]
|
|
1131
|
-
}
|
|
1132
|
-
);
|
|
1133
|
-
}
|
|
1134
|
-
function SyncNote({ children, testId }) {
|
|
1135
|
-
return /* @__PURE__ */ jsxRuntime.jsx("p", { className: "py-2 text-sm text-muted-foreground", "data-testid": testId, children });
|
|
1136
|
-
}
|
|
1137
|
-
function SyncSmallNote({ children, testId }) {
|
|
1138
|
-
return /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground", "data-testid": testId, children });
|
|
1139
|
-
}
|
|
1140
|
-
function SyncReconnectNotice({
|
|
1141
|
-
message,
|
|
1142
|
-
onReconnect,
|
|
1143
|
-
isPending,
|
|
1144
|
-
testId,
|
|
1145
|
-
label = "Reconnect"
|
|
1146
|
-
}) {
|
|
1147
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2 py-2", children: [
|
|
1148
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-destructive", children: message }),
|
|
1149
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
1150
|
-
ui.Button,
|
|
1151
|
-
{
|
|
1152
|
-
type: "button",
|
|
1153
|
-
size: "sm",
|
|
1154
|
-
onClick: onReconnect,
|
|
1155
|
-
disabled: isPending,
|
|
1156
|
-
"data-testid": testId,
|
|
1157
|
-
children: [
|
|
1158
|
-
isPending && /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "mr-1.5 size-3.5 animate-spin" }),
|
|
1159
|
-
label
|
|
1160
|
-
]
|
|
1161
|
-
}
|
|
1162
|
-
)
|
|
1163
|
-
] });
|
|
1164
|
-
}
|
|
1165
|
-
function SyncTreeFrame({ children }) {
|
|
1166
|
-
return /* @__PURE__ */ jsxRuntime.jsx(ui.ScrollArea, { className: "h-72 rounded-md border p-2", children });
|
|
1167
|
-
}
|
|
1168
|
-
function SyncCheckList({ items, selected, onToggle }) {
|
|
1169
|
-
return /* @__PURE__ */ jsxRuntime.jsx(ui.ScrollArea, { className: "max-h-44 rounded-md border border-border", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-1 p-2", children: items.map((c) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1170
|
-
"label",
|
|
1171
|
-
{
|
|
1172
|
-
className: "flex cursor-pointer items-center gap-2 rounded px-1.5 py-1 text-sm hover:bg-muted/50 pointer-coarse:min-h-11",
|
|
1173
|
-
children: [
|
|
1174
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1175
|
-
ui.Checkbox,
|
|
1176
|
-
{
|
|
1177
|
-
checked: selected.includes(c.id),
|
|
1178
|
-
onCheckedChange: () => onToggle(c.id),
|
|
1179
|
-
"data-testid": c.testId
|
|
1180
|
-
}
|
|
1181
|
-
),
|
|
1182
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", children: c.label })
|
|
1183
|
-
]
|
|
1184
|
-
},
|
|
1185
|
-
c.id
|
|
1186
|
-
)) }) });
|
|
1187
|
-
}
|
|
1188
|
-
var DEFAULT_SYNC_FOLDER_ROW_LABELS = {
|
|
1189
|
-
collapse: "Collapse folder",
|
|
1190
|
-
expand: "Expand folder",
|
|
1191
|
-
loading: "Loading\u2026",
|
|
1192
|
-
noSubfolders: "No subfolders"
|
|
1193
|
-
};
|
|
1194
|
-
var INDENT = 18;
|
|
1195
|
-
function SyncFolderRow({
|
|
1196
|
-
id,
|
|
1197
|
-
name,
|
|
1198
|
-
depth,
|
|
1199
|
-
hasChildren,
|
|
1200
|
-
isExpanded,
|
|
1201
|
-
onToggleExpanded,
|
|
1202
|
-
isSelectable,
|
|
1203
|
-
checked,
|
|
1204
|
-
disabled,
|
|
1205
|
-
onCheckedChange,
|
|
1206
|
-
count,
|
|
1207
|
-
isCountLoading,
|
|
1208
|
-
children,
|
|
1209
|
-
labels
|
|
1210
|
-
}) {
|
|
1211
|
-
const l = { ...DEFAULT_SYNC_FOLDER_ROW_LABELS, ...labels };
|
|
1212
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
1213
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
1214
|
-
"div",
|
|
1215
|
-
{
|
|
1216
|
-
className: "flex items-center gap-1.5 rounded px-1 py-1 text-sm hover:bg-muted/50 pointer-coarse:min-h-11",
|
|
1217
|
-
style: { paddingLeft: depth * INDENT + 4 },
|
|
1218
|
-
children: [
|
|
1219
|
-
hasChildren ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
1220
|
-
"button",
|
|
1221
|
-
{
|
|
1222
|
-
type: "button",
|
|
1223
|
-
className: "flex size-4 shrink-0 items-center justify-center text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:size-8",
|
|
1224
|
-
onClick: onToggleExpanded,
|
|
1225
|
-
"aria-label": isExpanded ? l.collapse : l.expand,
|
|
1226
|
-
"aria-expanded": isExpanded,
|
|
1227
|
-
children: isExpanded ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { className: "size-3.5" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRight, { className: "size-3.5" })
|
|
1228
|
-
}
|
|
1229
|
-
) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "size-4 shrink-0" }),
|
|
1230
|
-
isSelectable ? /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1231
|
-
"label",
|
|
1232
|
-
{
|
|
1233
|
-
className: "flex flex-1 cursor-pointer items-center gap-2 truncate",
|
|
1234
|
-
"data-testid": `drive-folder-row-${id}`,
|
|
1235
|
-
children: [
|
|
1236
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1237
|
-
ui.Checkbox,
|
|
1238
|
-
{
|
|
1239
|
-
checked,
|
|
1240
|
-
disabled,
|
|
1241
|
-
onCheckedChange,
|
|
1242
|
-
"data-testid": `drive-folder-checkbox-${id}`
|
|
1243
|
-
}
|
|
1244
|
-
),
|
|
1245
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", "data-testid": `drive-folder-name-${id}`, children: name }),
|
|
1246
|
-
isCountLoading ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "size-3 shrink-0 animate-spin text-muted-foreground" }) : typeof count === "number" ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "shrink-0 text-xs text-muted-foreground", children: [
|
|
1247
|
-
"(",
|
|
1248
|
-
count.toLocaleString(),
|
|
1249
|
-
")"
|
|
1250
|
-
] }) : null
|
|
1251
|
-
]
|
|
1252
|
-
}
|
|
1253
|
-
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
1254
|
-
"span",
|
|
1255
|
-
{
|
|
1256
|
-
className: "flex flex-1 items-center truncate font-medium text-muted-foreground",
|
|
1257
|
-
"data-testid": `drive-folder-row-${id}`,
|
|
1258
|
-
children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", "data-testid": `drive-folder-name-${id}`, children: name })
|
|
1259
|
-
}
|
|
1260
|
-
)
|
|
1261
|
-
]
|
|
1262
|
-
}
|
|
1263
|
-
),
|
|
1264
|
-
isExpanded && /* @__PURE__ */ jsxRuntime.jsx("div", { children })
|
|
1265
|
-
] });
|
|
1266
|
-
}
|
|
1267
|
-
function SyncFolderStatus({
|
|
1268
|
-
depth,
|
|
1269
|
-
kind,
|
|
1270
|
-
labels
|
|
1271
|
-
}) {
|
|
1272
|
-
const l = { ...DEFAULT_SYNC_FOLDER_ROW_LABELS, ...labels };
|
|
1273
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1274
|
-
"div",
|
|
1275
|
-
{
|
|
1276
|
-
className: "flex items-center gap-2 py-1 text-xs text-muted-foreground",
|
|
1277
|
-
style: { paddingLeft: (depth + 1) * INDENT + 4 },
|
|
1278
|
-
children: kind === "loading" ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
1279
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "size-3 animate-spin" }),
|
|
1280
|
-
" ",
|
|
1281
|
-
l.loading
|
|
1282
|
-
] }) : l.noSubfolders
|
|
1283
|
-
}
|
|
1284
|
-
);
|
|
1285
|
-
}
|
|
1286
|
-
function FilterChip({
|
|
1287
|
-
label,
|
|
1288
|
-
state,
|
|
1289
|
-
icon,
|
|
1290
|
-
color,
|
|
1291
|
-
onDismiss,
|
|
1292
|
-
dismissLabel,
|
|
1293
|
-
className,
|
|
1294
|
-
testId
|
|
1295
|
-
}) {
|
|
1296
|
-
const isExclude = state === "exclude";
|
|
1297
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1298
|
-
"span",
|
|
1299
|
-
{
|
|
1300
|
-
className: ui.cn(
|
|
1301
|
-
"inline-flex items-center gap-1 text-xs font-medium rounded px-1.5 py-0.5 flex-shrink-0 border",
|
|
1302
|
-
isExclude ? "bg-background text-red-text border-red-text" : "bg-primary text-white border-primary",
|
|
1303
|
-
className
|
|
1304
|
-
),
|
|
1305
|
-
"data-state": state,
|
|
1306
|
-
"data-testid": testId,
|
|
1307
|
-
children: [
|
|
1308
|
-
color ? (
|
|
1309
|
-
/* Filled square for include; empty square for exclude */
|
|
1310
|
-
isExclude ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
1311
|
-
"span",
|
|
1312
|
-
{
|
|
1313
|
-
className: "w-3.5 h-3.5 rounded flex-shrink-0 border-2",
|
|
1314
|
-
style: { borderColor: color }
|
|
1315
|
-
}
|
|
1316
|
-
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
1317
|
-
"span",
|
|
1318
|
-
{
|
|
1319
|
-
className: "w-3.5 h-3.5 rounded flex items-center justify-center flex-shrink-0",
|
|
1320
|
-
style: { backgroundColor: color },
|
|
1321
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: "w-2.5 h-2.5 text-white", strokeWidth: 3 })
|
|
1322
|
-
}
|
|
1323
|
-
)
|
|
1324
|
-
) : icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-none", children: icon }),
|
|
1325
|
-
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "truncate max-w-[80px]", title: label, children: [
|
|
1326
|
-
isExclude && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "opacity-70 mr-0.5", children: "Not" }),
|
|
1327
|
-
label
|
|
1328
|
-
] }),
|
|
1329
|
-
onDismiss && /* @__PURE__ */ jsxRuntime.jsx(
|
|
1330
|
-
"button",
|
|
1331
|
-
{
|
|
1332
|
-
type: "button",
|
|
1333
|
-
onClick: onDismiss,
|
|
1334
|
-
"aria-label": dismissLabel ?? `Remove ${label}`,
|
|
1335
|
-
className: "flex-none ml-0.5 opacity-70 hover:opacity-100",
|
|
1336
|
-
"data-testid": testId ? `${testId}-remove` : void 0,
|
|
1337
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "h-3 w-3", strokeWidth: 2.5 })
|
|
1338
|
-
}
|
|
1339
|
-
)
|
|
1340
|
-
]
|
|
1341
|
-
}
|
|
1342
|
-
);
|
|
1343
|
-
}
|
|
1344
|
-
var planBadgeVariants = classVarianceAuthority.cva(
|
|
1345
|
-
"inline-flex flex-shrink-0 items-center rounded-full border font-semibold leading-none",
|
|
1346
|
-
{
|
|
1347
|
-
variants: {
|
|
1348
|
-
/** free/dev = neutral, paid = accent tint, pending = payment trouble or cancelling. */
|
|
1349
|
-
tone: {
|
|
1350
|
-
free: `border-transparent ${chunk32HW2Q33_cjs.TONE_SURFACE.neutral}`,
|
|
1351
|
-
dev: `border-transparent ${chunk32HW2Q33_cjs.TONE_SURFACE.neutral}`,
|
|
1352
|
-
paid: "border-transparent bg-accent text-accent-foreground",
|
|
1353
|
-
pending: `${chunk32HW2Q33_cjs.TONE_BORDER.warning} ${chunk32HW2Q33_cjs.TONE_SURFACE.warning}`
|
|
1354
|
-
},
|
|
1355
|
-
/** `sm` fits dense rows and tables; `md` holds its own beside body text. */
|
|
1356
|
-
size: {
|
|
1357
|
-
sm: "h-5 px-2 text-xs",
|
|
1358
|
-
md: "h-6 px-2.5 text-sm"
|
|
1359
|
-
}
|
|
1360
|
-
},
|
|
1361
|
-
defaultVariants: { tone: "free", size: "sm" }
|
|
1362
|
-
}
|
|
1363
|
-
);
|
|
1364
|
-
function PlanBadge({
|
|
1365
|
-
label,
|
|
1366
|
-
tone,
|
|
1367
|
-
size,
|
|
1368
|
-
className,
|
|
1369
|
-
testId = "project-plan-chip"
|
|
1370
|
-
}) {
|
|
1371
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1372
|
-
"span",
|
|
1373
|
-
{
|
|
1374
|
-
"data-slot": "plan-badge",
|
|
1375
|
-
className: ui.cn(planBadgeVariants({ tone, size }), className),
|
|
1376
|
-
"data-testid": testId,
|
|
1377
|
-
children: label
|
|
1378
|
-
}
|
|
1379
|
-
);
|
|
1380
|
-
}
|
|
1381
|
-
function MoreInfo({
|
|
1382
|
-
title,
|
|
1383
|
-
children,
|
|
1384
|
-
label = "More info",
|
|
1385
|
-
testId = "more-info",
|
|
1386
|
-
className
|
|
1387
|
-
}) {
|
|
1388
|
-
const [open, setOpen] = react.useState(false);
|
|
1389
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
1390
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
1391
|
-
"button",
|
|
1392
|
-
{
|
|
1393
|
-
type: "button",
|
|
1394
|
-
onClick: () => setOpen(true),
|
|
1395
|
-
className: ui.cn(
|
|
1396
|
-
"inline-flex shrink-0 items-center gap-1 whitespace-nowrap rounded-sm text-xs font-medium text-muted-foreground underline-offset-2 hover:text-foreground hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:min-h-11",
|
|
1397
|
-
className
|
|
1398
|
-
),
|
|
1399
|
-
"data-slot": "more-info",
|
|
1400
|
-
"data-testid": testId,
|
|
1401
|
-
children: [
|
|
1402
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Info, { className: "size-3.5", "aria-hidden": true }),
|
|
1403
|
-
label
|
|
1404
|
-
]
|
|
1405
|
-
}
|
|
1406
|
-
),
|
|
1407
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Dialog, { open, onOpenChange: setOpen, children: /* @__PURE__ */ jsxRuntime.jsxs(ui.DialogContent, { className: "sm:max-w-md", "data-testid": `${testId}-dialog`, children: [
|
|
1408
|
-
/* @__PURE__ */ jsxRuntime.jsxs(ui.DialogHeader, { children: [
|
|
1409
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.DialogTitle, { children: title }),
|
|
1410
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.DialogDescription, { className: "sr-only", children: title })
|
|
1411
|
-
] }),
|
|
1412
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-3 text-sm leading-relaxed text-muted-foreground", children })
|
|
1413
|
-
] }) })
|
|
1414
|
-
] });
|
|
1415
|
-
}
|
|
1416
|
-
function MoreInfoList({ items }) {
|
|
1417
|
-
return /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "space-y-2", "data-slot": "more-info-list", children: items.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs("li", { children: [
|
|
1418
|
-
item.term && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "font-medium text-foreground", children: [
|
|
1419
|
-
item.term,
|
|
1420
|
-
". "
|
|
1421
|
-
] }),
|
|
1422
|
-
item.text
|
|
1423
|
-
] }, item.term ?? i)) });
|
|
1424
|
-
}
|
|
1425
|
-
var barColor = (pct) => pct >= 100 ? "bg-red-500" : pct >= 50 ? "bg-yellow-500" : "bg-primary";
|
|
1426
|
-
var valueColor2 = (pct) => pct >= 100 ? "text-red-text" : pct >= 80 ? "text-yellow-text" : "text-muted-foreground";
|
|
1427
|
-
function QuotaMeter({
|
|
1428
|
-
items,
|
|
1429
|
-
size = "sm",
|
|
1430
|
-
showTooltips = true,
|
|
1431
|
-
showBars = true,
|
|
1432
|
-
showPercent = true,
|
|
1433
|
-
className,
|
|
1434
|
-
testIds
|
|
1435
|
-
}) {
|
|
1436
|
-
if (size === "lg") {
|
|
1437
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1438
|
-
"div",
|
|
1439
|
-
{
|
|
1440
|
-
"data-slot": "quota-meter",
|
|
1441
|
-
className: ui.cn("flex flex-wrap gap-3", className),
|
|
1442
|
-
"data-testid": chunkMHVNT4J3_cjs.testIdOr(testIds?.root, { testId: "quota-badges-lg" }),
|
|
1443
|
-
children: items.map(({ key, icon: Icon, label, usedOfLimit, pct }) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1444
|
-
"div",
|
|
1445
|
-
{
|
|
1446
|
-
className: "min-w-[8rem] flex-1 rounded-lg bg-muted p-3",
|
|
1447
|
-
"data-testid": chunkMHVNT4J3_cjs.prefixedTestId(testIds?.badge, key, { testId: `quota-badge-${key}` }),
|
|
1448
|
-
children: [
|
|
1449
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1.5 text-xs text-muted-foreground", children: [
|
|
1450
|
-
/* @__PURE__ */ jsxRuntime.jsx(Icon, { className: "h-3.5 w-3.5 flex-shrink-0" }),
|
|
1451
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", children: label })
|
|
1452
|
-
] }),
|
|
1453
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-1 text-lg font-semibold tabular-nums text-foreground", children: usedOfLimit }),
|
|
1454
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-2 h-1.5 overflow-hidden rounded-full bg-background", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1455
|
-
"div",
|
|
1456
|
-
{
|
|
1457
|
-
className: ui.cn("h-full rounded-full", barColor(pct)),
|
|
1458
|
-
style: { width: `${Math.min(pct, 100)}%` },
|
|
1459
|
-
"data-testid": chunkMHVNT4J3_cjs.prefixedTestId(
|
|
1460
|
-
testIds?.badge,
|
|
1461
|
-
key,
|
|
1462
|
-
{ testId: `quota-badge-${key}-fill` },
|
|
1463
|
-
"-fill"
|
|
1464
|
-
)
|
|
1465
|
-
}
|
|
1466
|
-
) })
|
|
1467
|
-
]
|
|
1468
|
-
},
|
|
1469
|
-
key
|
|
1470
|
-
))
|
|
1471
|
-
}
|
|
1472
|
-
);
|
|
1473
|
-
}
|
|
1474
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1475
|
-
"div",
|
|
1476
|
-
{
|
|
1477
|
-
"data-slot": "quota-meter",
|
|
1478
|
-
className: ui.cn("flex flex-shrink-0 items-center gap-3 text-sm tabular-nums", className),
|
|
1479
|
-
"data-testid": chunkMHVNT4J3_cjs.testIdOr(testIds?.root, { testId: "quota-badges-sm" }),
|
|
1480
|
-
children: items.map(({ key, icon: Icon, label, used, usedOfLimit, pct }) => {
|
|
1481
|
-
const badge = /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1482
|
-
"span",
|
|
1483
|
-
{
|
|
1484
|
-
className: "inline-flex items-center gap-1",
|
|
1485
|
-
"data-testid": chunkMHVNT4J3_cjs.prefixedTestId(testIds?.badge, key, { testId: `quota-badge-${key}` }),
|
|
1486
|
-
children: [
|
|
1487
|
-
/* @__PURE__ */ jsxRuntime.jsx(Icon, { className: "h-4 w-4 flex-shrink-0 text-muted-foreground" }),
|
|
1488
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: showBars ? valueColor2(pct) : "text-muted-foreground", children: showBars && showPercent ? `${used} (${Math.round(pct)}%)` : used })
|
|
1489
|
-
]
|
|
1490
|
-
}
|
|
1491
|
-
);
|
|
1492
|
-
return showTooltips ? /* @__PURE__ */ jsxRuntime.jsxs(ui.Tooltip, { children: [
|
|
1493
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.TooltipTrigger, { asChild: true, children: badge }),
|
|
1494
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.TooltipContent, { children: `${usedOfLimit} ${label}` })
|
|
1495
|
-
] }, key) : /* @__PURE__ */ jsxRuntime.jsx(react.Fragment, { children: badge }, key);
|
|
1496
|
-
})
|
|
1497
|
-
}
|
|
1498
|
-
);
|
|
1499
|
-
}
|
|
1500
|
-
var DEFAULT_PLAN_CARD_LABELS = {
|
|
1501
|
-
currentPlan: "Current plan",
|
|
1502
|
-
popular: "Popular",
|
|
1503
|
-
noMonthlyCost: "\xA30",
|
|
1504
|
-
perMonth: "/mo",
|
|
1505
|
-
current: "Current",
|
|
1506
|
-
monthly: "Monthly",
|
|
1507
|
-
annual: "Annual",
|
|
1508
|
-
annualBilling: "Annual billing",
|
|
1509
|
-
save: (percent) => `Save ${percent}%`,
|
|
1510
|
-
havePromoCode: "Have a promo code?",
|
|
1511
|
-
promoCode: "Promo Code",
|
|
1512
|
-
enterCode: "Enter code",
|
|
1513
|
-
pricingExplainer: "How pricing works",
|
|
1514
|
-
explainerTiers: [
|
|
1515
|
-
"AI usage and storage are shared by everyone in the project. AI usage resets monthly.",
|
|
1516
|
-
"Need more? Add \xA325 of AI usage or 25 GB at a time, at checkout or later. Add-ons renew with the plan until you reduce them.",
|
|
1517
|
-
"Automatic top-ups add one more step when you run low, up to your monthly usage cap (\xA3100 by default; \xA30 = none; or no limit). Adding by hand is never capped.",
|
|
1518
|
-
"Add-ons start now: AI usage is charged in full, storage only for the rest of the period. Downgrades, billing switches and reductions start at the end of the period. No refunds.",
|
|
1519
|
-
"Annual plans are 25% off, add-ons included.",
|
|
1520
|
-
"Prices are shown + VAT; the total for your country is shown before you pay."
|
|
1521
|
-
],
|
|
1522
|
-
explainerAiUsage: "About 1p of AI usage buys one moderately complex request, or reading ~25 documents, on a Standard model. Premium models can cost 10\u2013100\xD7 more.",
|
|
1523
|
-
seeModelList: "AI model prices \u2192"
|
|
1524
|
-
};
|
|
1525
|
-
function PlanCard({ plan, onSelect, labels }) {
|
|
1526
|
-
const l = react.useMemo(() => ({ ...DEFAULT_PLAN_CARD_LABELS, ...labels }), [labels]);
|
|
1527
|
-
const { id, name, isFree, isCurrent, isSelected, isPopular, price, features } = plan;
|
|
1528
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1529
|
-
"button",
|
|
1530
|
-
{
|
|
1531
|
-
type: "button",
|
|
1532
|
-
disabled: isCurrent,
|
|
1533
|
-
"aria-pressed": !!isSelected,
|
|
1534
|
-
onClick: () => !isCurrent && onSelect(id),
|
|
1535
|
-
"data-slot": "plan-card",
|
|
1536
|
-
"data-testid": `tier-card-${id}`,
|
|
1537
|
-
className: ui.cn(
|
|
1538
|
-
"relative flex flex-col justify-start rounded-lg p-4 text-left transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
|
1539
|
-
isCurrent ? "cursor-default bg-blue-bg" : isSelected ? "bg-accent ring-1 ring-primary/50" : "bg-muted hover:bg-muted/70"
|
|
1540
|
-
),
|
|
1541
|
-
children: [
|
|
1542
|
-
isCurrent && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute -top-3 left-1/2 -translate-x-1/2 whitespace-nowrap rounded-full bg-blue-bg px-3 py-1 text-xs font-semibold leading-none text-blue-text", children: l.currentPlan }),
|
|
1543
|
-
isPopular && !isCurrent && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute -top-3 left-1/2 -translate-x-1/2 whitespace-nowrap rounded-full bg-primary px-3 py-1 text-xs font-semibold leading-none text-primary-foreground", children: l.popular }),
|
|
1544
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-3 flex items-baseline gap-2", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1545
|
-
"span",
|
|
1546
|
-
{
|
|
1547
|
-
className: ui.cn(
|
|
1548
|
-
"text-lg font-semibold leading-none tracking-tight",
|
|
1549
|
-
isCurrent ? "text-blue-text" : "text-foreground"
|
|
1550
|
-
),
|
|
1551
|
-
children: name
|
|
1552
|
-
}
|
|
1553
|
-
) }),
|
|
1554
|
-
isFree ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-2xl font-semibold leading-none tabular-nums text-foreground", children: [
|
|
1555
|
-
l.noMonthlyCost,
|
|
1556
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-0.5 text-sm font-medium text-muted-foreground", children: l.perMonth })
|
|
1557
|
-
] }) : price && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1", children: [
|
|
1558
|
-
price.annual && price.yearlyTotal && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-baseline gap-x-2 whitespace-nowrap text-base tabular-nums", children: [
|
|
1559
|
-
price.yearlyStrike && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium text-muted-foreground line-through decoration-muted-foreground/70 decoration-1", children: price.yearlyStrike }),
|
|
1560
|
-
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-lg font-semibold text-foreground", children: [
|
|
1561
|
-
price.yearlyTotal,
|
|
1562
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-0.5 text-xs font-semibold text-muted-foreground", children: price.intervalLabel })
|
|
1563
|
-
] })
|
|
1564
|
-
] }),
|
|
1565
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-baseline gap-x-1.5 whitespace-nowrap", children: [
|
|
1566
|
-
price.annual && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xl font-semibold leading-none text-muted-foreground", children: "=" }),
|
|
1567
|
-
price.monthlyStrike && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-base font-medium tabular-nums text-muted-foreground line-through decoration-muted-foreground/70 decoration-1", children: price.monthlyStrike }),
|
|
1568
|
-
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-2xl font-semibold leading-none tabular-nums text-foreground", children: [
|
|
1569
|
-
price.monthly,
|
|
1570
|
-
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "ml-0.5 text-sm font-medium text-muted-foreground", children: [
|
|
1571
|
-
l.perMonth,
|
|
1572
|
-
price.taxLabel && ` ${price.taxLabel}`
|
|
1573
|
-
] })
|
|
1574
|
-
] })
|
|
1575
|
-
] }),
|
|
1576
|
-
price.note && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-xs text-muted-foreground", "data-slot": "plan-card-price-note", children: price.note })
|
|
1577
|
-
] }),
|
|
1578
|
-
/* @__PURE__ */ jsxRuntime.jsx("ul", { className: "mt-4 space-y-1 border-t border-border pt-4 text-sm text-foreground", children: features.map((feature) => /* @__PURE__ */ jsxRuntime.jsx("li", { children: feature }, feature)) })
|
|
1579
|
-
]
|
|
1580
|
-
}
|
|
1581
|
-
);
|
|
1582
|
-
}
|
|
1583
|
-
function PlanCardGrid({
|
|
1584
|
-
plans,
|
|
1585
|
-
onSelect,
|
|
1586
|
-
labels
|
|
1587
|
-
}) {
|
|
1588
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "@container space-y-2", "data-slot": "plan-card-grid", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1589
|
-
"div",
|
|
1590
|
-
{
|
|
1591
|
-
className: ui.cn(
|
|
1592
|
-
"grid gap-2",
|
|
1593
|
-
plans.length === 4 ? "grid-cols-1 @xl:grid-cols-2 @4xl:grid-cols-4" : plans.length === 2 ? "grid-cols-1 @xl:grid-cols-2" : "grid-cols-1 @2xl:grid-cols-3"
|
|
1594
|
-
),
|
|
1595
|
-
children: plans.map((plan) => /* @__PURE__ */ jsxRuntime.jsx(PlanCard, { plan, onSelect, labels }, plan.id))
|
|
1596
|
-
}
|
|
1597
|
-
) });
|
|
1598
|
-
}
|
|
1599
|
-
function PlanTierOption({
|
|
1600
|
-
option,
|
|
1601
|
-
onSelect,
|
|
1602
|
-
labels
|
|
1603
|
-
}) {
|
|
1604
|
-
const l = react.useMemo(() => ({ ...DEFAULT_PLAN_CARD_LABELS, ...labels }), [labels]);
|
|
1605
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1606
|
-
"button",
|
|
1607
|
-
{
|
|
1608
|
-
type: "button",
|
|
1609
|
-
onClick: () => onSelect(option.id),
|
|
1610
|
-
"aria-pressed": option.isSelected,
|
|
1611
|
-
"data-slot": "plan-tier-option",
|
|
1612
|
-
"data-testid": `tier-option-${option.id}`,
|
|
1613
|
-
className: ui.cn(
|
|
1614
|
-
"flex w-full items-center justify-between rounded-lg p-3 text-left transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:min-h-11",
|
|
1615
|
-
option.isSelected ? "bg-accent ring-1 ring-primary/50" : "bg-muted hover:bg-muted/70"
|
|
1616
|
-
),
|
|
1617
|
-
children: [
|
|
1618
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
1619
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-base font-semibold text-foreground", children: option.name }),
|
|
1620
|
-
option.isCurrent && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "rounded-full bg-background px-1.5 py-0.5 text-xs font-medium text-muted-foreground", children: l.current }),
|
|
1621
|
-
option.isSelected && /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: "h-4 w-4 text-primary" })
|
|
1622
|
-
] }),
|
|
1623
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-right", children: [
|
|
1624
|
-
option.total && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "font-semibold tabular-nums", children: [
|
|
1625
|
-
option.total,
|
|
1626
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-normal text-muted-foreground", children: option.intervalLabel })
|
|
1627
|
-
] }),
|
|
1628
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-xs tabular-nums text-muted-foreground", children: option.summary })
|
|
1629
|
-
] })
|
|
1630
|
-
]
|
|
1631
|
-
}
|
|
1632
|
-
);
|
|
1633
|
-
}
|
|
1634
|
-
function PricingToggle({
|
|
1635
|
-
isAnnual,
|
|
1636
|
-
onToggle,
|
|
1637
|
-
savingsPercent,
|
|
1638
|
-
labels
|
|
1639
|
-
}) {
|
|
1640
|
-
const l = react.useMemo(() => ({ ...DEFAULT_PLAN_CARD_LABELS, ...labels }), [labels]);
|
|
1641
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 text-sm", children: [
|
|
1642
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: isAnnual ? "text-muted-foreground" : "font-medium", children: l.monthly }),
|
|
1643
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1644
|
-
"button",
|
|
1645
|
-
{
|
|
1646
|
-
type: "button",
|
|
1647
|
-
role: "switch",
|
|
1648
|
-
"aria-checked": isAnnual,
|
|
1649
|
-
"aria-label": l.annualBilling,
|
|
1650
|
-
onClick: onToggle,
|
|
1651
|
-
className: ui.cn(
|
|
1652
|
-
"relative inline-flex h-5 w-9 items-center rounded-full transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
|
1653
|
-
isAnnual ? "bg-primary" : "bg-muted"
|
|
1654
|
-
),
|
|
1655
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1656
|
-
"span",
|
|
1657
|
-
{
|
|
1658
|
-
className: ui.cn(
|
|
1659
|
-
"inline-block h-3 w-3 transform rounded-full bg-card transition-transform",
|
|
1660
|
-
isAnnual ? "translate-x-5" : "translate-x-1"
|
|
1661
|
-
)
|
|
1662
|
-
}
|
|
1663
|
-
)
|
|
1664
|
-
}
|
|
1665
|
-
),
|
|
1666
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: isAnnual ? "font-medium" : "text-muted-foreground", children: l.annual }),
|
|
1667
|
-
savingsPercent != null && savingsPercent > 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "rounded-full bg-green-bg px-1.5 py-0.5 text-sm font-semibold leading-none text-green-text", children: l.save(savingsPercent) })
|
|
1668
|
-
] });
|
|
1669
|
-
}
|
|
1670
|
-
function PromoCodeInput({
|
|
1671
|
-
value,
|
|
1672
|
-
onChange,
|
|
1673
|
-
labels
|
|
1674
|
-
}) {
|
|
1675
|
-
const l = react.useMemo(() => ({ ...DEFAULT_PLAN_CARD_LABELS, ...labels }), [labels]);
|
|
1676
|
-
const [expanded, setExpanded] = react.useState(false);
|
|
1677
|
-
if (!expanded) {
|
|
1678
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1679
|
-
"button",
|
|
1680
|
-
{
|
|
1681
|
-
type: "button",
|
|
1682
|
-
onClick: () => setExpanded(true),
|
|
1683
|
-
className: "flex items-center gap-1.5 text-sm text-muted-foreground transition-colors hover:text-foreground pointer-coarse:min-h-11",
|
|
1684
|
-
children: [
|
|
1685
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Tag, { className: "h-3 w-3" }),
|
|
1686
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { children: l.havePromoCode })
|
|
1687
|
-
]
|
|
1688
|
-
}
|
|
1689
|
-
);
|
|
1690
|
-
}
|
|
1691
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1", children: [
|
|
1692
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Label, { className: "text-sm text-muted-foreground", children: l.promoCode }),
|
|
1693
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1694
|
-
ui.Input,
|
|
1695
|
-
{
|
|
1696
|
-
value,
|
|
1697
|
-
onChange: (e) => onChange(e.target.value),
|
|
1698
|
-
placeholder: l.enterCode,
|
|
1699
|
-
className: "h-8 text-sm",
|
|
1700
|
-
autoFocus: true
|
|
1701
|
-
}
|
|
1702
|
-
)
|
|
1703
|
-
] });
|
|
1704
|
-
}
|
|
1705
|
-
function PlanInfoPopover({
|
|
1706
|
-
onOpenModelList,
|
|
1707
|
-
labels
|
|
1708
|
-
}) {
|
|
1709
|
-
const l = react.useMemo(() => ({ ...DEFAULT_PLAN_CARD_LABELS, ...labels }), [labels]);
|
|
1710
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(MoreInfo, { title: l.pricingExplainer, label: l.pricingExplainer, testId: "pricing-explainer", children: [
|
|
1711
|
-
/* @__PURE__ */ jsxRuntime.jsx(MoreInfoList, { items: l.explainerTiers.map((text) => ({ text })) }),
|
|
1712
|
-
/* @__PURE__ */ jsxRuntime.jsxs("p", { children: [
|
|
1713
|
-
l.explainerAiUsage,
|
|
1714
|
-
" ",
|
|
1715
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1716
|
-
"button",
|
|
1717
|
-
{
|
|
1718
|
-
type: "button",
|
|
1719
|
-
onClick: onOpenModelList,
|
|
1720
|
-
className: "font-medium text-foreground underline underline-offset-2 hover:text-primary/80",
|
|
1721
|
-
children: l.seeModelList
|
|
1722
|
-
}
|
|
1723
|
-
)
|
|
1724
|
-
] })
|
|
1725
|
-
] });
|
|
1726
|
-
}
|
|
1727
|
-
var DEFAULT_REFERRAL_REWARD_LABELS = {
|
|
1728
|
-
badgeTitle: "Reward \u2014 automatically applied to your invoice period",
|
|
1729
|
-
badge: (amount) => `${amount} reward`,
|
|
1730
|
-
subtotal: "Subtotal",
|
|
1731
|
-
reward: "Reward",
|
|
1732
|
-
youPayNow: "You pay now",
|
|
1733
|
-
rollover: (amount) => `${amount} reward rolls over to your next invoice.`,
|
|
1734
|
-
applied: (amount) => `${amount} reward applied automatically to your invoice period.`,
|
|
1735
|
-
note: (amount) => `Your ${amount} reward applies to your invoice period.`
|
|
1736
|
-
};
|
|
1737
|
-
function ReferralRewardBadge({
|
|
1738
|
-
amountLabel,
|
|
1739
|
-
labels,
|
|
1740
|
-
testId
|
|
1741
|
-
}) {
|
|
1742
|
-
const l = react.useMemo(() => ({ ...DEFAULT_REFERRAL_REWARD_LABELS, ...labels }), [labels]);
|
|
1743
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1744
|
-
"span",
|
|
1745
|
-
{
|
|
1746
|
-
className: "flex h-8 items-center gap-1.5 rounded-full bg-green-bg px-2.5 text-sm font-medium text-green-text",
|
|
1747
|
-
title: l.badgeTitle,
|
|
1748
|
-
"data-testid": chunkMHVNT4J3_cjs.testIdOr(testId, { testId: "referral-reward-badge" }),
|
|
1749
|
-
children: [
|
|
1750
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Gift, { className: "h-3.5 w-3.5" }),
|
|
1751
|
-
l.badge(amountLabel)
|
|
1752
|
-
]
|
|
1753
|
-
}
|
|
1754
|
-
);
|
|
1755
|
-
}
|
|
1756
|
-
function ReferralRewardSummary({
|
|
1757
|
-
amountLabel,
|
|
1758
|
-
breakdown,
|
|
1759
|
-
labels,
|
|
1760
|
-
testId,
|
|
1761
|
-
testIds
|
|
1762
|
-
}) {
|
|
1763
|
-
const l = react.useMemo(() => ({ ...DEFAULT_REFERRAL_REWARD_LABELS, ...labels }), [labels]);
|
|
1764
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1765
|
-
"div",
|
|
1766
|
-
{
|
|
1767
|
-
className: "rounded-lg bg-green-bg/60 p-3 text-sm",
|
|
1768
|
-
"data-testid": chunkMHVNT4J3_cjs.testIdOr(testId, { testId: "referral-reward-summary" }),
|
|
1769
|
-
children: breakdown ? /* @__PURE__ */ jsxRuntime.jsxs("dl", { className: "space-y-1 tabular-nums", children: [
|
|
1770
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between text-muted-foreground", children: [
|
|
1771
|
-
/* @__PURE__ */ jsxRuntime.jsx("dt", { children: l.subtotal }),
|
|
1772
|
-
/* @__PURE__ */ jsxRuntime.jsx("dd", { children: breakdown.subtotal })
|
|
1773
|
-
] }),
|
|
1774
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between text-green-text", children: [
|
|
1775
|
-
/* @__PURE__ */ jsxRuntime.jsxs("dt", { className: "flex items-center gap-1.5", children: [
|
|
1776
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Gift, { className: "h-3.5 w-3.5" }),
|
|
1777
|
-
l.reward
|
|
1778
|
-
] }),
|
|
1779
|
-
/* @__PURE__ */ jsxRuntime.jsxs("dd", { "data-testid": chunkMHVNT4J3_cjs.testIdOr(testIds?.applied, { testId: "referral-reward-applied" }), children: [
|
|
1780
|
-
"\u2212",
|
|
1781
|
-
breakdown.reward
|
|
1782
|
-
] })
|
|
1783
|
-
] }),
|
|
1784
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between border-t border-green-border pt-1 font-semibold text-foreground", children: [
|
|
1785
|
-
/* @__PURE__ */ jsxRuntime.jsx("dt", { children: l.youPayNow }),
|
|
1786
|
-
/* @__PURE__ */ jsxRuntime.jsx("dd", { "data-testid": chunkMHVNT4J3_cjs.testIdOr(testIds?.youPay, { testId: "referral-reward-you-pay" }), children: breakdown.youPay })
|
|
1787
|
-
] }),
|
|
1788
|
-
breakdown.rollover && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "pt-0.5 text-xs font-normal text-muted-foreground", children: l.rollover(breakdown.rollover) })
|
|
1789
|
-
] }) : /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "flex items-center gap-1.5 font-medium text-green-text", children: [
|
|
1790
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Gift, { className: "h-3.5 w-3.5 shrink-0" }),
|
|
1791
|
-
l.applied(amountLabel)
|
|
1792
|
-
] })
|
|
1793
|
-
}
|
|
1794
|
-
);
|
|
1795
|
-
}
|
|
1796
|
-
function ReferralRewardNote({
|
|
1797
|
-
amountLabel,
|
|
1798
|
-
labels,
|
|
1799
|
-
testId
|
|
1800
|
-
}) {
|
|
1801
|
-
const l = react.useMemo(() => ({ ...DEFAULT_REFERRAL_REWARD_LABELS, ...labels }), [labels]);
|
|
1802
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1803
|
-
"p",
|
|
1804
|
-
{
|
|
1805
|
-
className: "flex items-center gap-1.5 text-sm text-green-text",
|
|
1806
|
-
"data-testid": chunkMHVNT4J3_cjs.testIdOr(testId, { testId: "referral-reward-note" }),
|
|
1807
|
-
children: [
|
|
1808
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Gift, { className: "h-3.5 w-3.5 shrink-0" }),
|
|
1809
|
-
l.note(amountLabel)
|
|
1810
|
-
]
|
|
1811
|
-
}
|
|
1812
|
-
);
|
|
1813
|
-
}
|
|
1814
|
-
var DEFAULT_CONNECTION_CARD_LABELS = {
|
|
1815
|
-
connectedAs: (identity) => `Connected as ${identity}`,
|
|
1816
|
-
justConnected: "Just connected \u2713",
|
|
1817
|
-
connected: "Connected",
|
|
1818
|
-
disconnect: "Disconnect",
|
|
1819
|
-
connect: "Connect",
|
|
1820
|
-
organisationAccount: "Organisation account",
|
|
1821
|
-
readOnlyLead: "Read-only.",
|
|
1822
|
-
readOnlyBody: " ARBI only imports a copy of your email and files. It can\u2019t modify or delete anything in your account, and deleting an imported document here never affects the original."
|
|
1823
|
-
};
|
|
1824
|
-
function ConnectionCard({
|
|
1825
|
-
connection,
|
|
1826
|
-
onConnect,
|
|
1827
|
-
onDisconnect,
|
|
1828
|
-
labels
|
|
1829
|
-
}) {
|
|
1830
|
-
const l = react.useMemo(() => ({ ...DEFAULT_CONNECTION_CARD_LABELS, ...labels }), [labels]);
|
|
1831
|
-
const { id, status } = connection;
|
|
1832
|
-
const isConnected = status === "connected";
|
|
1833
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1834
|
-
"div",
|
|
1835
|
-
{
|
|
1836
|
-
"data-slot": "connection-card",
|
|
1837
|
-
className: "rounded-lg bg-background px-5 py-4",
|
|
1838
|
-
"data-testid": `connector-card-${id}`,
|
|
1839
|
-
children: [
|
|
1840
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-4", children: [
|
|
1841
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-0.5 flex h-10 w-10 shrink-0 items-center justify-center rounded-lg bg-muted text-muted-foreground", children: connection.iconUrl ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
1842
|
-
"img",
|
|
1843
|
-
{
|
|
1844
|
-
src: connection.iconUrl,
|
|
1845
|
-
alt: connection.iconAlt ?? connection.title,
|
|
1846
|
-
className: "h-6 w-6 rounded object-contain"
|
|
1847
|
-
}
|
|
1848
|
-
) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.PlugIcon, { className: "h-5 w-5" }) }),
|
|
1849
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0 flex-1", children: [
|
|
1850
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-heading text-sm font-semibold text-foreground", children: connection.title }),
|
|
1851
|
-
connection.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-0.5 text-sm text-muted-foreground", children: connection.description }),
|
|
1852
|
-
isConnected && connection.identity && /* @__PURE__ */ jsxRuntime.jsx(
|
|
1853
|
-
"p",
|
|
1854
|
-
{
|
|
1855
|
-
className: "mt-1 text-xs text-muted-foreground",
|
|
1856
|
-
"data-testid": `connector-identity-${id}`,
|
|
1857
|
-
children: l.connectedAs(connection.identity)
|
|
1858
|
-
}
|
|
1859
|
-
),
|
|
1860
|
-
connection.warning && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1 text-xs text-yellow-text", children: connection.warning }),
|
|
1861
|
-
connection.note && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1 text-xs text-muted-foreground", children: connection.note })
|
|
1862
|
-
] }),
|
|
1863
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex shrink-0 flex-col items-end gap-2", children: [
|
|
1864
|
-
(isConnected || connection.justConnected) && /* @__PURE__ */ jsxRuntime.jsx(
|
|
1865
|
-
chunkDVUZTGVL_cjs.ToneBadge,
|
|
1866
|
-
{
|
|
1867
|
-
tone: "success",
|
|
1868
|
-
icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CheckCircle2, { className: "h-3 w-3", "aria-hidden": "true" }),
|
|
1869
|
-
children: connection.justConnected ? l.justConnected : l.connected
|
|
1870
|
-
}
|
|
1871
|
-
),
|
|
1872
|
-
isConnected ? /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1873
|
-
ui.Button,
|
|
1874
|
-
{
|
|
1875
|
-
variant: "outline",
|
|
1876
|
-
size: "sm",
|
|
1877
|
-
onClick: () => onDisconnect(id),
|
|
1878
|
-
disabled: connection.isDisconnecting,
|
|
1879
|
-
className: "text-destructive hover:bg-destructive/10 hover:text-destructive",
|
|
1880
|
-
"data-testid": `connector-disconnect-${id}`,
|
|
1881
|
-
children: [
|
|
1882
|
-
connection.isDisconnecting && /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "mr-1.5 h-3.5 w-3.5 animate-spin" }),
|
|
1883
|
-
l.disconnect
|
|
1884
|
-
]
|
|
1885
|
-
}
|
|
1886
|
-
) : status === "available" ? /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1887
|
-
ui.Button,
|
|
1888
|
-
{
|
|
1889
|
-
variant: "outline",
|
|
1890
|
-
size: "sm",
|
|
1891
|
-
onClick: () => onConnect(id),
|
|
1892
|
-
className: "gap-1.5",
|
|
1893
|
-
"data-testid": `connector-connect-${id}`,
|
|
1894
|
-
children: [
|
|
1895
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ExternalLink, { className: "h-3.5 w-3.5" }),
|
|
1896
|
-
l.connect
|
|
1897
|
-
]
|
|
1898
|
-
}
|
|
1899
|
-
) : /* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { variant: "outline", className: "text-muted-foreground", children: l.organisationAccount })
|
|
1900
|
-
] })
|
|
1901
|
-
] }),
|
|
1902
|
-
connection.showReadOnlyNotice && isConnected && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-2 flex items-start gap-2 rounded-md bg-blue-bg px-3 py-2 text-xs text-blue-text", children: [
|
|
1903
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ShieldCheck, { className: "mt-0.5 h-4 w-4 shrink-0" }),
|
|
1904
|
-
/* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
|
|
1905
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium", children: l.readOnlyLead }),
|
|
1906
|
-
l.readOnlyBody
|
|
1907
|
-
] })
|
|
1908
|
-
] })
|
|
1909
|
-
]
|
|
1910
|
-
}
|
|
1911
|
-
);
|
|
1912
|
-
}
|
|
1913
|
-
function ConnectionsEmpty({ message }) {
|
|
1914
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center gap-2 py-8 text-center", children: [
|
|
1915
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Plug, { className: "h-8 w-8 text-muted-foreground/40" }),
|
|
1916
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: message })
|
|
1917
|
-
] });
|
|
1918
|
-
}
|
|
1919
|
-
function ConnectionsLoading({ message }) {
|
|
1920
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 py-12 text-muted-foreground", children: [
|
|
1921
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "h-4 w-4 animate-spin" }),
|
|
1922
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm", children: message })
|
|
1923
|
-
] });
|
|
1924
|
-
}
|
|
1925
|
-
function ConnectionsError({ message }) {
|
|
1926
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 rounded-lg bg-destructive/10 px-4 py-3 text-sm text-destructive", children: [
|
|
1927
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertCircle, { className: "h-4 w-4 shrink-0" }),
|
|
1928
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { children: message })
|
|
1929
|
-
] });
|
|
1930
|
-
}
|
|
1931
|
-
var DEFAULT_PROJECT_LIST_LABELS = {
|
|
1932
|
-
loading: "Loading projects...",
|
|
1933
|
-
empty: "No projects yet. Create one to get started.",
|
|
1934
|
-
filteredOut: "No projects match the filter."
|
|
1935
|
-
};
|
|
1936
|
-
var DEFAULT_SHARED_PROJECTS_SECTION_LABELS = {
|
|
1937
|
-
title: "Shared with you"
|
|
1938
|
-
};
|
|
1939
|
-
var DEFAULT_PROJECT_DETAIL_HEADER_LABELS = {
|
|
1940
|
-
renameProject: "Rename project"
|
|
1941
|
-
};
|
|
1942
|
-
var DEFAULT_RENAME_DIALOG_LABELS = {
|
|
1943
|
-
title: "Rename project",
|
|
1944
|
-
description: "Enter a new name.",
|
|
1945
|
-
cancel: "Cancel",
|
|
1946
|
-
save: "Save"
|
|
1947
|
-
};
|
|
1948
|
-
function ProjectRow({ testId, onOpen, identity, summary, usage, actions }) {
|
|
1949
|
-
const handleKeyDown = (e) => {
|
|
1950
|
-
if (e.key === "Enter" || e.key === " ") {
|
|
1951
|
-
e.preventDefault();
|
|
1952
|
-
onOpen();
|
|
1953
|
-
}
|
|
1954
|
-
};
|
|
1955
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1956
|
-
"div",
|
|
1957
|
-
{
|
|
1958
|
-
role: "button",
|
|
1959
|
-
tabIndex: 0,
|
|
1960
|
-
onClick: onOpen,
|
|
1961
|
-
onKeyDown: handleKeyDown,
|
|
1962
|
-
"data-slot": "project-row",
|
|
1963
|
-
"data-testid": testId,
|
|
1964
|
-
className: "group flex cursor-pointer flex-wrap items-center gap-x-3 gap-y-3 px-3 py-3 transition-colors hover:bg-muted/50 focus:bg-muted/50 focus:outline-none pointer-coarse:min-h-11",
|
|
1965
|
-
children: [
|
|
1966
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex min-w-0 items-center", children: identity }),
|
|
1967
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1" }),
|
|
1968
|
-
summary && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "hidden items-center gap-3 md:flex", children: summary }),
|
|
1969
|
-
actions && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-0.5", onClick: (e) => e.stopPropagation(), children: actions }),
|
|
1970
|
-
usage && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "basis-full", children: usage })
|
|
1971
|
-
]
|
|
1972
|
-
}
|
|
1973
|
-
);
|
|
1974
|
-
}
|
|
1975
|
-
function ProjectList({
|
|
1976
|
-
isLoading,
|
|
1977
|
-
isEmpty,
|
|
1978
|
-
isFilteredOut,
|
|
1979
|
-
children,
|
|
1980
|
-
testId = "projects-list",
|
|
1981
|
-
labels
|
|
1982
|
-
}) {
|
|
1983
|
-
const l = react.useMemo(() => ({ ...DEFAULT_PROJECT_LIST_LABELS, ...labels }), [labels]);
|
|
1984
|
-
const message = isLoading ? l.loading : isEmpty ? l.empty : isFilteredOut ? l.filteredOut : null;
|
|
1985
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-testid": testId, children: isLoading ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-3 px-3 py-4", "aria-busy": "true", children: [
|
|
1986
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: message }),
|
|
1987
|
-
[0, 1].map((i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", "aria-hidden": "true", children: [
|
|
1988
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-5 w-40 animate-pulse rounded-md bg-muted" }),
|
|
1989
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1" }),
|
|
1990
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-5 w-48 animate-pulse rounded-md bg-muted" })
|
|
1991
|
-
] }, i))
|
|
1992
|
-
] }) : message ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "px-3 py-6 text-sm text-muted-foreground", children: message }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "divide-y divide-border", children }) });
|
|
1993
|
-
}
|
|
1994
|
-
function SharedProjectsSection({
|
|
1995
|
-
title,
|
|
1996
|
-
footnote,
|
|
1997
|
-
children,
|
|
1998
|
-
testId = "shared-projects",
|
|
1999
|
-
labels
|
|
2000
|
-
}) {
|
|
2001
|
-
const l = react.useMemo(() => ({ ...DEFAULT_SHARED_PROJECTS_SECTION_LABELS, ...labels }), [labels]);
|
|
2002
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("section", { className: "space-y-2", "data-testid": testId, children: [
|
|
2003
|
-
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "px-1 text-sm font-semibold text-foreground", children: title ?? l.title }),
|
|
2004
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "divide-y divide-border", children }),
|
|
2005
|
-
footnote && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "px-1 text-xs text-muted-foreground", children: footnote })
|
|
2006
|
-
] });
|
|
2007
|
-
}
|
|
2008
|
-
function SharedProjectRow({
|
|
2009
|
-
testId,
|
|
2010
|
-
identity,
|
|
2011
|
-
allowance
|
|
2012
|
-
}) {
|
|
2013
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-4 px-3 py-2.5", "data-testid": testId, children: [
|
|
2014
|
-
identity,
|
|
2015
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "ml-auto w-44", children: allowance })
|
|
2016
|
-
] });
|
|
2017
|
-
}
|
|
2018
|
-
function ProjectDetailHeader({
|
|
2019
|
-
icon,
|
|
2020
|
-
name,
|
|
2021
|
-
badge,
|
|
2022
|
-
onRename,
|
|
2023
|
-
action,
|
|
2024
|
-
labels
|
|
2025
|
-
}) {
|
|
2026
|
-
const l = react.useMemo(() => ({ ...DEFAULT_PROJECT_DETAIL_HEADER_LABELS, ...labels }), [labels]);
|
|
2027
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start justify-between gap-3", children: [
|
|
2028
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 items-center gap-3", children: [
|
|
2029
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-shrink-0 text-primary [&>svg]:h-8 [&>svg]:w-8", children: icon }),
|
|
2030
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-w-0", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "group flex items-center gap-2", children: [
|
|
2031
|
-
/* @__PURE__ */ jsxRuntime.jsx("h2", { className: "truncate text-xl font-semibold text-foreground", title: name, children: name }),
|
|
2032
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2033
|
-
ui.Button,
|
|
2034
|
-
{
|
|
2035
|
-
variant: "ghost",
|
|
2036
|
-
size: "icon",
|
|
2037
|
-
className: "h-6 w-6 shrink-0 text-muted-foreground opacity-0 transition-opacity hover:text-primary focus-visible:opacity-100 [.group:hover_&]:opacity-100 [@media(hover:none)]:opacity-100",
|
|
2038
|
-
title: l.renameProject,
|
|
2039
|
-
"aria-label": l.renameProject,
|
|
2040
|
-
"data-testid": "project-detail-rename",
|
|
2041
|
-
onClick: onRename,
|
|
2042
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Pencil, { className: "h-3.5 w-3.5" })
|
|
2043
|
-
}
|
|
2044
|
-
),
|
|
2045
|
-
badge
|
|
2046
|
-
] }) })
|
|
2047
|
-
] }),
|
|
2048
|
-
action && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-shrink-0", children: action })
|
|
2049
|
-
] });
|
|
2050
|
-
}
|
|
2051
|
-
function ProjectDetailSection({
|
|
2052
|
-
title,
|
|
2053
|
-
className,
|
|
2054
|
-
children
|
|
2055
|
-
}) {
|
|
2056
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("section", { className: ui.cn("rounded-lg border border-border bg-card shadow-xs p-5", className), children: [
|
|
2057
|
-
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "mb-4 text-base font-semibold text-foreground", children: title }),
|
|
2058
|
-
children
|
|
2059
|
-
] });
|
|
2060
|
-
}
|
|
2061
|
-
function RenameDialog({
|
|
2062
|
-
open,
|
|
2063
|
-
onClose,
|
|
2064
|
-
title,
|
|
2065
|
-
value,
|
|
2066
|
-
onChange,
|
|
2067
|
-
onSave,
|
|
2068
|
-
isSaving,
|
|
2069
|
-
testId,
|
|
2070
|
-
dialogTestId,
|
|
2071
|
-
fieldLabel,
|
|
2072
|
-
placeholder,
|
|
2073
|
-
canSave = true,
|
|
2074
|
-
labels
|
|
2075
|
-
}) {
|
|
2076
|
-
const renameInputId = react.useId();
|
|
2077
|
-
const l = react.useMemo(() => ({ ...DEFAULT_RENAME_DIALOG_LABELS, ...labels }), [labels]);
|
|
2078
|
-
return /* @__PURE__ */ jsxRuntime.jsx(ui.Dialog, { open, onOpenChange: (next) => !next && onClose(), children: /* @__PURE__ */ jsxRuntime.jsxs(ui.DialogContent, { presentation: "sheet", "data-testid": dialogTestId, children: [
|
|
2079
|
-
/* @__PURE__ */ jsxRuntime.jsxs(ui.DialogHeader, { children: [
|
|
2080
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.DialogTitle, { children: title ?? l.title }),
|
|
2081
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.DialogDescription, { className: "sr-only", children: l.description })
|
|
2082
|
-
] }),
|
|
2083
|
-
fieldLabel && /* @__PURE__ */ jsxRuntime.jsx("label", { htmlFor: renameInputId, className: "block text-sm font-medium", children: fieldLabel }),
|
|
2084
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2085
|
-
ui.Input,
|
|
2086
|
-
{
|
|
2087
|
-
id: renameInputId,
|
|
2088
|
-
value,
|
|
2089
|
-
onChange: (e) => onChange(e.target.value),
|
|
2090
|
-
placeholder,
|
|
2091
|
-
autoFocus: true,
|
|
2092
|
-
onKeyDown: (e) => {
|
|
2093
|
-
if (e.key === "Enter") onSave();
|
|
2094
|
-
if (e.key === "Escape") onClose();
|
|
2095
|
-
},
|
|
2096
|
-
"data-testid": testId
|
|
2097
|
-
}
|
|
2098
|
-
),
|
|
2099
|
-
/* @__PURE__ */ jsxRuntime.jsxs(ui.DialogFooter, { children: [
|
|
2100
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Button, { variant: "outline", onClick: onClose, children: l.cancel }),
|
|
2101
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Button, { onClick: onSave, disabled: isSaving || !canSave, children: l.save })
|
|
2102
|
-
] })
|
|
2103
|
-
] }) });
|
|
2104
|
-
}
|
|
2105
|
-
var DEFAULT_SUPPORT_PANEL_LABELS = {
|
|
2106
|
-
support: "Support",
|
|
2107
|
-
userGuide: "User Guide"
|
|
2108
|
-
};
|
|
2109
|
-
function SupportPanel({
|
|
2110
|
-
activeTab,
|
|
2111
|
-
onTabChange,
|
|
2112
|
-
buildInfo = [],
|
|
2113
|
-
modeSwitcher,
|
|
2114
|
-
feedback,
|
|
2115
|
-
isFeedbackLoading,
|
|
2116
|
-
loadingIndicator,
|
|
2117
|
-
guide,
|
|
2118
|
-
testId = "feedback-modal",
|
|
2119
|
-
labels
|
|
2120
|
-
}) {
|
|
2121
|
-
const l = react.useMemo(() => ({ ...DEFAULT_SUPPORT_PANEL_LABELS, ...labels }), [labels]);
|
|
2122
|
-
const tabs = react.useMemo(
|
|
2123
|
-
() => [
|
|
2124
|
-
{
|
|
2125
|
-
id: "feedback",
|
|
2126
|
-
label: l.support,
|
|
2127
|
-
icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.MessageCircleQuestionMark, { className: "h-4 w-4" }),
|
|
2128
|
-
tooltip: l.support
|
|
2129
|
-
},
|
|
2130
|
-
{
|
|
2131
|
-
id: "guide",
|
|
2132
|
-
label: l.userGuide,
|
|
2133
|
-
icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.BookOpen, { className: "h-4 w-4" }),
|
|
2134
|
-
tooltip: l.userGuide
|
|
2135
|
-
}
|
|
2136
|
-
],
|
|
2137
|
-
[l]
|
|
2138
|
-
);
|
|
2139
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
2140
|
-
"div",
|
|
2141
|
-
{
|
|
2142
|
-
className: "@container flex h-full flex-col bg-background",
|
|
2143
|
-
"data-testid": testId,
|
|
2144
|
-
"data-slot": "support-panel",
|
|
2145
|
-
children: [
|
|
2146
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-shrink-0", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2147
|
-
chunk7RGLTF76_cjs.TabHeader,
|
|
2148
|
-
{
|
|
2149
|
-
tabs,
|
|
2150
|
-
activeTabId: activeTab,
|
|
2151
|
-
onTabChange: (id) => onTabChange(id),
|
|
2152
|
-
rightContent: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
2153
|
-
buildInfo.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "hidden text-right font-mono text-xs leading-tight text-muted-foreground/70 @2xl:block", children: buildInfo.map((line) => /* @__PURE__ */ jsxRuntime.jsx("div", { children: line }, line)) }),
|
|
2154
|
-
modeSwitcher
|
|
2155
|
-
] }),
|
|
2156
|
-
compactBreakpoint: 360
|
|
2157
|
-
}
|
|
2158
|
-
) }),
|
|
2159
|
-
activeTab === "feedback" && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative min-h-0 flex-1", children: [
|
|
2160
|
-
isFeedbackLoading && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 z-10 flex items-center justify-center bg-background", children: loadingIndicator }),
|
|
2161
|
-
feedback
|
|
2162
|
-
] }),
|
|
2163
|
-
activeTab === "guide" && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-h-0 flex-1 overflow-auto p-4", children: guide })
|
|
2164
|
-
]
|
|
2165
|
-
}
|
|
2166
|
-
);
|
|
2167
|
-
}
|
|
2168
|
-
function SupportUnavailable({ title, message }) {
|
|
2169
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-full items-center justify-center p-8 text-center", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
2170
|
-
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "mb-2 text-lg font-semibold", children: title }),
|
|
2171
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-muted-foreground", children: message })
|
|
2172
|
-
] }) });
|
|
2173
|
-
}
|
|
2174
|
-
var DEFAULT_WELCOME_DIALOG_LABELS = {
|
|
2175
|
-
welcome: (firstName) => `Welcome${firstName ? `, ${firstName}` : ""}!`,
|
|
2176
|
-
description: "Your plan, usage and rewards at a glance.",
|
|
2177
|
-
currentPlan: "Current plan",
|
|
2178
|
-
seeUpgradeOptions: "See upgrade options",
|
|
2179
|
-
referralBefore: "Get ",
|
|
2180
|
-
referralAfter: " for every invited contact who goes Pro.",
|
|
2181
|
-
inviteContact: "Invite contact",
|
|
2182
|
-
currentRewards: "Current rewards: ",
|
|
2183
|
-
continue: "Continue"
|
|
2184
|
-
};
|
|
2185
|
-
var DEFAULT_INVITE_CONTACTS_DIALOG_LABELS = {
|
|
2186
|
-
title: "Invite contacts",
|
|
2187
|
-
description: "Invite contacts by email and earn the referral reward."
|
|
2188
|
-
};
|
|
2189
|
-
function WelcomeDialog({
|
|
2190
|
-
open,
|
|
2191
|
-
onClose,
|
|
2192
|
-
firstName,
|
|
2193
|
-
hasReward,
|
|
2194
|
-
projectPicker,
|
|
2195
|
-
planBadge,
|
|
2196
|
-
quotas,
|
|
2197
|
-
onSeePlans,
|
|
2198
|
-
referralOfferLabel,
|
|
2199
|
-
onInvite,
|
|
2200
|
-
rewardBalanceLabel,
|
|
2201
|
-
labels,
|
|
2202
|
-
testId,
|
|
2203
|
-
testIds
|
|
2204
|
-
}) {
|
|
2205
|
-
const l = react.useMemo(() => ({ ...DEFAULT_WELCOME_DIALOG_LABELS, ...labels }), [labels]);
|
|
2206
|
-
return /* @__PURE__ */ jsxRuntime.jsx(ui.Dialog, { open, onOpenChange: (next) => !next && onClose(), children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
2207
|
-
ui.DialogContent,
|
|
2208
|
-
{
|
|
2209
|
-
className: "sm:max-w-md",
|
|
2210
|
-
"data-testid": chunkMHVNT4J3_cjs.testIdOr(testId, { testId: "welcome-modal" }),
|
|
2211
|
-
hideCloseButton: true,
|
|
2212
|
-
children: [
|
|
2213
|
-
/* @__PURE__ */ jsxRuntime.jsxs(ui.DialogHeader, { children: [
|
|
2214
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 flex-wrap items-start justify-between gap-2", children: [
|
|
2215
|
-
/* @__PURE__ */ jsxRuntime.jsxs(ui.DialogTitle, { className: "flex items-center gap-2", children: [
|
|
2216
|
-
hasReward ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Gift, { className: "h-5 w-5 text-green-text" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Sparkles, { className: "h-5 w-5 text-yellow-text" }),
|
|
2217
|
-
l.welcome(firstName)
|
|
2218
|
-
] }),
|
|
2219
|
-
projectPicker
|
|
2220
|
-
] }),
|
|
2221
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.DialogDescription, { className: "sr-only", children: l.description })
|
|
2222
|
-
] }),
|
|
2223
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
2224
|
-
chunkULWRNGGE_cjs.ModalSection,
|
|
2225
|
-
{
|
|
2226
|
-
className: "space-y-4",
|
|
2227
|
-
"data-testid": chunkMHVNT4J3_cjs.testIdOr(testIds?.copy, { testId: "welcome-modal-copy" }),
|
|
2228
|
-
children: [
|
|
2229
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
|
|
2230
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-muted-foreground", children: l.currentPlan }),
|
|
2231
|
-
planBadge
|
|
2232
|
-
] }),
|
|
2233
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-3", children: quotas.map((quota) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
2234
|
-
chunkQZTNTP75_cjs.UsageMeter,
|
|
2235
|
-
{
|
|
2236
|
-
icon: quota.icon,
|
|
2237
|
-
label: quota.label,
|
|
2238
|
-
value: quota.value,
|
|
2239
|
-
pct: quota.pct,
|
|
2240
|
-
hint: quota.hint,
|
|
2241
|
-
testId: chunkMHVNT4J3_cjs.prefixedTestId(testIds?.quota, quota.key, {
|
|
2242
|
-
testId: `welcome-modal-quota-${quota.key}`
|
|
2243
|
-
})
|
|
2244
|
-
},
|
|
2245
|
-
quota.key
|
|
2246
|
-
)) }),
|
|
2247
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2248
|
-
ui.Button,
|
|
2249
|
-
{
|
|
2250
|
-
variant: "outline",
|
|
2251
|
-
className: "w-full",
|
|
2252
|
-
onClick: onSeePlans,
|
|
2253
|
-
"data-testid": chunkMHVNT4J3_cjs.testIdOr(testIds?.showPlans, { testId: "welcome-modal-show-plans" }),
|
|
2254
|
-
children: l.seeUpgradeOptions
|
|
2255
|
-
}
|
|
2256
|
-
)
|
|
2257
|
-
]
|
|
2258
|
-
}
|
|
2259
|
-
),
|
|
2260
|
-
/* @__PURE__ */ jsxRuntime.jsxs(chunkULWRNGGE_cjs.ModalSection, { className: "space-y-2.5", children: [
|
|
2261
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between gap-3", children: [
|
|
2262
|
-
/* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-sm text-muted-foreground", children: [
|
|
2263
|
-
l.referralBefore,
|
|
2264
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-semibold text-foreground", children: referralOfferLabel }),
|
|
2265
|
-
l.referralAfter
|
|
2266
|
-
] }),
|
|
2267
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
2268
|
-
ui.Button,
|
|
2269
|
-
{
|
|
2270
|
-
variant: "outline",
|
|
2271
|
-
size: "sm",
|
|
2272
|
-
className: "shrink-0 gap-1.5",
|
|
2273
|
-
onClick: onInvite,
|
|
2274
|
-
"data-testid": chunkMHVNT4J3_cjs.testIdOr(testIds?.earn, { testId: "welcome-modal-earn" }),
|
|
2275
|
-
children: [
|
|
2276
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.UserPlus, { className: "h-3.5 w-3.5" }),
|
|
2277
|
-
l.inviteContact
|
|
2278
|
-
]
|
|
2279
|
-
}
|
|
2280
|
-
)
|
|
2281
|
-
] }),
|
|
2282
|
-
rewardBalanceLabel && // A statement, not a door: the balance applies itself to the next invoice.
|
|
2283
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1.5 rounded-md bg-green-bg px-3 py-2 text-sm text-green-text", children: [
|
|
2284
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Gift, { className: "h-4 w-4 shrink-0" }),
|
|
2285
|
-
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "truncate", children: [
|
|
2286
|
-
l.currentRewards,
|
|
2287
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-semibold", children: rewardBalanceLabel })
|
|
2288
|
-
] })
|
|
2289
|
-
] })
|
|
2290
|
-
] }),
|
|
2291
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.DialogFooter, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2292
|
-
ui.Button,
|
|
2293
|
-
{
|
|
2294
|
-
className: "w-full",
|
|
2295
|
-
onClick: onClose,
|
|
2296
|
-
"data-testid": chunkMHVNT4J3_cjs.testIdOr(testIds?.dismiss, { testId: "welcome-modal-dismiss" }),
|
|
2297
|
-
children: l.continue
|
|
2298
|
-
}
|
|
2299
|
-
) })
|
|
2300
|
-
]
|
|
2301
|
-
}
|
|
2302
|
-
) });
|
|
2303
|
-
}
|
|
2304
|
-
function InviteContactsDialog({
|
|
2305
|
-
open,
|
|
2306
|
-
onClose,
|
|
2307
|
-
children,
|
|
2308
|
-
testId = "welcome-modal-invite",
|
|
2309
|
-
labels
|
|
2310
|
-
}) {
|
|
2311
|
-
const l = react.useMemo(() => ({ ...DEFAULT_INVITE_CONTACTS_DIALOG_LABELS, ...labels }), [labels]);
|
|
2312
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2313
|
-
chunkULWRNGGE_cjs.ModalScaffold,
|
|
2314
|
-
{
|
|
2315
|
-
open,
|
|
2316
|
-
onOpenChange: (next) => !next && onClose(),
|
|
2317
|
-
title: l.title,
|
|
2318
|
-
description: l.description,
|
|
2319
|
-
icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.UserPlus, { className: "h-5 w-5 text-primary" }),
|
|
2320
|
-
size: "lg",
|
|
2321
|
-
className: "sm:max-w-lg",
|
|
2322
|
-
testId,
|
|
2323
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(chunkULWRNGGE_cjs.ModalSection, { children })
|
|
2324
|
-
}
|
|
2325
|
-
);
|
|
2326
|
-
}
|
|
2327
|
-
var SERIES_STYLES = [
|
|
2328
|
-
{ bg: "bg-blue-500", stroke: "stroke-blue-500" },
|
|
2329
|
-
{ bg: "bg-purple-500", stroke: "stroke-purple-500" },
|
|
2330
|
-
{ bg: "bg-emerald-500", stroke: "stroke-emerald-500" },
|
|
2331
|
-
{ bg: "bg-amber-500", stroke: "stroke-amber-500" },
|
|
2332
|
-
{ bg: "bg-rose-500", stroke: "stroke-rose-500" },
|
|
2333
|
-
{ bg: "bg-cyan-500", stroke: "stroke-cyan-500" },
|
|
2334
|
-
{ bg: "bg-indigo-500", stroke: "stroke-indigo-500" },
|
|
2335
|
-
{ bg: "bg-orange-500", stroke: "stroke-orange-500" }
|
|
2336
|
-
];
|
|
2337
|
-
var styleAt = (index) => SERIES_STYLES[index % SERIES_STYLES.length];
|
|
2338
|
-
var DEFAULT_USAGE_LINE_CHART_LABELS = {
|
|
2339
|
-
noDailyData: "No daily data"
|
|
2340
|
-
};
|
|
2341
|
-
var DEFAULT_USAGE_PROPORTION_BAR_LABELS = {
|
|
2342
|
-
tokens: (formatted) => `${formatted} tokens`,
|
|
2343
|
-
gbp: (formatted) => formatted,
|
|
2344
|
-
tokensShort: (formatted) => `${formatted} tok`
|
|
2345
|
-
};
|
|
2346
|
-
var DEFAULT_USAGE_PANEL_LABELS = {
|
|
2347
|
-
empty: "No usage yet.",
|
|
2348
|
-
error: "Failed to load usage data"
|
|
2349
|
-
};
|
|
2350
|
-
var CHART_W = 440;
|
|
2351
|
-
var CHART_H = 120;
|
|
2352
|
-
var PAD = { top: 8, right: 8, bottom: 20, left: 40 };
|
|
2353
|
-
function UsageLineChart({
|
|
2354
|
-
dates,
|
|
2355
|
-
series,
|
|
2356
|
-
formatDate,
|
|
2357
|
-
formatValue: formatValue2,
|
|
2358
|
-
emptyLabel,
|
|
2359
|
-
labels
|
|
2360
|
-
}) {
|
|
2361
|
-
const l = react.useMemo(() => ({ ...DEFAULT_USAGE_LINE_CHART_LABELS, ...labels }), [labels]);
|
|
2362
|
-
const [hoverIdx, setHoverIdx] = react.useState(null);
|
|
2363
|
-
if (!dates.length || !series.length) {
|
|
2364
|
-
return /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: emptyLabel ?? l.noDailyData });
|
|
2365
|
-
}
|
|
2366
|
-
const maxVal = Math.max(...series.flatMap((s) => s.values), 1);
|
|
2367
|
-
const plotW = CHART_W - PAD.left - PAD.right;
|
|
2368
|
-
const plotH = CHART_H - PAD.top - PAD.bottom;
|
|
2369
|
-
const xStep = dates.length > 1 ? plotW / (dates.length - 1) : plotW;
|
|
2370
|
-
const yScale = (v) => PAD.top + plotH - v / maxVal * plotH;
|
|
2371
|
-
const yTicks = [0, maxVal / 2, maxVal].map((v) => ({
|
|
2372
|
-
v,
|
|
2373
|
-
y: yScale(v),
|
|
2374
|
-
label: v >= 1e3 ? `${Math.round(v / 1e3)}k` : String(Math.round(v * 100) / 100)
|
|
2375
|
-
}));
|
|
2376
|
-
const labelCount = Math.min(dates.length, 5);
|
|
2377
|
-
const labelStep = Math.max(1, Math.floor((dates.length - 1) / (labelCount - 1)));
|
|
2378
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", "data-slot": "usage-line-chart", children: [
|
|
2379
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
2380
|
-
"svg",
|
|
2381
|
-
{
|
|
2382
|
-
viewBox: `0 0 ${CHART_W} ${CHART_H}`,
|
|
2383
|
-
className: "h-auto w-full",
|
|
2384
|
-
preserveAspectRatio: "xMidYMid meet",
|
|
2385
|
-
onMouseLeave: () => setHoverIdx(null),
|
|
2386
|
-
children: [
|
|
2387
|
-
yTicks.map((t) => /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
|
|
2388
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2389
|
-
"line",
|
|
2390
|
-
{
|
|
2391
|
-
x1: PAD.left,
|
|
2392
|
-
x2: CHART_W - PAD.right,
|
|
2393
|
-
y1: t.y,
|
|
2394
|
-
y2: t.y,
|
|
2395
|
-
className: "stroke-border",
|
|
2396
|
-
strokeDasharray: "2,2"
|
|
2397
|
-
}
|
|
2398
|
-
),
|
|
2399
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2400
|
-
"text",
|
|
2401
|
-
{
|
|
2402
|
-
x: PAD.left - 4,
|
|
2403
|
-
y: t.y + 3,
|
|
2404
|
-
textAnchor: "end",
|
|
2405
|
-
className: "fill-muted-foreground text-xs",
|
|
2406
|
-
children: t.label
|
|
2407
|
-
}
|
|
2408
|
-
)
|
|
2409
|
-
] }, t.v)),
|
|
2410
|
-
series.map((s, si) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
2411
|
-
"polyline",
|
|
2412
|
-
{
|
|
2413
|
-
points: s.values.map((v, i) => `${PAD.left + i * xStep},${yScale(v)}`).join(" "),
|
|
2414
|
-
fill: "none",
|
|
2415
|
-
className: styleAt(si).stroke,
|
|
2416
|
-
strokeWidth: 1.5,
|
|
2417
|
-
strokeLinejoin: "round"
|
|
2418
|
-
},
|
|
2419
|
-
s.key
|
|
2420
|
-
)),
|
|
2421
|
-
dates.map((date, i) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
2422
|
-
"rect",
|
|
2423
|
-
{
|
|
2424
|
-
x: PAD.left + i * xStep - xStep / 2,
|
|
2425
|
-
y: PAD.top,
|
|
2426
|
-
width: xStep,
|
|
2427
|
-
height: plotH,
|
|
2428
|
-
fill: "transparent",
|
|
2429
|
-
onMouseEnter: () => setHoverIdx(i),
|
|
2430
|
-
onClick: () => setHoverIdx(i)
|
|
2431
|
-
},
|
|
2432
|
-
date
|
|
2433
|
-
)),
|
|
2434
|
-
hoverIdx !== null && /* @__PURE__ */ jsxRuntime.jsx(
|
|
2435
|
-
"line",
|
|
2436
|
-
{
|
|
2437
|
-
x1: PAD.left + hoverIdx * xStep,
|
|
2438
|
-
x2: PAD.left + hoverIdx * xStep,
|
|
2439
|
-
y1: PAD.top,
|
|
2440
|
-
y2: PAD.top + plotH,
|
|
2441
|
-
className: "stroke-muted-foreground",
|
|
2442
|
-
strokeDasharray: "3,3"
|
|
2443
|
-
}
|
|
2444
|
-
),
|
|
2445
|
-
dates.map((d, i) => {
|
|
2446
|
-
const isLast = i === dates.length - 1;
|
|
2447
|
-
if (!isLast && (i % labelStep !== 0 || dates.length - 1 - i < labelStep / 2)) return null;
|
|
2448
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2449
|
-
"text",
|
|
2450
|
-
{
|
|
2451
|
-
x: PAD.left + i * xStep,
|
|
2452
|
-
y: CHART_H - 2,
|
|
2453
|
-
textAnchor: i === 0 ? "start" : isLast ? "end" : "middle",
|
|
2454
|
-
className: "fill-muted-foreground text-xs",
|
|
2455
|
-
children: formatDate(d)
|
|
2456
|
-
},
|
|
2457
|
-
d
|
|
2458
|
-
);
|
|
2459
|
-
})
|
|
2460
|
-
]
|
|
2461
|
-
}
|
|
2462
|
-
),
|
|
2463
|
-
hoverIdx !== null && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "pointer-events-none absolute right-0 top-0 rounded-md border bg-card/90 px-2 py-1 text-sm shadow-lg", children: [
|
|
2464
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "font-medium", children: dates[hoverIdx] }),
|
|
2465
|
-
series.map((s, si) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1", children: [
|
|
2466
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: ui.cn("inline-block h-2 w-2 rounded-full", styleAt(si).bg) }),
|
|
2467
|
-
/* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
|
|
2468
|
-
s.key,
|
|
2469
|
-
":"
|
|
2470
|
-
] }),
|
|
2471
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium tabular-nums", children: formatValue2(s.values[hoverIdx]) })
|
|
2472
|
-
] }, s.key))
|
|
2473
|
-
] })
|
|
2474
|
-
] });
|
|
2475
|
-
}
|
|
2476
|
-
function UsageLegend({ series }) {
|
|
2477
|
-
if (series.length <= 1 && series[0]?.key === "Total") return null;
|
|
2478
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-x-3 gap-y-1", children: series.map((s, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1 text-sm", children: [
|
|
2479
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: ui.cn("inline-block h-2.5 w-2.5 rounded-full", styleAt(i).bg) }),
|
|
2480
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: s.key })
|
|
2481
|
-
] }, s.key)) });
|
|
2482
|
-
}
|
|
2483
|
-
function UsageProportionBar({
|
|
2484
|
-
items,
|
|
2485
|
-
metric,
|
|
2486
|
-
labels
|
|
2487
|
-
}) {
|
|
2488
|
-
const l = react.useMemo(() => ({ ...DEFAULT_USAGE_PROPORTION_BAR_LABELS, ...labels }), [labels]);
|
|
2489
|
-
const total = items.reduce((sum, item) => sum + item.amount, 0);
|
|
2490
|
-
if (!items.length || total === 0) return null;
|
|
2491
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2", children: [
|
|
2492
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-3 w-full overflow-hidden rounded-full bg-muted", children: items.map((item, i) => {
|
|
2493
|
-
const pct = item.amount / total * 100;
|
|
2494
|
-
if (pct < 0.5) return null;
|
|
2495
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2496
|
-
"div",
|
|
2497
|
-
{
|
|
2498
|
-
className: ui.cn("h-full first:rounded-l-full last:rounded-r-full", styleAt(i).bg),
|
|
2499
|
-
style: { width: `${pct}%` },
|
|
2500
|
-
title: `${item.label}: ${metric === "tokens" ? l.tokens(item.tokens) : l.gbp(item.gbp)}`
|
|
2501
|
-
},
|
|
2502
|
-
item.label
|
|
2503
|
-
);
|
|
2504
|
-
}) }),
|
|
2505
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-1.5", children: items.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between text-sm", children: [
|
|
2506
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 items-center gap-1.5", children: [
|
|
2507
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2508
|
-
"span",
|
|
2509
|
-
{
|
|
2510
|
-
className: ui.cn("inline-block h-2.5 w-2.5 flex-shrink-0 rounded-full", styleAt(i).bg)
|
|
2511
|
-
}
|
|
2512
|
-
),
|
|
2513
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", children: item.label })
|
|
2514
|
-
] }),
|
|
2515
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "ml-2 flex flex-shrink-0 items-center gap-2 tabular-nums", children: [
|
|
2516
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2517
|
-
"span",
|
|
2518
|
-
{
|
|
2519
|
-
className: ui.cn(
|
|
2520
|
-
"flex items-center gap-0.5",
|
|
2521
|
-
metric === "gbp" ? "font-medium text-muted-foreground" : "text-muted-foreground/60"
|
|
2522
|
-
),
|
|
2523
|
-
children: item.gbp
|
|
2524
|
-
}
|
|
2525
|
-
),
|
|
2526
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2527
|
-
"span",
|
|
2528
|
-
{
|
|
2529
|
-
className: metric === "tokens" ? "font-medium text-muted-foreground" : "text-muted-foreground/60",
|
|
2530
|
-
children: l.tokensShort(item.tokens)
|
|
2531
|
-
}
|
|
2532
|
-
),
|
|
2533
|
-
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "w-8 text-right text-muted-foreground/40", children: [
|
|
2534
|
-
(item.amount / total * 100).toFixed(0),
|
|
2535
|
-
"%"
|
|
2536
|
-
] })
|
|
2537
|
-
] })
|
|
2538
|
-
] }, item.label)) })
|
|
2539
|
-
] });
|
|
2540
|
-
}
|
|
2541
|
-
function UsageSummary({ stats }) {
|
|
2542
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-3 gap-2 text-center", children: stats.map((stat) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-lg bg-muted p-3", children: [
|
|
2543
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center gap-1 text-base font-semibold tabular-nums", children: stat.value }),
|
|
2544
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm text-muted-foreground", children: stat.label })
|
|
2545
|
-
] }, stat.key)) });
|
|
2546
|
-
}
|
|
2547
|
-
function UsageToggle({
|
|
2548
|
-
value,
|
|
2549
|
-
onChange,
|
|
2550
|
-
options,
|
|
2551
|
-
ariaLabel,
|
|
2552
|
-
size = "compact"
|
|
2553
|
-
}) {
|
|
2554
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2555
|
-
RadioGroupPrimitive__namespace.Root,
|
|
2556
|
-
{
|
|
2557
|
-
"aria-label": ariaLabel,
|
|
2558
|
-
value,
|
|
2559
|
-
onValueChange: (next) => onChange(next),
|
|
2560
|
-
orientation: "horizontal",
|
|
2561
|
-
className: "flex gap-1 rounded-md border border-border bg-background p-0.5 print:hidden",
|
|
2562
|
-
children: options.map((option) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
2563
|
-
RadioGroupPrimitive__namespace.Item,
|
|
2564
|
-
{
|
|
2565
|
-
value: option.value,
|
|
2566
|
-
className: ui.cn(
|
|
2567
|
-
"rounded-md px-3 py-1 text-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:py-2.5",
|
|
2568
|
-
size === "fill" && "flex-1 px-2 py-1.5",
|
|
2569
|
-
option.value === value ? "bg-accent font-medium text-accent-foreground" : "text-muted-foreground hover:text-foreground"
|
|
2570
|
-
),
|
|
2571
|
-
children: option.label
|
|
2572
|
-
},
|
|
2573
|
-
option.value
|
|
2574
|
-
))
|
|
2575
|
-
}
|
|
2576
|
-
);
|
|
2577
|
-
}
|
|
2578
|
-
function UsagePanel({
|
|
2579
|
-
state,
|
|
2580
|
-
period,
|
|
2581
|
-
actions,
|
|
2582
|
-
dateRange,
|
|
2583
|
-
emptyMessage,
|
|
2584
|
-
errorMessage,
|
|
2585
|
-
labels,
|
|
2586
|
-
children
|
|
2587
|
-
}) {
|
|
2588
|
-
const l = react.useMemo(() => ({ ...DEFAULT_USAGE_PANEL_LABELS, ...labels }), [labels]);
|
|
2589
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", "data-slot": "usage-panel", children: [
|
|
2590
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between gap-2", children: [
|
|
2591
|
-
period,
|
|
2592
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-1", children: actions })
|
|
2593
|
-
] }),
|
|
2594
|
-
dateRange && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground", children: dateRange }),
|
|
2595
|
-
state === "loading" && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center py-8", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "h-5 w-5 animate-spin text-muted-foreground" }) }),
|
|
2596
|
-
state === "error" && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "py-4 text-sm text-destructive", children: errorMessage ?? l.error }),
|
|
2597
|
-
state === "empty" && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center justify-center gap-2 py-10 text-center", children: [
|
|
2598
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChartNoAxesColumn, { className: "h-8 w-8 text-muted-foreground/40" }),
|
|
2599
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: emptyMessage ?? l.empty })
|
|
2600
|
-
] }),
|
|
2601
|
-
state === "ready" && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-4", children })
|
|
2602
|
-
] });
|
|
2603
|
-
}
|
|
2604
|
-
var DEFAULT_INVOICES_DIALOG_LABELS = {
|
|
2605
|
-
title: (projectName) => `Receipts \xB7 ${projectName}`,
|
|
2606
|
-
description: (projectName) => `Receipts for ${projectName}`,
|
|
2607
|
-
noReceipts: "No receipts yet.",
|
|
2608
|
-
paid: "Paid"
|
|
2609
|
-
};
|
|
2610
|
-
var DEFAULT_DAILY_CAP_FIELD_LABELS = {
|
|
2611
|
-
noLimit: "No limit",
|
|
2612
|
-
ariaLabel: "Daily AI usage limit per collaborator (\xA3)",
|
|
2613
|
-
unit: "\xA3 / user / day",
|
|
2614
|
-
save: "Save"
|
|
2615
|
-
};
|
|
2616
|
-
var DEFAULT_MEMBER_PROJECT_ROW_LABELS = {
|
|
2617
|
-
noDailyLimit: "No daily limit"
|
|
2618
|
-
};
|
|
2619
|
-
var DEFAULT_INLINE_NAME_EDITOR_LABELS = {
|
|
2620
|
-
saveName: "Save name",
|
|
2621
|
-
cancelRename: "Cancel rename"
|
|
2622
|
-
};
|
|
2623
|
-
var DEFAULT_PROJECT_CARD_VIEW_LABELS = {
|
|
2624
|
-
collapseProject: "Collapse project",
|
|
2625
|
-
expandProject: "Expand project"
|
|
2626
|
-
};
|
|
2627
|
-
function InvoicesDialog({
|
|
2628
|
-
open,
|
|
2629
|
-
onOpenChange,
|
|
2630
|
-
projectName,
|
|
2631
|
-
isLoading,
|
|
2632
|
-
invoices,
|
|
2633
|
-
labels
|
|
2634
|
-
}) {
|
|
2635
|
-
const l = react.useMemo(() => ({ ...DEFAULT_INVOICES_DIALOG_LABELS, ...labels }), [labels]);
|
|
2636
|
-
return /* @__PURE__ */ jsxRuntime.jsx(ui.Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxRuntime.jsxs(ui.DialogContent, { presentation: "sheet", className: "max-w-lg", children: [
|
|
2637
|
-
/* @__PURE__ */ jsxRuntime.jsxs(ui.DialogHeader, { children: [
|
|
2638
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.DialogTitle, { children: l.title(projectName) }),
|
|
2639
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.DialogDescription, { className: "sr-only", children: l.description(projectName) })
|
|
2640
|
-
] }),
|
|
2641
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1", children: [
|
|
2642
|
-
isLoading && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center py-8", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "h-5 w-5 animate-spin text-muted-foreground" }) }),
|
|
2643
|
-
!isLoading && invoices.length === 0 && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "py-4 text-center text-sm text-muted-foreground", children: l.noReceipts }),
|
|
2644
|
-
!isLoading && invoices.map((invoice) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
2645
|
-
"div",
|
|
2646
|
-
{
|
|
2647
|
-
className: "flex items-center justify-between border-b py-2 text-sm last:border-0",
|
|
2648
|
-
children: [
|
|
2649
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center gap-x-3 gap-y-0.5", children: [
|
|
2650
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "tabular-nums text-muted-foreground", children: invoice.date }),
|
|
2651
|
-
invoice.kind && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-foreground", children: invoice.kind }),
|
|
2652
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium tabular-nums", children: invoice.amount }),
|
|
2653
|
-
invoice.amountNote && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs tabular-nums text-muted-foreground", children: invoice.amountNote }),
|
|
2654
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2655
|
-
ui.Badge,
|
|
2656
|
-
{
|
|
2657
|
-
variant: "outline",
|
|
2658
|
-
className: ui.cn(
|
|
2659
|
-
"h-4 px-1.5 py-0 text-sm",
|
|
2660
|
-
invoice.isPaid && "border-green-border text-green-text"
|
|
2661
|
-
),
|
|
2662
|
-
children: invoice.isPaid ? l.paid : invoice.status
|
|
2663
|
-
}
|
|
2664
|
-
)
|
|
2665
|
-
] }),
|
|
2666
|
-
invoice.href && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
2667
|
-
"a",
|
|
2668
|
-
{
|
|
2669
|
-
href: invoice.href,
|
|
2670
|
-
target: "_blank",
|
|
2671
|
-
rel: "noopener noreferrer",
|
|
2672
|
-
className: "flex items-center gap-1 text-sm text-muted-foreground hover:text-foreground",
|
|
2673
|
-
children: [
|
|
2674
|
-
invoice.linkLabel,
|
|
2675
|
-
" ",
|
|
2676
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.FileText, { className: "h-3 w-3" })
|
|
2677
|
-
]
|
|
2678
|
-
}
|
|
2679
|
-
)
|
|
2680
|
-
]
|
|
2681
|
-
},
|
|
2682
|
-
invoice.key
|
|
2683
|
-
))
|
|
2684
|
-
] })
|
|
2685
|
-
] }) });
|
|
2686
|
-
}
|
|
2687
|
-
function DailyCapField({
|
|
2688
|
-
value,
|
|
2689
|
-
onChange,
|
|
2690
|
-
onSave,
|
|
2691
|
-
canSave,
|
|
2692
|
-
isSaving,
|
|
2693
|
-
labels
|
|
2694
|
-
}) {
|
|
2695
|
-
const l = react.useMemo(() => ({ ...DEFAULT_DAILY_CAP_FIELD_LABELS, ...labels }), [labels]);
|
|
2696
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center gap-3", children: [
|
|
2697
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2698
|
-
ui.Input,
|
|
2699
|
-
{
|
|
2700
|
-
type: "number",
|
|
2701
|
-
min: 0,
|
|
2702
|
-
step: 0.01,
|
|
2703
|
-
value,
|
|
2704
|
-
onChange: (e) => onChange(e.target.value),
|
|
2705
|
-
onKeyDown: (e) => {
|
|
2706
|
-
if (e.key === "Enter") onSave();
|
|
2707
|
-
},
|
|
2708
|
-
placeholder: l.noLimit,
|
|
2709
|
-
className: "h-9 w-40",
|
|
2710
|
-
"aria-label": l.ariaLabel
|
|
2711
|
-
}
|
|
2712
|
-
),
|
|
2713
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-muted-foreground", children: l.unit }),
|
|
2714
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Button, { size: "sm", className: "h-9 px-4", disabled: !canSave || isSaving, onClick: onSave, children: l.save })
|
|
2715
|
-
] });
|
|
2716
|
-
}
|
|
2717
|
-
function MemberProjectRow({ icon, name, owner, allowance, labels }) {
|
|
2718
|
-
const l = react.useMemo(() => ({ ...DEFAULT_MEMBER_PROJECT_ROW_LABELS, ...labels }), [labels]);
|
|
2719
|
-
const barColor2 = allowance && allowance.pct >= 100 ? "bg-red-500" : allowance && allowance.pct >= 90 ? "bg-yellow-500" : "bg-primary";
|
|
2720
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3 rounded-lg bg-muted p-3", children: [
|
|
2721
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-shrink-0 text-muted-foreground", children: icon }),
|
|
2722
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-w-0 flex-1", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
2723
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate text-sm font-medium", children: name }),
|
|
2724
|
-
owner
|
|
2725
|
-
] }) }),
|
|
2726
|
-
allowance === null ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-shrink-0 text-sm text-muted-foreground", children: l.noDailyLimit }) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-shrink-0 flex-col items-end gap-0.5 text-sm tabular-nums", children: [
|
|
2727
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: allowance.text }),
|
|
2728
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "h-1 w-24 overflow-hidden rounded-full bg-background", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2729
|
-
"span",
|
|
2730
|
-
{
|
|
2731
|
-
className: ui.cn("block h-full rounded-full", barColor2),
|
|
2732
|
-
style: { width: `${allowance.pct}%` }
|
|
2733
|
-
}
|
|
2734
|
-
) })
|
|
2735
|
-
] })
|
|
2736
|
-
] });
|
|
2737
|
-
}
|
|
2738
|
-
function InlineNameEditor({
|
|
2739
|
-
value,
|
|
2740
|
-
onChange,
|
|
2741
|
-
onSave,
|
|
2742
|
-
onCancel,
|
|
2743
|
-
labels
|
|
2744
|
-
}) {
|
|
2745
|
-
const l = react.useMemo(() => ({ ...DEFAULT_INLINE_NAME_EDITOR_LABELS, ...labels }), [labels]);
|
|
2746
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 flex-1 items-center gap-1", children: [
|
|
2747
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2748
|
-
ui.Input,
|
|
2749
|
-
{
|
|
2750
|
-
value,
|
|
2751
|
-
onChange: (e) => onChange(e.target.value),
|
|
2752
|
-
className: "h-7 text-sm",
|
|
2753
|
-
autoFocus: true,
|
|
2754
|
-
onKeyDown: (e) => {
|
|
2755
|
-
if (e.key === "Enter") onSave();
|
|
2756
|
-
if (e.key === "Escape") onCancel();
|
|
2757
|
-
}
|
|
2758
|
-
}
|
|
2759
|
-
),
|
|
2760
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2761
|
-
ui.Button,
|
|
2762
|
-
{
|
|
2763
|
-
variant: "ghost",
|
|
2764
|
-
size: "icon",
|
|
2765
|
-
className: "h-6 w-6",
|
|
2766
|
-
"aria-label": l.saveName,
|
|
2767
|
-
onClick: onSave,
|
|
2768
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: "h-3.5 w-3.5" })
|
|
2769
|
-
}
|
|
2770
|
-
),
|
|
2771
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2772
|
-
ui.Button,
|
|
2773
|
-
{
|
|
2774
|
-
variant: "ghost",
|
|
2775
|
-
size: "icon",
|
|
2776
|
-
className: "h-6 w-6",
|
|
2777
|
-
"aria-label": l.cancelRename,
|
|
2778
|
-
onClick: onCancel,
|
|
2779
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "h-3.5 w-3.5" })
|
|
2780
|
-
}
|
|
2781
|
-
)
|
|
2782
|
-
] });
|
|
2783
|
-
}
|
|
2784
|
-
function ProjectCardView({
|
|
2785
|
-
expanded,
|
|
2786
|
-
onToggleExpanded,
|
|
2787
|
-
rowRef,
|
|
2788
|
-
icon,
|
|
2789
|
-
identity,
|
|
2790
|
-
actions,
|
|
2791
|
-
badge,
|
|
2792
|
-
buttons,
|
|
2793
|
-
summary,
|
|
2794
|
-
children,
|
|
2795
|
-
overlays,
|
|
2796
|
-
labels
|
|
2797
|
-
}) {
|
|
2798
|
-
const l = react.useMemo(() => ({ ...DEFAULT_PROJECT_CARD_VIEW_LABELS, ...labels }), [labels]);
|
|
2799
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
2800
|
-
"div",
|
|
2801
|
-
{
|
|
2802
|
-
"data-slot": "project-card",
|
|
2803
|
-
className: ui.cn("rounded-lg bg-muted transition-colors", expanded && "ring-1 ring-primary/40"),
|
|
2804
|
-
children: [
|
|
2805
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
2806
|
-
"div",
|
|
2807
|
-
{
|
|
2808
|
-
ref: rowRef,
|
|
2809
|
-
className: ui.cn(
|
|
2810
|
-
"flex items-center gap-2 p-3 transition-colors",
|
|
2811
|
-
expanded ? "bg-blue-bg/60" : "hover:bg-muted/50"
|
|
2812
|
-
),
|
|
2813
|
-
children: [
|
|
2814
|
-
icon,
|
|
2815
|
-
identity,
|
|
2816
|
-
actions,
|
|
2817
|
-
badge,
|
|
2818
|
-
buttons,
|
|
2819
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1" }),
|
|
2820
|
-
summary,
|
|
2821
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2822
|
-
"button",
|
|
2823
|
-
{
|
|
2824
|
-
type: "button",
|
|
2825
|
-
onClick: onToggleExpanded,
|
|
2826
|
-
"aria-expanded": expanded,
|
|
2827
|
-
"aria-label": expanded ? l.collapseProject : l.expandProject,
|
|
2828
|
-
className: "flex-shrink-0 rounded p-1 hover:bg-muted pointer-coarse:p-3",
|
|
2829
|
-
children: expanded ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { className: "h-4 w-4 text-muted-foreground" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRight, { className: "h-4 w-4 text-muted-foreground" })
|
|
2830
|
-
}
|
|
2831
|
-
)
|
|
2832
|
-
]
|
|
2833
|
-
}
|
|
2834
|
-
),
|
|
2835
|
-
expanded && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-4 border-t px-4 py-3", children }),
|
|
2836
|
-
overlays
|
|
2837
|
-
]
|
|
2838
|
-
}
|
|
2839
|
-
);
|
|
2840
|
-
}
|
|
2841
|
-
var DEFAULT_EMAIL_WORKSPACE_DIALOG_LABELS = {
|
|
2842
|
-
title: "Email this workspace",
|
|
2843
|
-
description: "Send documents and questions here from your registered email address \u2014 your Assistant reads the email and replies.",
|
|
2844
|
-
compose: "Compose email",
|
|
2845
|
-
paHintBefore: "Don\u2019t need this specific workspace? Send general questions to ",
|
|
2846
|
-
paHintAfter: " instead.",
|
|
2847
|
-
checking: "Checking your Assistant\u2019s access\u2026",
|
|
2848
|
-
noAssistant: "You don\u2019t have a default Assistant yet \u2014 one is created automatically the first time you email a workspace.",
|
|
2849
|
-
authorizedExpires: (ttl) => `Authorized \u2014 expires in ${ttl}`,
|
|
2850
|
-
end: "End",
|
|
2851
|
-
authorizePrompt: (ttl) => `Authorize your Assistant to act in this workspace${ttl ? ` for ${ttl}` : ""}, so it\u2019s ready as soon as it wakes.`,
|
|
2852
|
-
authorize: "Authorize",
|
|
2853
|
-
authorizing: "Authorizing\u2026",
|
|
2854
|
-
advanced: "Advanced",
|
|
2855
|
-
alreadyGranted: "Your Assistant already has standing access to this workspace.",
|
|
2856
|
-
standingWarning: "Standing access never expires and doesn\u2019t need re-authorizing \u2014 only use it if you trust the Assistant\u2019s environment long-term.",
|
|
2857
|
-
grant: "Grant standing access",
|
|
2858
|
-
granting: "Granting\u2026"
|
|
2859
|
-
};
|
|
2860
|
-
function EmailWorkspaceDialogView({
|
|
2861
|
-
open,
|
|
2862
|
-
onOpenChange,
|
|
2863
|
-
email,
|
|
2864
|
-
mailtoHref,
|
|
2865
|
-
paDomain,
|
|
2866
|
-
copyButton,
|
|
2867
|
-
access,
|
|
2868
|
-
standing,
|
|
2869
|
-
labels
|
|
2870
|
-
}) {
|
|
2871
|
-
const l = react.useMemo(() => ({ ...DEFAULT_EMAIL_WORKSPACE_DIALOG_LABELS, ...labels }), [labels]);
|
|
2872
|
-
const [advancedOpen, setAdvancedOpen] = react.useState(false);
|
|
2873
|
-
return /* @__PURE__ */ jsxRuntime.jsx(ui.Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxRuntime.jsxs(ui.DialogContent, { className: "sm:max-w-md", "data-testid": "email-workspace-dialog", children: [
|
|
2874
|
-
/* @__PURE__ */ jsxRuntime.jsxs(ui.DialogHeader, { className: "-m-6 mb-4 bg-muted p-6 pb-4", children: [
|
|
2875
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
|
|
2876
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Mail, { className: "size-6" }),
|
|
2877
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.DialogTitle, { children: l.title })
|
|
2878
|
-
] }),
|
|
2879
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.DialogDescription, { children: l.description })
|
|
2880
|
-
] }),
|
|
2881
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 rounded-lg border border-border bg-muted/30 px-3 py-2", children: [
|
|
2882
|
-
/* @__PURE__ */ jsxRuntime.jsx("code", { className: "flex-1 truncate font-mono text-sm", "data-testid": "email-workspace-address", children: email }),
|
|
2883
|
-
copyButton
|
|
2884
|
-
] }),
|
|
2885
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Button, { asChild: true, "data-testid": "email-workspace-compose-button", children: /* @__PURE__ */ jsxRuntime.jsxs("a", { href: mailtoHref, children: [
|
|
2886
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Send, { className: "mr-1.5 size-4" }),
|
|
2887
|
-
l.compose
|
|
2888
|
-
] }) }),
|
|
2889
|
-
/* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-xs text-muted-foreground", "data-testid": "email-workspace-pa-hint", children: [
|
|
2890
|
-
l.paHintBefore,
|
|
2891
|
-
/* @__PURE__ */ jsxRuntime.jsxs("code", { className: "font-mono", children: [
|
|
2892
|
-
"pa@",
|
|
2893
|
-
paDomain
|
|
2894
|
-
] }),
|
|
2895
|
-
l.paHintAfter
|
|
2896
|
-
] }),
|
|
2897
|
-
access && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2 rounded-md border border-border bg-muted/30 p-3", children: [
|
|
2898
|
-
access.kind === "loading" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
2899
|
-
"p",
|
|
2900
|
-
{
|
|
2901
|
-
className: "text-xs text-muted-foreground",
|
|
2902
|
-
"data-testid": "email-workspace-authorize-loading",
|
|
2903
|
-
children: l.checking
|
|
2904
|
-
}
|
|
2905
|
-
) : access.kind === "none" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
2906
|
-
"p",
|
|
2907
|
-
{
|
|
2908
|
-
className: "text-xs text-muted-foreground",
|
|
2909
|
-
"data-testid": "email-workspace-no-assistant",
|
|
2910
|
-
children: l.noAssistant
|
|
2911
|
-
}
|
|
2912
|
-
) : access.kind === "session" ? /* @__PURE__ */ jsxRuntime.jsxs(
|
|
2913
|
-
"div",
|
|
2914
|
-
{
|
|
2915
|
-
className: "flex items-center justify-between gap-3",
|
|
2916
|
-
"data-testid": "email-workspace-active-session",
|
|
2917
|
-
children: [
|
|
2918
|
-
/* @__PURE__ */ jsxRuntime.jsxs("p", { className: "flex items-center gap-1.5 text-xs text-muted-foreground", children: [
|
|
2919
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Clock, { className: "size-3.5" }),
|
|
2920
|
-
l.authorizedExpires(access.expiresIn)
|
|
2921
|
-
] }),
|
|
2922
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
2923
|
-
ui.Button,
|
|
2924
|
-
{
|
|
2925
|
-
variant: "ghost",
|
|
2926
|
-
size: "sm",
|
|
2927
|
-
onClick: access.onEnd,
|
|
2928
|
-
disabled: access.isEnding,
|
|
2929
|
-
className: "h-7 shrink-0 gap-1 px-2 text-xs text-destructive hover:bg-destructive/10 hover:text-destructive pointer-coarse:h-11",
|
|
2930
|
-
"data-testid": "email-workspace-end-session-button",
|
|
2931
|
-
children: [
|
|
2932
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "size-3" }),
|
|
2933
|
-
l.end
|
|
2934
|
-
]
|
|
2935
|
-
}
|
|
2936
|
-
)
|
|
2937
|
-
]
|
|
2938
|
-
}
|
|
2939
|
-
) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between gap-3", children: [
|
|
2940
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground", children: l.authorizePrompt(access.defaultTtl) }),
|
|
2941
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
2942
|
-
ui.Button,
|
|
2943
|
-
{
|
|
2944
|
-
variant: "outline",
|
|
2945
|
-
size: "sm",
|
|
2946
|
-
onClick: access.onAuthorize,
|
|
2947
|
-
disabled: access.isAuthorizing,
|
|
2948
|
-
className: "shrink-0 gap-1.5",
|
|
2949
|
-
"data-testid": "email-workspace-authorize-button",
|
|
2950
|
-
children: [
|
|
2951
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Clock, { className: "size-3.5" }),
|
|
2952
|
-
access.isAuthorizing ? l.authorizing : l.authorize
|
|
2953
|
-
]
|
|
2954
|
-
}
|
|
2955
|
-
)
|
|
2956
|
-
] }),
|
|
2957
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2958
|
-
"button",
|
|
2959
|
-
{
|
|
2960
|
-
type: "button",
|
|
2961
|
-
onClick: () => setAdvancedOpen((o) => !o),
|
|
2962
|
-
"aria-expanded": advancedOpen,
|
|
2963
|
-
className: "text-xs font-semibold uppercase tracking-wide text-muted-foreground hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:min-h-11",
|
|
2964
|
-
"data-testid": "email-workspace-advanced-toggle",
|
|
2965
|
-
children: l.advanced
|
|
2966
|
-
}
|
|
2967
|
-
),
|
|
2968
|
-
advancedOpen && standing && (standing.alreadyGranted ? /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "flex items-center gap-1.5 text-xs text-muted-foreground", children: [
|
|
2969
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: "size-3.5 text-green-solid" }),
|
|
2970
|
-
l.alreadyGranted
|
|
2971
|
-
] }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
2972
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground", children: l.standingWarning }),
|
|
2973
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
2974
|
-
ui.Button,
|
|
2975
|
-
{
|
|
2976
|
-
variant: "outline",
|
|
2977
|
-
size: "sm",
|
|
2978
|
-
onClick: standing.onGrant,
|
|
2979
|
-
disabled: standing.isGranting,
|
|
2980
|
-
className: "gap-1.5",
|
|
2981
|
-
"data-testid": "email-workspace-grant-access-button",
|
|
2982
|
-
children: [
|
|
2983
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Infinity, { className: "size-3.5" }),
|
|
2984
|
-
standing.isGranting ? l.granting : l.grant
|
|
2985
|
-
]
|
|
2986
|
-
}
|
|
2987
|
-
)
|
|
2988
|
-
] }))
|
|
2989
|
-
] })
|
|
2990
|
-
] }) });
|
|
2991
|
-
}
|
|
2992
|
-
function PlanNotice({
|
|
2993
|
-
tone = "muted",
|
|
2994
|
-
className,
|
|
2995
|
-
testId,
|
|
2996
|
-
children
|
|
2997
|
-
}) {
|
|
2998
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2999
|
-
"p",
|
|
3000
|
-
{
|
|
3001
|
-
"data-slot": "plan-notice",
|
|
3002
|
-
"data-testid": testId,
|
|
3003
|
-
className: ui.cn(
|
|
3004
|
-
"text-sm",
|
|
3005
|
-
tone === "error" ? "text-destructive" : "text-muted-foreground",
|
|
3006
|
-
className
|
|
3007
|
-
),
|
|
3008
|
-
children
|
|
3009
|
-
}
|
|
3010
|
-
);
|
|
3011
|
-
}
|
|
3012
|
-
function PlanStack({
|
|
3013
|
-
gap = 3,
|
|
3014
|
-
testId,
|
|
3015
|
-
className,
|
|
3016
|
-
children
|
|
3017
|
-
}) {
|
|
3018
|
-
const GAP = { 2: "space-y-2", 3: "space-y-3", 4: "space-y-4", 5: "space-y-5 pt-2" };
|
|
3019
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-slot": "plan-stack", "data-testid": testId, className: ui.cn(GAP[gap], className), children });
|
|
3020
|
-
}
|
|
3021
|
-
function PlanTransition({ from, to }) {
|
|
3022
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-slot": "plan-transition", className: "flex flex-wrap items-center gap-2 text-sm", children: [
|
|
3023
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-flex items-center rounded-full bg-muted px-2 py-0.5 text-xs font-semibold text-muted-foreground", children: from }),
|
|
3024
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowRight, { className: "size-4 text-muted-foreground", "aria-hidden": true }),
|
|
3025
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-flex items-center rounded-full bg-primary px-2 py-0.5 text-xs font-semibold text-white", children: to })
|
|
3026
|
-
] });
|
|
3027
|
-
}
|
|
3028
|
-
function PlanPickerHeader({
|
|
3029
|
-
title,
|
|
3030
|
-
info,
|
|
3031
|
-
infoPlacement = "title",
|
|
3032
|
-
toggle,
|
|
3033
|
-
className
|
|
3034
|
-
}) {
|
|
3035
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
3036
|
-
"div",
|
|
3037
|
-
{
|
|
3038
|
-
"data-slot": "plan-picker-header",
|
|
3039
|
-
className: ui.cn("flex flex-wrap items-center justify-between gap-x-3 gap-y-2", className),
|
|
3040
|
-
children: [
|
|
3041
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
3042
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-lg font-semibold", children: title }),
|
|
3043
|
-
infoPlacement === "title" && info
|
|
3044
|
-
] }),
|
|
3045
|
-
infoPlacement === "toggle" ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center gap-x-4 gap-y-2", children: [
|
|
3046
|
-
info,
|
|
3047
|
-
toggle
|
|
3048
|
-
] }) : toggle
|
|
3049
|
-
]
|
|
3050
|
-
}
|
|
3051
|
-
);
|
|
3052
|
-
}
|
|
3053
|
-
function PlanPickerCard({ children }) {
|
|
3054
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
3055
|
-
"div",
|
|
3056
|
-
{
|
|
3057
|
-
"data-slot": "plan-picker-card",
|
|
3058
|
-
className: "space-y-4 rounded-lg border border-border bg-card shadow-xs p-4",
|
|
3059
|
-
children
|
|
3060
|
-
}
|
|
3061
|
-
);
|
|
3062
|
-
}
|
|
3063
|
-
function PlanActionRow({ children }) {
|
|
3064
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-slot": "plan-action-row", className: "flex flex-col-reverse gap-2 @xl:flex-row", children });
|
|
3065
|
-
}
|
|
3066
|
-
function PlanActionButton({
|
|
3067
|
-
tone = "primary",
|
|
3068
|
-
fill,
|
|
3069
|
-
...props
|
|
3070
|
-
}) {
|
|
3071
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
3072
|
-
ui.Button,
|
|
3073
|
-
{
|
|
3074
|
-
"data-slot": "plan-action-button",
|
|
3075
|
-
variant: tone === "muted" ? "ghost" : "default",
|
|
3076
|
-
...props,
|
|
3077
|
-
className: ui.cn(
|
|
3078
|
-
"w-full",
|
|
3079
|
-
fill && "sm:flex-1",
|
|
3080
|
-
tone === "muted" && "text-muted-foreground",
|
|
3081
|
-
props.className
|
|
3082
|
-
)
|
|
3083
|
-
}
|
|
3084
|
-
);
|
|
3085
|
-
}
|
|
3086
|
-
var DEFAULT_SUBSCRIPTION_STATUS_LABELS = {
|
|
3087
|
-
aiUsageResets: (date) => `AI usage resets ${date}`,
|
|
3088
|
-
cancelsAtPeriodEnd: "\xB7 Cancels at period end",
|
|
3089
|
-
cancelsAtEndOfBillingPeriod: "Cancels at end of billing period"
|
|
3090
|
-
};
|
|
3091
|
-
function SubscriptionStatusView({
|
|
3092
|
-
resetDate,
|
|
3093
|
-
isCanceling,
|
|
3094
|
-
meters,
|
|
3095
|
-
testIdPrefix,
|
|
3096
|
-
labels
|
|
3097
|
-
}) {
|
|
3098
|
-
const l = { ...DEFAULT_SUBSCRIPTION_STATUS_LABELS, ...labels };
|
|
3099
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-slot": "subscription-status", className: "space-y-3", children: [
|
|
3100
|
-
resetDate && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-sm text-muted-foreground", children: [
|
|
3101
|
-
l.aiUsageResets(resetDate),
|
|
3102
|
-
isCanceling && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-2 text-yellow-text", children: l.cancelsAtPeriodEnd })
|
|
3103
|
-
] }),
|
|
3104
|
-
!resetDate && isCanceling && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-yellow-text", children: l.cancelsAtEndOfBillingPeriod }),
|
|
3105
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-3", children: meters.map((m) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
3106
|
-
chunkQZTNTP75_cjs.UsageMeter,
|
|
3107
|
-
{
|
|
3108
|
-
icon: m.icon,
|
|
3109
|
-
label: m.label,
|
|
3110
|
-
value: m.value,
|
|
3111
|
-
pct: m.pct,
|
|
3112
|
-
testId: chunkMHVNT4J3_cjs.prefixedTestId(testIdPrefix, m.key, { testId: `project-quota-${m.key}` })
|
|
3113
|
-
},
|
|
3114
|
-
m.key
|
|
3115
|
-
)) })
|
|
3116
|
-
] });
|
|
3117
|
-
}
|
|
3118
|
-
function PlanDialogFrame({
|
|
3119
|
-
open,
|
|
3120
|
-
onOpenChange,
|
|
3121
|
-
title,
|
|
3122
|
-
description,
|
|
3123
|
-
isDescriptionHidden,
|
|
3124
|
-
projectName,
|
|
3125
|
-
projectTestId,
|
|
3126
|
-
children,
|
|
3127
|
-
labels
|
|
3128
|
-
}) {
|
|
3129
|
-
return /* @__PURE__ */ jsxRuntime.jsx(ui.Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxRuntime.jsxs(ui.DialogContent, { className: "max-w-5xl", children: [
|
|
3130
|
-
/* @__PURE__ */ jsxRuntime.jsxs(ui.DialogHeader, { className: "flex-row items-start justify-between gap-3 space-y-0 pr-8", children: [
|
|
3131
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1.5", children: [
|
|
3132
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.DialogTitle, { children: title }),
|
|
3133
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.DialogDescription, { className: isDescriptionHidden ? "sr-only" : void 0, children: description })
|
|
3134
|
-
] }),
|
|
3135
|
-
projectName !== void 0 && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
3136
|
-
"span",
|
|
3137
|
-
{
|
|
3138
|
-
className: "shrink-0 text-sm text-muted-foreground",
|
|
3139
|
-
"data-testid": chunkMHVNT4J3_cjs.testIdOr(projectTestId, { testId: "change-plan-project" }),
|
|
3140
|
-
children: [
|
|
3141
|
-
labels?.project ?? "Project:",
|
|
3142
|
-
" ",
|
|
3143
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-semibold text-foreground", children: projectName })
|
|
3144
|
-
]
|
|
3145
|
-
}
|
|
3146
|
-
)
|
|
3147
|
-
] }),
|
|
3148
|
-
children
|
|
3149
|
-
] }) });
|
|
3150
|
-
}
|
|
3151
|
-
var DEFAULT_CHECKOUT_DIALOG_LABELS = {
|
|
3152
|
-
unavailableTitle: "Stripe Not Configured",
|
|
3153
|
-
unavailableDescription: "Stripe checkout is not available. Please contact support.",
|
|
3154
|
-
title: "Payment",
|
|
3155
|
-
description: "Enter your card to start the plan",
|
|
3156
|
-
loading: "Loading\u2026",
|
|
3157
|
-
error: "Checkout didn't load. Try again."
|
|
3158
|
-
};
|
|
3159
|
-
function CheckoutDialogFrame({
|
|
3160
|
-
open,
|
|
3161
|
-
onOpenChange,
|
|
3162
|
-
isUnavailable,
|
|
3163
|
-
isLoading,
|
|
3164
|
-
hasError,
|
|
3165
|
-
children,
|
|
3166
|
-
labels
|
|
3167
|
-
}) {
|
|
3168
|
-
const l = { ...DEFAULT_CHECKOUT_DIALOG_LABELS, ...labels };
|
|
3169
|
-
if (isUnavailable) {
|
|
3170
|
-
return /* @__PURE__ */ jsxRuntime.jsx(ui.Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxRuntime.jsx(ui.DialogContent, { children: /* @__PURE__ */ jsxRuntime.jsxs(ui.DialogHeader, { children: [
|
|
3171
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.DialogTitle, { children: l.unavailableTitle }),
|
|
3172
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.DialogDescription, { children: l.unavailableDescription })
|
|
3173
|
-
] }) }) });
|
|
3174
|
-
}
|
|
3175
|
-
return /* @__PURE__ */ jsxRuntime.jsx(ui.Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
3176
|
-
ui.DialogContent,
|
|
3177
|
-
{
|
|
3178
|
-
presentation: "sheet",
|
|
3179
|
-
className: "flex max-h-[calc(100dvh-2rem)] max-w-2xl flex-col gap-0 overflow-hidden p-0",
|
|
3180
|
-
onInteractOutside: (e) => e.preventDefault(),
|
|
3181
|
-
onEscapeKeyDown: (e) => e.preventDefault(),
|
|
3182
|
-
children: [
|
|
3183
|
-
/* @__PURE__ */ jsxRuntime.jsxs(ui.DialogHeader, { className: "flex-shrink-0 px-6 pb-3 pt-6", children: [
|
|
3184
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.DialogTitle, { children: l.title }),
|
|
3185
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.DialogDescription, { className: "sr-only", children: l.description })
|
|
3186
|
-
] }),
|
|
3187
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-h-0 flex-1 overflow-y-auto px-6 pb-6", children: [
|
|
3188
|
-
isLoading && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "py-8 text-center text-muted-foreground", children: l.loading }),
|
|
3189
|
-
hasError && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "py-8 text-center text-destructive", children: l.error }),
|
|
3190
|
-
children
|
|
3191
|
-
] })
|
|
3192
|
-
]
|
|
3193
|
-
}
|
|
3194
|
-
) });
|
|
3195
|
-
}
|
|
3196
|
-
var DEFAULT_QUOTA_EXCEEDED_DIALOG_LABELS = {
|
|
3197
|
-
title: "AI usage used up",
|
|
3198
|
-
projectUsage: "Project usage",
|
|
3199
|
-
progress: "AI usage this month",
|
|
3200
|
-
project: "Project:",
|
|
3201
|
-
close: "Not now",
|
|
3202
|
-
upgrade: "Upgrade"
|
|
3203
|
-
};
|
|
3204
|
-
function QuotaExceededDialogView({
|
|
3205
|
-
open,
|
|
3206
|
-
onClose,
|
|
3207
|
-
onUpgrade,
|
|
3208
|
-
message,
|
|
3209
|
-
usage,
|
|
3210
|
-
actions,
|
|
3211
|
-
extra,
|
|
3212
|
-
labels
|
|
3213
|
-
}) {
|
|
3214
|
-
const l = { ...DEFAULT_QUOTA_EXCEEDED_DIALOG_LABELS, ...labels };
|
|
3215
|
-
return /* @__PURE__ */ jsxRuntime.jsx(ui.Dialog, { open, onOpenChange: (o) => !o && onClose(), children: /* @__PURE__ */ jsxRuntime.jsxs(ui.DialogContent, { className: "max-w-md", "data-testid": "quota-exceeded-modal", children: [
|
|
3216
|
-
/* @__PURE__ */ jsxRuntime.jsxs(ui.DialogHeader, { children: [
|
|
3217
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.DialogTitle, { children: l.title }),
|
|
3218
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.DialogDescription, { children: message })
|
|
3219
|
-
] }),
|
|
3220
|
-
usage && /* @__PURE__ */ jsxRuntime.jsxs(chunkULWRNGGE_cjs.ModalSection, { className: "space-y-2", children: [
|
|
3221
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Progress, { value: usage.percent, "aria-label": l.progress }),
|
|
3222
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
3223
|
-
"div",
|
|
3224
|
-
{
|
|
3225
|
-
className: "flex flex-wrap items-center justify-between gap-x-3 text-sm text-muted-foreground",
|
|
3226
|
-
"data-testid": "quota-usage-readout",
|
|
3227
|
-
children: [
|
|
3228
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "tabular-nums", children: usage.readout }),
|
|
3229
|
-
usage.projectId && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", children: usage.projectId })
|
|
3230
|
-
]
|
|
3231
|
-
}
|
|
3232
|
-
)
|
|
3233
|
-
] }),
|
|
3234
|
-
extra,
|
|
3235
|
-
/* @__PURE__ */ jsxRuntime.jsxs(ui.DialogFooter, { children: [
|
|
3236
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Button, { variant: "outline", onClick: onClose, "data-testid": "quota-close-button", children: l.close }),
|
|
3237
|
-
actions ?? /* @__PURE__ */ jsxRuntime.jsx(ui.Button, { onClick: onUpgrade, "data-testid": "quota-upgrade-button", children: l.upgrade })
|
|
3238
|
-
] })
|
|
3239
|
-
] }) });
|
|
3240
|
-
}
|
|
3241
|
-
function WelcomeProjectPicker({
|
|
3242
|
-
value,
|
|
3243
|
-
options,
|
|
3244
|
-
onChange,
|
|
3245
|
-
testId = "welcome-modal-project-select"
|
|
3246
|
-
}) {
|
|
3247
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(ui.Select, { value, onValueChange: onChange, children: [
|
|
3248
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3249
|
-
ui.SelectTrigger,
|
|
3250
|
-
{
|
|
3251
|
-
className: "h-7 w-auto max-w-[9.5rem] shrink-0 gap-1 border-none bg-muted px-2 text-xs font-medium pointer-coarse:h-11",
|
|
3252
|
-
"data-testid": testId,
|
|
3253
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(ui.SelectValue, {})
|
|
3254
|
-
}
|
|
3255
|
-
),
|
|
3256
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.SelectContent, { align: "end", children: options.map((o) => /* @__PURE__ */ jsxRuntime.jsx(ui.SelectItem, { value: o.id, children: o.name }, o.id)) })
|
|
3257
|
-
] });
|
|
3258
|
-
}
|
|
3259
|
-
var DEFAULT_SUBSCRIPTION_SECTION_LABELS = {
|
|
3260
|
-
loading: "Loading projects...",
|
|
3261
|
-
empty: "No projects yet \u2014 create one above."
|
|
3262
|
-
};
|
|
3263
|
-
function SubscriptionSectionView({
|
|
3264
|
-
intro,
|
|
3265
|
-
isLoading,
|
|
3266
|
-
isEmpty,
|
|
3267
|
-
children,
|
|
3268
|
-
labels
|
|
3269
|
-
}) {
|
|
3270
|
-
const l = { ...DEFAULT_SUBSCRIPTION_SECTION_LABELS, ...labels };
|
|
3271
|
-
if (isLoading) {
|
|
3272
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "py-4 text-sm text-muted-foreground", children: l.loading });
|
|
3273
|
-
}
|
|
3274
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-slot": "subscription-section", className: "space-y-4", children: [
|
|
3275
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: intro }),
|
|
3276
|
-
isEmpty ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rounded-lg bg-muted py-8 text-center", children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: l.empty }) }) : children
|
|
3277
|
-
] });
|
|
3278
|
-
}
|
|
3279
|
-
function ProjectGroup({ children }) {
|
|
3280
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-slot": "project-group", className: "space-y-2", children });
|
|
3281
|
-
}
|
|
3282
|
-
function ProjectPlanPicker({ children }) {
|
|
3283
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-slot": "project-plan-picker", className: "border-b pb-3", children });
|
|
3284
|
-
}
|
|
3285
|
-
function ProjectNameLabel({ children }) {
|
|
3286
|
-
return /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate text-sm font-medium", children });
|
|
3287
|
-
}
|
|
3288
|
-
function ProjectRowActions({ children }) {
|
|
3289
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-slot": "project-row-actions", className: "flex flex-shrink-0 items-center gap-0.5", children });
|
|
3290
|
-
}
|
|
3291
|
-
function RowIconAction({
|
|
3292
|
-
label,
|
|
3293
|
-
tooltip,
|
|
3294
|
-
icon,
|
|
3295
|
-
tone = "primary",
|
|
3296
|
-
disabled,
|
|
3297
|
-
onClick
|
|
3298
|
-
}) {
|
|
3299
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(ui.Tooltip, { children: [
|
|
3300
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx("span", { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
3301
|
-
ui.Button,
|
|
3302
|
-
{
|
|
3303
|
-
variant: "ghost",
|
|
3304
|
-
size: "icon",
|
|
3305
|
-
className: ui.cn(
|
|
3306
|
-
"size-6 text-muted-foreground/50 pointer-coarse:size-11",
|
|
3307
|
-
tone === "destructive" ? "hover:text-destructive" : "hover:text-primary"
|
|
3308
|
-
),
|
|
3309
|
-
"aria-label": label,
|
|
3310
|
-
disabled,
|
|
3311
|
-
onClick,
|
|
3312
|
-
children: icon
|
|
3313
|
-
}
|
|
3314
|
-
) }) }),
|
|
3315
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.TooltipContent, { children: tooltip ?? label })
|
|
3316
|
-
] });
|
|
3317
|
-
}
|
|
3318
|
-
function RowButton({
|
|
3319
|
-
icon,
|
|
3320
|
-
children,
|
|
3321
|
-
onClick
|
|
3322
|
-
}) {
|
|
3323
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
3324
|
-
ui.Button,
|
|
3325
|
-
{
|
|
3326
|
-
variant: "outline",
|
|
3327
|
-
size: "sm",
|
|
3328
|
-
className: "h-7 gap-1 px-2.5 text-sm pointer-coarse:h-11",
|
|
3329
|
-
onClick,
|
|
3330
|
-
children: [
|
|
3331
|
-
icon,
|
|
3332
|
-
children
|
|
3333
|
-
]
|
|
3334
|
-
}
|
|
3335
|
-
);
|
|
3336
|
-
}
|
|
3337
|
-
function UsageActionButton({
|
|
3338
|
-
label,
|
|
3339
|
-
icon,
|
|
3340
|
-
onClick
|
|
3341
|
-
}) {
|
|
3342
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(ui.Tooltip, { children: [
|
|
3343
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
3344
|
-
ui.Button,
|
|
3345
|
-
{
|
|
3346
|
-
variant: "ghost",
|
|
3347
|
-
size: "icon",
|
|
3348
|
-
className: "size-6 text-muted-foreground hover:text-foreground pointer-coarse:size-11",
|
|
3349
|
-
"aria-label": label,
|
|
3350
|
-
onClick,
|
|
3351
|
-
children: icon
|
|
3352
|
-
}
|
|
3353
|
-
) }),
|
|
3354
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.TooltipContent, { children: label })
|
|
3355
|
-
] });
|
|
3356
|
-
}
|
|
3357
|
-
function UsageQuotaHint({ children }) {
|
|
3358
|
-
return /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-1 tabular-nums", children });
|
|
3359
|
-
}
|
|
3360
|
-
function UsageSection({
|
|
3361
|
-
title,
|
|
3362
|
-
action,
|
|
3363
|
-
children,
|
|
3364
|
-
footer,
|
|
3365
|
-
gap = "sm"
|
|
3366
|
-
}) {
|
|
3367
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-slot": "usage-section", className: gap === "md" ? "space-y-3" : void 0, children: [
|
|
3368
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: ui.cn("flex items-center justify-between", gap === "sm" && "mb-2"), children: [
|
|
3369
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm font-medium text-muted-foreground", children: title }),
|
|
3370
|
-
action
|
|
3371
|
-
] }),
|
|
3372
|
-
children,
|
|
3373
|
-
footer && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-2", children: footer })
|
|
3374
|
-
] });
|
|
3375
|
-
}
|
|
3376
|
-
var DEFAULT_ERROR_DIALOG_LABELS = {
|
|
3377
|
-
title: "Something Went Wrong",
|
|
3378
|
-
srDescription: "Error dialog",
|
|
3379
|
-
reportHint: "Please click below to report the error to our support team if you have not done so already.",
|
|
3380
|
-
refreshHint: "Clicking Refresh Session will attempt to refresh your session, which may help resolve the error.",
|
|
3381
|
-
hideDetails: "Hide Details",
|
|
3382
|
-
viewDetails: "View Details",
|
|
3383
|
-
toggleDetailsAria: "Toggle error details",
|
|
3384
|
-
copyAria: "Copy error details",
|
|
3385
|
-
copy: "Copy error",
|
|
3386
|
-
copied: "Copied",
|
|
3387
|
-
refreshSession: "Refresh Session",
|
|
3388
|
-
logout: "Logout"
|
|
3389
|
-
};
|
|
3390
|
-
function ErrorDialogView({
|
|
3391
|
-
details,
|
|
3392
|
-
report,
|
|
3393
|
-
onRefresh,
|
|
3394
|
-
onLogout,
|
|
3395
|
-
labels
|
|
3396
|
-
}) {
|
|
3397
|
-
const l = { ...DEFAULT_ERROR_DIALOG_LABELS, ...labels };
|
|
3398
|
-
return /* @__PURE__ */ jsxRuntime.jsx(ui.Dialog, { open: true, onOpenChange: () => {
|
|
3399
|
-
}, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
3400
|
-
ui.DialogContent,
|
|
3401
|
-
{
|
|
3402
|
-
presentation: "sheet",
|
|
3403
|
-
className: "flex max-h-panel w-modal max-w-modal-vw flex-col overflow-hidden p-0",
|
|
3404
|
-
"data-testid": "error-boundary-modal",
|
|
3405
|
-
hideCloseButton: true,
|
|
3406
|
-
children: [
|
|
3407
|
-
/* @__PURE__ */ jsxRuntime.jsxs(chunkULWRNGGE_cjs.ModalHeader, { children: [
|
|
3408
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.DialogTitle, { children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
3409
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertCircle, { className: "text-red-text", size: 24 }),
|
|
3410
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { children: l.title })
|
|
3411
|
-
] }) }),
|
|
3412
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.DialogDescription, { className: "sr-only", children: l.srDescription })
|
|
3413
|
-
] }),
|
|
3414
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-h-0 flex-1 overflow-auto px-6 pb-6", children: /* @__PURE__ */ jsxRuntime.jsxs(chunkULWRNGGE_cjs.ModalSection, { "data-testid": "error-boundary", children: [
|
|
3415
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-4 text-sm text-muted-foreground", children: l.reportHint }),
|
|
3416
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-4 text-sm text-muted-foreground", children: l.refreshHint }),
|
|
3417
|
-
details?.isShown && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-4 rounded border border-border bg-background p-3", children: /* @__PURE__ */ jsxRuntime.jsx("pre", { className: "max-h-96 overflow-auto whitespace-pre-wrap font-mono text-sm", children: details.text }) }),
|
|
3418
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex w-full flex-col gap-2", children: [
|
|
3419
|
-
details && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex w-full gap-2", children: [
|
|
3420
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
3421
|
-
ui.Button,
|
|
3422
|
-
{
|
|
3423
|
-
variant: "outline",
|
|
3424
|
-
className: "flex-1",
|
|
3425
|
-
onClick: details.onToggle,
|
|
3426
|
-
"aria-label": l.toggleDetailsAria,
|
|
3427
|
-
"data-testid": "error-boundary-view-details",
|
|
3428
|
-
children: [
|
|
3429
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.FileText, { className: "mr-2 size-4" }),
|
|
3430
|
-
details.isShown ? l.hideDetails : l.viewDetails
|
|
3431
|
-
]
|
|
3432
|
-
}
|
|
3433
|
-
),
|
|
3434
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
3435
|
-
ui.Button,
|
|
3436
|
-
{
|
|
3437
|
-
variant: "outline",
|
|
3438
|
-
className: "flex-1",
|
|
3439
|
-
onClick: details.onCopy,
|
|
3440
|
-
"aria-label": l.copyAria,
|
|
3441
|
-
"data-testid": "error-boundary-copy-details",
|
|
3442
|
-
children: [
|
|
3443
|
-
details.isCopied ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: "mr-2 size-4 text-green-text" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Copy, { className: "mr-2 size-4" }),
|
|
3444
|
-
details.isCopied ? l.copied : l.copy
|
|
3445
|
-
]
|
|
3446
|
-
}
|
|
3447
|
-
)
|
|
3448
|
-
] }),
|
|
3449
|
-
report,
|
|
3450
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
3451
|
-
ui.Button,
|
|
3452
|
-
{
|
|
3453
|
-
variant: "outline",
|
|
3454
|
-
className: "w-full",
|
|
3455
|
-
onClick: onRefresh,
|
|
3456
|
-
"aria-label": "Refresh session",
|
|
3457
|
-
children: [
|
|
3458
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.RefreshCw, { className: "mr-2 size-4" }),
|
|
3459
|
-
l.refreshSession
|
|
3460
|
-
]
|
|
3461
|
-
}
|
|
3462
|
-
),
|
|
3463
|
-
/* @__PURE__ */ jsxRuntime.jsxs(ui.Button, { variant: "outline", className: "w-full", onClick: onLogout, "aria-label": "Logout", children: [
|
|
3464
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.LogOut, { className: "mr-2 size-4" }),
|
|
3465
|
-
l.logout
|
|
3466
|
-
] })
|
|
3467
|
-
] })
|
|
3468
|
-
] }) })
|
|
3469
|
-
]
|
|
3470
|
-
}
|
|
3471
|
-
) });
|
|
3472
|
-
}
|
|
3473
|
-
var SCHEME_OPTIONS = [
|
|
3474
|
-
{ value: "light", label: "Light", icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Sun, { className: "h-4 w-4" }) },
|
|
3475
|
-
{ value: "dark", label: "Dark", icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Moon, { className: "h-4 w-4" }) }
|
|
3476
|
-
].map((option) => ({ ...option, testId: `appearance-scheme-${option.value}` }));
|
|
3477
|
-
var TEXT_SIZE_OPTIONS = [
|
|
3478
|
-
{ value: "default", label: "Default" },
|
|
3479
|
-
{ value: "large", label: "Large" },
|
|
3480
|
-
{ value: "larger", label: "Larger" }
|
|
3481
|
-
].map((option) => ({ ...option, testId: `appearance-text-size-${option.value}` }));
|
|
3482
|
-
var DEFAULT_APPEARANCE_PAIRING_IDS = [
|
|
3483
|
-
"office",
|
|
3484
|
-
"inter",
|
|
3485
|
-
"fraunces-inter",
|
|
3486
|
-
"montserrat-nunito"
|
|
3487
|
-
];
|
|
3488
|
-
function AppearanceSettings({
|
|
3489
|
-
colorScheme,
|
|
3490
|
-
onColorSchemeChange,
|
|
3491
|
-
textSize,
|
|
3492
|
-
onTextSizeChange,
|
|
3493
|
-
pairingId,
|
|
3494
|
-
onPairingChange,
|
|
3495
|
-
pairingIds = DEFAULT_APPEARANCE_PAIRING_IDS,
|
|
3496
|
-
onReset
|
|
3497
|
-
}) {
|
|
3498
|
-
const activePairing = chunkNWNVWO6L_cjs.getFontPairing(pairingId) ?? chunkNWNVWO6L_cjs.getFontPairing(pairingIds[0]);
|
|
3499
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(chunkU73KPFYH_cjs.SettingsPanel, { testId: "settings-appearance", children: [
|
|
3500
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3501
|
-
chunkU73KPFYH_cjs.SettingsSection,
|
|
3502
|
-
{
|
|
3503
|
-
title: "Colour scheme",
|
|
3504
|
-
action: onReset && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
3505
|
-
"button",
|
|
3506
|
-
{
|
|
3507
|
-
type: "button",
|
|
3508
|
-
onClick: onReset,
|
|
3509
|
-
className: "flex items-center gap-1.5 py-1 text-sm text-muted-foreground hover:text-foreground pointer-coarse:min-h-11",
|
|
3510
|
-
"data-testid": "appearance-reset",
|
|
3511
|
-
children: [
|
|
3512
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.RotateCcw, { className: "h-3 w-3" }),
|
|
3513
|
-
"Reset"
|
|
3514
|
-
]
|
|
3515
|
-
}
|
|
3516
|
-
),
|
|
3517
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
3518
|
-
SegmentedControl,
|
|
3519
|
-
{
|
|
3520
|
-
value: colorScheme,
|
|
3521
|
-
onChange: onColorSchemeChange,
|
|
3522
|
-
options: SCHEME_OPTIONS,
|
|
3523
|
-
ariaLabel: "Colour scheme"
|
|
3524
|
-
}
|
|
3525
|
-
)
|
|
3526
|
-
}
|
|
3527
|
-
),
|
|
3528
|
-
/* @__PURE__ */ jsxRuntime.jsxs(chunkU73KPFYH_cjs.SettingsSection, { title: "Text size", children: [
|
|
3529
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3530
|
-
SegmentedControl,
|
|
3531
|
-
{
|
|
3532
|
-
value: textSize,
|
|
3533
|
-
onChange: onTextSizeChange,
|
|
3534
|
-
options: TEXT_SIZE_OPTIONS,
|
|
3535
|
-
ariaLabel: "Text size"
|
|
3536
|
-
}
|
|
3537
|
-
),
|
|
3538
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: "Makes all text larger, including documents in the viewer and citations. Applied straight away and remembered on this device." })
|
|
3539
|
-
] }),
|
|
3540
|
-
/* @__PURE__ */ jsxRuntime.jsxs(chunkU73KPFYH_cjs.SettingsSection, { title: "Typeface", children: [
|
|
3541
|
-
/* @__PURE__ */ jsxRuntime.jsxs(ui.Select, { value: pairingId, onValueChange: onPairingChange, children: [
|
|
3542
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.SelectTrigger, { className: "w-full", "data-testid": "appearance-typeface-select", children: /* @__PURE__ */ jsxRuntime.jsx(ui.SelectValue, { children: activePairing && /* @__PURE__ */ jsxRuntime.jsx("span", { style: { fontFamily: activePairing.display }, children: activePairing.label }) }) }),
|
|
3543
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.SelectContent, { children: pairingIds.map((id) => {
|
|
3544
|
-
const pairing = chunkNWNVWO6L_cjs.getFontPairing(id);
|
|
3545
|
-
if (!pairing) return null;
|
|
3546
|
-
return /* @__PURE__ */ jsxRuntime.jsx(ui.SelectItem, { value: id, "data-testid": `appearance-typeface-${id}`, children: /* @__PURE__ */ jsxRuntime.jsx("span", { style: { fontFamily: pairing.display }, children: pairing.label }) }, id);
|
|
3547
|
-
}) })
|
|
3548
|
-
] }),
|
|
3549
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: "Sets the headings and body text across the app. Applied straight away and remembered on this device." })
|
|
3550
|
-
] })
|
|
3551
|
-
] });
|
|
3552
|
-
}
|
|
3553
22
|
|
|
3554
23
|
Object.defineProperty(exports, "ActiveSessionsDialog", {
|
|
3555
24
|
enumerable: true,
|
|
3556
|
-
get: function () { return
|
|
25
|
+
get: function () { return chunk3FSXWVHW_cjs.ActiveSessionsDialog; }
|
|
26
|
+
});
|
|
27
|
+
Object.defineProperty(exports, "AppearanceSettings", {
|
|
28
|
+
enumerable: true,
|
|
29
|
+
get: function () { return chunk3FSXWVHW_cjs.AppearanceSettings; }
|
|
3557
30
|
});
|
|
3558
31
|
Object.defineProperty(exports, "AvatarPicker", {
|
|
3559
32
|
enumerable: true,
|
|
3560
|
-
get: function () { return
|
|
33
|
+
get: function () { return chunk3FSXWVHW_cjs.AvatarPicker; }
|
|
34
|
+
});
|
|
35
|
+
Object.defineProperty(exports, "CONVERSATION_TITLE_MAX", {
|
|
36
|
+
enumerable: true,
|
|
37
|
+
get: function () { return chunk3FSXWVHW_cjs.CONVERSATION_TITLE_MAX; }
|
|
38
|
+
});
|
|
39
|
+
Object.defineProperty(exports, "CheckoutDialogFrame", {
|
|
40
|
+
enumerable: true,
|
|
41
|
+
get: function () { return chunk3FSXWVHW_cjs.CheckoutDialogFrame; }
|
|
42
|
+
});
|
|
43
|
+
Object.defineProperty(exports, "ConfigSwitcherBar", {
|
|
44
|
+
enumerable: true,
|
|
45
|
+
get: function () { return chunk3FSXWVHW_cjs.ConfigSwitcherBar; }
|
|
46
|
+
});
|
|
47
|
+
Object.defineProperty(exports, "ConnectionCard", {
|
|
48
|
+
enumerable: true,
|
|
49
|
+
get: function () { return chunk3FSXWVHW_cjs.ConnectionCard; }
|
|
50
|
+
});
|
|
51
|
+
Object.defineProperty(exports, "ConnectionsEmpty", {
|
|
52
|
+
enumerable: true,
|
|
53
|
+
get: function () { return chunk3FSXWVHW_cjs.ConnectionsEmpty; }
|
|
54
|
+
});
|
|
55
|
+
Object.defineProperty(exports, "ConnectionsError", {
|
|
56
|
+
enumerable: true,
|
|
57
|
+
get: function () { return chunk3FSXWVHW_cjs.ConnectionsError; }
|
|
58
|
+
});
|
|
59
|
+
Object.defineProperty(exports, "ConnectionsLoading", {
|
|
60
|
+
enumerable: true,
|
|
61
|
+
get: function () { return chunk3FSXWVHW_cjs.ConnectionsLoading; }
|
|
62
|
+
});
|
|
63
|
+
Object.defineProperty(exports, "ConversationTitleSection", {
|
|
64
|
+
enumerable: true,
|
|
65
|
+
get: function () { return chunk3FSXWVHW_cjs.ConversationTitleSection; }
|
|
3561
66
|
});
|
|
3562
67
|
Object.defineProperty(exports, "DEFAULT_ACTIVE_SESSIONS_DIALOG_LABELS", {
|
|
3563
68
|
enumerable: true,
|
|
3564
|
-
get: function () { return
|
|
69
|
+
get: function () { return chunk3FSXWVHW_cjs.DEFAULT_ACTIVE_SESSIONS_DIALOG_LABELS; }
|
|
70
|
+
});
|
|
71
|
+
Object.defineProperty(exports, "DEFAULT_APPEARANCE_PAIRING_IDS", {
|
|
72
|
+
enumerable: true,
|
|
73
|
+
get: function () { return chunk3FSXWVHW_cjs.DEFAULT_APPEARANCE_PAIRING_IDS; }
|
|
3565
74
|
});
|
|
3566
75
|
Object.defineProperty(exports, "DEFAULT_AVATAR_PICKER_LABELS", {
|
|
3567
76
|
enumerable: true,
|
|
3568
|
-
get: function () { return
|
|
77
|
+
get: function () { return chunk3FSXWVHW_cjs.DEFAULT_AVATAR_PICKER_LABELS; }
|
|
78
|
+
});
|
|
79
|
+
Object.defineProperty(exports, "DEFAULT_CHECKOUT_DIALOG_LABELS", {
|
|
80
|
+
enumerable: true,
|
|
81
|
+
get: function () { return chunk3FSXWVHW_cjs.DEFAULT_CHECKOUT_DIALOG_LABELS; }
|
|
82
|
+
});
|
|
83
|
+
Object.defineProperty(exports, "DEFAULT_CONFIG_SWITCHER_BAR_LABELS", {
|
|
84
|
+
enumerable: true,
|
|
85
|
+
get: function () { return chunk3FSXWVHW_cjs.DEFAULT_CONFIG_SWITCHER_BAR_LABELS; }
|
|
86
|
+
});
|
|
87
|
+
Object.defineProperty(exports, "DEFAULT_CONNECTION_CARD_LABELS", {
|
|
88
|
+
enumerable: true,
|
|
89
|
+
get: function () { return chunk3FSXWVHW_cjs.DEFAULT_CONNECTION_CARD_LABELS; }
|
|
90
|
+
});
|
|
91
|
+
Object.defineProperty(exports, "DEFAULT_CONVERSATION_TITLE_SECTION_LABELS", {
|
|
92
|
+
enumerable: true,
|
|
93
|
+
get: function () { return chunk3FSXWVHW_cjs.DEFAULT_CONVERSATION_TITLE_SECTION_LABELS; }
|
|
94
|
+
});
|
|
95
|
+
Object.defineProperty(exports, "DEFAULT_DAILY_CAP_FIELD_LABELS", {
|
|
96
|
+
enumerable: true,
|
|
97
|
+
get: function () { return chunk3FSXWVHW_cjs.DEFAULT_DAILY_CAP_FIELD_LABELS; }
|
|
3569
98
|
});
|
|
3570
99
|
Object.defineProperty(exports, "DEFAULT_DELETE_ACCOUNT_DIALOG_LABELS", {
|
|
3571
100
|
enumerable: true,
|
|
3572
|
-
get: function () { return
|
|
101
|
+
get: function () { return chunk3FSXWVHW_cjs.DEFAULT_DELETE_ACCOUNT_DIALOG_LABELS; }
|
|
102
|
+
});
|
|
103
|
+
Object.defineProperty(exports, "DEFAULT_EMAIL_WORKSPACE_DIALOG_LABELS", {
|
|
104
|
+
enumerable: true,
|
|
105
|
+
get: function () { return chunk3FSXWVHW_cjs.DEFAULT_EMAIL_WORKSPACE_DIALOG_LABELS; }
|
|
106
|
+
});
|
|
107
|
+
Object.defineProperty(exports, "DEFAULT_ERROR_DIALOG_LABELS", {
|
|
108
|
+
enumerable: true,
|
|
109
|
+
get: function () { return chunk3FSXWVHW_cjs.DEFAULT_ERROR_DIALOG_LABELS; }
|
|
3573
110
|
});
|
|
3574
111
|
Object.defineProperty(exports, "DEFAULT_IDENTITY_VERIFICATION_LABELS", {
|
|
3575
112
|
enumerable: true,
|
|
3576
|
-
get: function () { return
|
|
113
|
+
get: function () { return chunk3FSXWVHW_cjs.DEFAULT_IDENTITY_VERIFICATION_LABELS; }
|
|
114
|
+
});
|
|
115
|
+
Object.defineProperty(exports, "DEFAULT_INVITE_CONTACTS_DIALOG_LABELS", {
|
|
116
|
+
enumerable: true,
|
|
117
|
+
get: function () { return chunk3FSXWVHW_cjs.DEFAULT_INVITE_CONTACTS_DIALOG_LABELS; }
|
|
118
|
+
});
|
|
119
|
+
Object.defineProperty(exports, "DEFAULT_INVOICES_DIALOG_LABELS", {
|
|
120
|
+
enumerable: true,
|
|
121
|
+
get: function () { return chunk3FSXWVHW_cjs.DEFAULT_INVOICES_DIALOG_LABELS; }
|
|
3577
122
|
});
|
|
3578
123
|
Object.defineProperty(exports, "DEFAULT_LOGOUT_DIALOG_LABELS", {
|
|
3579
124
|
enumerable: true,
|
|
3580
|
-
get: function () { return
|
|
125
|
+
get: function () { return chunk3FSXWVHW_cjs.DEFAULT_LOGOUT_DIALOG_LABELS; }
|
|
126
|
+
});
|
|
127
|
+
Object.defineProperty(exports, "DEFAULT_MODEL_SELECTION_SECTION_LABELS", {
|
|
128
|
+
enumerable: true,
|
|
129
|
+
get: function () { return chunk3FSXWVHW_cjs.DEFAULT_MODEL_SELECTION_SECTION_LABELS; }
|
|
3581
130
|
});
|
|
3582
131
|
Object.defineProperty(exports, "DEFAULT_PASSWORD_CHANGE_DIALOG_LABELS", {
|
|
3583
132
|
enumerable: true,
|
|
3584
|
-
get: function () { return
|
|
133
|
+
get: function () { return chunk3FSXWVHW_cjs.DEFAULT_PASSWORD_CHANGE_DIALOG_LABELS; }
|
|
134
|
+
});
|
|
135
|
+
Object.defineProperty(exports, "DEFAULT_PLAN_CARD_LABELS", {
|
|
136
|
+
enumerable: true,
|
|
137
|
+
get: function () { return chunk3FSXWVHW_cjs.DEFAULT_PLAN_CARD_LABELS; }
|
|
3585
138
|
});
|
|
3586
139
|
Object.defineProperty(exports, "DEFAULT_PROFILE_CARD_LABELS", {
|
|
3587
140
|
enumerable: true,
|
|
3588
|
-
get: function () { return
|
|
141
|
+
get: function () { return chunk3FSXWVHW_cjs.DEFAULT_PROFILE_CARD_LABELS; }
|
|
142
|
+
});
|
|
143
|
+
Object.defineProperty(exports, "DEFAULT_PROJECT_DETAIL_HEADER_LABELS", {
|
|
144
|
+
enumerable: true,
|
|
145
|
+
get: function () { return chunk3FSXWVHW_cjs.DEFAULT_PROJECT_DETAIL_HEADER_LABELS; }
|
|
146
|
+
});
|
|
147
|
+
Object.defineProperty(exports, "DEFAULT_PROJECT_LIST_LABELS", {
|
|
148
|
+
enumerable: true,
|
|
149
|
+
get: function () { return chunk3FSXWVHW_cjs.DEFAULT_PROJECT_LIST_LABELS; }
|
|
150
|
+
});
|
|
151
|
+
Object.defineProperty(exports, "DEFAULT_QUOTA_EXCEEDED_DIALOG_LABELS", {
|
|
152
|
+
enumerable: true,
|
|
153
|
+
get: function () { return chunk3FSXWVHW_cjs.DEFAULT_QUOTA_EXCEEDED_DIALOG_LABELS; }
|
|
154
|
+
});
|
|
155
|
+
Object.defineProperty(exports, "DEFAULT_REFERRAL_REWARD_LABELS", {
|
|
156
|
+
enumerable: true,
|
|
157
|
+
get: function () { return chunk3FSXWVHW_cjs.DEFAULT_REFERRAL_REWARD_LABELS; }
|
|
158
|
+
});
|
|
159
|
+
Object.defineProperty(exports, "DEFAULT_RENAME_DIALOG_LABELS", {
|
|
160
|
+
enumerable: true,
|
|
161
|
+
get: function () { return chunk3FSXWVHW_cjs.DEFAULT_RENAME_DIALOG_LABELS; }
|
|
3589
162
|
});
|
|
3590
163
|
Object.defineProperty(exports, "DEFAULT_SETTINGS_DANGER_ZONE_LABELS", {
|
|
3591
164
|
enumerable: true,
|
|
3592
|
-
get: function () { return
|
|
165
|
+
get: function () { return chunk3FSXWVHW_cjs.DEFAULT_SETTINGS_DANGER_ZONE_LABELS; }
|
|
166
|
+
});
|
|
167
|
+
Object.defineProperty(exports, "DEFAULT_SHARED_PROJECTS_SECTION_LABELS", {
|
|
168
|
+
enumerable: true,
|
|
169
|
+
get: function () { return chunk3FSXWVHW_cjs.DEFAULT_SHARED_PROJECTS_SECTION_LABELS; }
|
|
170
|
+
});
|
|
171
|
+
Object.defineProperty(exports, "DEFAULT_SUBSCRIPTION_STATUS_LABELS", {
|
|
172
|
+
enumerable: true,
|
|
173
|
+
get: function () { return chunk3FSXWVHW_cjs.DEFAULT_SUBSCRIPTION_STATUS_LABELS; }
|
|
174
|
+
});
|
|
175
|
+
Object.defineProperty(exports, "DEFAULT_SUPPORT_PANEL_LABELS", {
|
|
176
|
+
enumerable: true,
|
|
177
|
+
get: function () { return chunk3FSXWVHW_cjs.DEFAULT_SUPPORT_PANEL_LABELS; }
|
|
178
|
+
});
|
|
179
|
+
Object.defineProperty(exports, "DEFAULT_SYNC_DIALOG_FOOTER_LABELS", {
|
|
180
|
+
enumerable: true,
|
|
181
|
+
get: function () { return chunk3FSXWVHW_cjs.DEFAULT_SYNC_DIALOG_FOOTER_LABELS; }
|
|
182
|
+
});
|
|
183
|
+
Object.defineProperty(exports, "DEFAULT_SYNC_FOLDER_ROW_LABELS", {
|
|
184
|
+
enumerable: true,
|
|
185
|
+
get: function () { return chunk3FSXWVHW_cjs.DEFAULT_SYNC_FOLDER_ROW_LABELS; }
|
|
186
|
+
});
|
|
187
|
+
Object.defineProperty(exports, "DEFAULT_TIPS_EDITOR_LABELS", {
|
|
188
|
+
enumerable: true,
|
|
189
|
+
get: function () { return chunk3FSXWVHW_cjs.DEFAULT_TIPS_EDITOR_LABELS; }
|
|
190
|
+
});
|
|
191
|
+
Object.defineProperty(exports, "DEFAULT_USAGE_LINE_CHART_LABELS", {
|
|
192
|
+
enumerable: true,
|
|
193
|
+
get: function () { return chunk3FSXWVHW_cjs.DEFAULT_USAGE_LINE_CHART_LABELS; }
|
|
194
|
+
});
|
|
195
|
+
Object.defineProperty(exports, "DEFAULT_USAGE_PANEL_LABELS", {
|
|
196
|
+
enumerable: true,
|
|
197
|
+
get: function () { return chunk3FSXWVHW_cjs.DEFAULT_USAGE_PANEL_LABELS; }
|
|
198
|
+
});
|
|
199
|
+
Object.defineProperty(exports, "DEFAULT_USAGE_PROPORTION_BAR_LABELS", {
|
|
200
|
+
enumerable: true,
|
|
201
|
+
get: function () { return chunk3FSXWVHW_cjs.DEFAULT_USAGE_PROPORTION_BAR_LABELS; }
|
|
202
|
+
});
|
|
203
|
+
Object.defineProperty(exports, "DEFAULT_WELCOME_DIALOG_LABELS", {
|
|
204
|
+
enumerable: true,
|
|
205
|
+
get: function () { return chunk3FSXWVHW_cjs.DEFAULT_WELCOME_DIALOG_LABELS; }
|
|
3593
206
|
});
|
|
3594
207
|
Object.defineProperty(exports, "DEFAULT_WORK_OFFLINE_LABELS", {
|
|
3595
208
|
enumerable: true,
|
|
3596
|
-
get: function () { return
|
|
209
|
+
get: function () { return chunk3FSXWVHW_cjs.DEFAULT_WORK_OFFLINE_LABELS; }
|
|
210
|
+
});
|
|
211
|
+
Object.defineProperty(exports, "DailyCapField", {
|
|
212
|
+
enumerable: true,
|
|
213
|
+
get: function () { return chunk3FSXWVHW_cjs.DailyCapField; }
|
|
3597
214
|
});
|
|
3598
215
|
Object.defineProperty(exports, "DeleteAccountDialog", {
|
|
3599
216
|
enumerable: true,
|
|
3600
|
-
get: function () { return
|
|
217
|
+
get: function () { return chunk3FSXWVHW_cjs.DeleteAccountDialog; }
|
|
3601
218
|
});
|
|
3602
219
|
Object.defineProperty(exports, "DraggableHeader", {
|
|
3603
220
|
enumerable: true,
|
|
3604
|
-
get: function () { return
|
|
221
|
+
get: function () { return chunk3FSXWVHW_cjs.DraggableHeader; }
|
|
3605
222
|
});
|
|
3606
223
|
Object.defineProperty(exports, "EMAIL_NOTIFICATION_CATEGORIES", {
|
|
3607
224
|
enumerable: true,
|
|
3608
|
-
get: function () { return
|
|
225
|
+
get: function () { return chunk3FSXWVHW_cjs.EMAIL_NOTIFICATION_CATEGORIES; }
|
|
3609
226
|
});
|
|
3610
227
|
Object.defineProperty(exports, "EMAIL_NOTIFICATION_KEYS", {
|
|
3611
228
|
enumerable: true,
|
|
3612
|
-
get: function () { return
|
|
229
|
+
get: function () { return chunk3FSXWVHW_cjs.EMAIL_NOTIFICATION_KEYS; }
|
|
230
|
+
});
|
|
231
|
+
Object.defineProperty(exports, "EmailWorkspaceDialogView", {
|
|
232
|
+
enumerable: true,
|
|
233
|
+
get: function () { return chunk3FSXWVHW_cjs.EmailWorkspaceDialogView; }
|
|
234
|
+
});
|
|
235
|
+
Object.defineProperty(exports, "ErrorDialogView", {
|
|
236
|
+
enumerable: true,
|
|
237
|
+
get: function () { return chunk3FSXWVHW_cjs.ErrorDialogView; }
|
|
238
|
+
});
|
|
239
|
+
Object.defineProperty(exports, "FilterChip", {
|
|
240
|
+
enumerable: true,
|
|
241
|
+
get: function () { return chunk3FSXWVHW_cjs.FilterChip; }
|
|
242
|
+
});
|
|
243
|
+
Object.defineProperty(exports, "FloatingPanel", {
|
|
244
|
+
enumerable: true,
|
|
245
|
+
get: function () { return chunk3FSXWVHW_cjs.FloatingPanel; }
|
|
3613
246
|
});
|
|
3614
247
|
Object.defineProperty(exports, "IdentityVerificationCard", {
|
|
3615
248
|
enumerable: true,
|
|
3616
|
-
get: function () { return
|
|
249
|
+
get: function () { return chunk3FSXWVHW_cjs.IdentityVerificationCard; }
|
|
3617
250
|
});
|
|
3618
251
|
Object.defineProperty(exports, "IdentityVerificationDialog", {
|
|
3619
252
|
enumerable: true,
|
|
3620
|
-
get: function () { return
|
|
253
|
+
get: function () { return chunk3FSXWVHW_cjs.IdentityVerificationDialog; }
|
|
254
|
+
});
|
|
255
|
+
Object.defineProperty(exports, "InviteContactsDialog", {
|
|
256
|
+
enumerable: true,
|
|
257
|
+
get: function () { return chunk3FSXWVHW_cjs.InviteContactsDialog; }
|
|
258
|
+
});
|
|
259
|
+
Object.defineProperty(exports, "InvoicesDialog", {
|
|
260
|
+
enumerable: true,
|
|
261
|
+
get: function () { return chunk3FSXWVHW_cjs.InvoicesDialog; }
|
|
262
|
+
});
|
|
263
|
+
Object.defineProperty(exports, "JsonTree", {
|
|
264
|
+
enumerable: true,
|
|
265
|
+
get: function () { return chunk3FSXWVHW_cjs.JsonTree; }
|
|
3621
266
|
});
|
|
3622
267
|
Object.defineProperty(exports, "LogoutDialog", {
|
|
3623
268
|
enumerable: true,
|
|
3624
|
-
get: function () { return
|
|
269
|
+
get: function () { return chunk3FSXWVHW_cjs.LogoutDialog; }
|
|
270
|
+
});
|
|
271
|
+
Object.defineProperty(exports, "MessageJsonTree", {
|
|
272
|
+
enumerable: true,
|
|
273
|
+
get: function () { return chunk3FSXWVHW_cjs.MessageJsonTree; }
|
|
3625
274
|
});
|
|
3626
275
|
Object.defineProperty(exports, "ModelProviderLabel", {
|
|
3627
276
|
enumerable: true,
|
|
3628
|
-
get: function () { return
|
|
277
|
+
get: function () { return chunk3FSXWVHW_cjs.ModelProviderLabel; }
|
|
278
|
+
});
|
|
279
|
+
Object.defineProperty(exports, "ModelSelectionSection", {
|
|
280
|
+
enumerable: true,
|
|
281
|
+
get: function () { return chunk3FSXWVHW_cjs.ModelSelectionSection; }
|
|
282
|
+
});
|
|
283
|
+
Object.defineProperty(exports, "MoreInfo", {
|
|
284
|
+
enumerable: true,
|
|
285
|
+
get: function () { return chunk3FSXWVHW_cjs.MoreInfo; }
|
|
286
|
+
});
|
|
287
|
+
Object.defineProperty(exports, "MoreInfoList", {
|
|
288
|
+
enumerable: true,
|
|
289
|
+
get: function () { return chunk3FSXWVHW_cjs.MoreInfoList; }
|
|
3629
290
|
});
|
|
3630
291
|
Object.defineProperty(exports, "NotificationCategoryList", {
|
|
3631
292
|
enumerable: true,
|
|
3632
|
-
get: function () { return
|
|
293
|
+
get: function () { return chunk3FSXWVHW_cjs.NotificationCategoryList; }
|
|
3633
294
|
});
|
|
3634
295
|
Object.defineProperty(exports, "PanelActionsRow", {
|
|
3635
296
|
enumerable: true,
|
|
3636
|
-
get: function () { return
|
|
297
|
+
get: function () { return chunk3FSXWVHW_cjs.PanelActionsRow; }
|
|
3637
298
|
});
|
|
3638
299
|
Object.defineProperty(exports, "PanelAddButton", {
|
|
3639
300
|
enumerable: true,
|
|
3640
|
-
get: function () { return
|
|
301
|
+
get: function () { return chunk3FSXWVHW_cjs.PanelAddButton; }
|
|
3641
302
|
});
|
|
3642
303
|
Object.defineProperty(exports, "PanelFrame", {
|
|
3643
304
|
enumerable: true,
|
|
3644
|
-
get: function () { return
|
|
305
|
+
get: function () { return chunk3FSXWVHW_cjs.PanelFrame; }
|
|
3645
306
|
});
|
|
3646
307
|
Object.defineProperty(exports, "PanelFrameBody", {
|
|
3647
308
|
enumerable: true,
|
|
3648
|
-
get: function () { return
|
|
309
|
+
get: function () { return chunk3FSXWVHW_cjs.PanelFrameBody; }
|
|
3649
310
|
});
|
|
3650
311
|
Object.defineProperty(exports, "PanelNote", {
|
|
3651
312
|
enumerable: true,
|
|
3652
|
-
get: function () { return
|
|
313
|
+
get: function () { return chunk3FSXWVHW_cjs.PanelNote; }
|
|
3653
314
|
});
|
|
3654
315
|
Object.defineProperty(exports, "PanelScroll", {
|
|
3655
316
|
enumerable: true,
|
|
3656
|
-
get: function () { return
|
|
317
|
+
get: function () { return chunk3FSXWVHW_cjs.PanelScroll; }
|
|
3657
318
|
});
|
|
3658
319
|
Object.defineProperty(exports, "PanelTitleBar", {
|
|
3659
320
|
enumerable: true,
|
|
3660
|
-
get: function () { return
|
|
321
|
+
get: function () { return chunk3FSXWVHW_cjs.PanelTitleBar; }
|
|
3661
322
|
});
|
|
3662
323
|
Object.defineProperty(exports, "PasswordChangeDialog", {
|
|
3663
324
|
enumerable: true,
|
|
3664
|
-
get: function () { return
|
|
325
|
+
get: function () { return chunk3FSXWVHW_cjs.PasswordChangeDialog; }
|
|
326
|
+
});
|
|
327
|
+
Object.defineProperty(exports, "PlanActionButton", {
|
|
328
|
+
enumerable: true,
|
|
329
|
+
get: function () { return chunk3FSXWVHW_cjs.PlanActionButton; }
|
|
330
|
+
});
|
|
331
|
+
Object.defineProperty(exports, "PlanActionRow", {
|
|
332
|
+
enumerable: true,
|
|
333
|
+
get: function () { return chunk3FSXWVHW_cjs.PlanActionRow; }
|
|
334
|
+
});
|
|
335
|
+
Object.defineProperty(exports, "PlanBadge", {
|
|
336
|
+
enumerable: true,
|
|
337
|
+
get: function () { return chunk3FSXWVHW_cjs.PlanBadge; }
|
|
338
|
+
});
|
|
339
|
+
Object.defineProperty(exports, "PlanCard", {
|
|
340
|
+
enumerable: true,
|
|
341
|
+
get: function () { return chunk3FSXWVHW_cjs.PlanCard; }
|
|
342
|
+
});
|
|
343
|
+
Object.defineProperty(exports, "PlanCardGrid", {
|
|
344
|
+
enumerable: true,
|
|
345
|
+
get: function () { return chunk3FSXWVHW_cjs.PlanCardGrid; }
|
|
346
|
+
});
|
|
347
|
+
Object.defineProperty(exports, "PlanDialogFrame", {
|
|
348
|
+
enumerable: true,
|
|
349
|
+
get: function () { return chunk3FSXWVHW_cjs.PlanDialogFrame; }
|
|
350
|
+
});
|
|
351
|
+
Object.defineProperty(exports, "PlanInfoPopover", {
|
|
352
|
+
enumerable: true,
|
|
353
|
+
get: function () { return chunk3FSXWVHW_cjs.PlanInfoPopover; }
|
|
354
|
+
});
|
|
355
|
+
Object.defineProperty(exports, "PlanNotice", {
|
|
356
|
+
enumerable: true,
|
|
357
|
+
get: function () { return chunk3FSXWVHW_cjs.PlanNotice; }
|
|
358
|
+
});
|
|
359
|
+
Object.defineProperty(exports, "PlanPickerCard", {
|
|
360
|
+
enumerable: true,
|
|
361
|
+
get: function () { return chunk3FSXWVHW_cjs.PlanPickerCard; }
|
|
362
|
+
});
|
|
363
|
+
Object.defineProperty(exports, "PlanPickerHeader", {
|
|
364
|
+
enumerable: true,
|
|
365
|
+
get: function () { return chunk3FSXWVHW_cjs.PlanPickerHeader; }
|
|
366
|
+
});
|
|
367
|
+
Object.defineProperty(exports, "PlanStack", {
|
|
368
|
+
enumerable: true,
|
|
369
|
+
get: function () { return chunk3FSXWVHW_cjs.PlanStack; }
|
|
370
|
+
});
|
|
371
|
+
Object.defineProperty(exports, "PlanTierOption", {
|
|
372
|
+
enumerable: true,
|
|
373
|
+
get: function () { return chunk3FSXWVHW_cjs.PlanTierOption; }
|
|
3665
374
|
});
|
|
3666
375
|
Object.defineProperty(exports, "PremiumModelsFrame", {
|
|
3667
376
|
enumerable: true,
|
|
3668
|
-
get: function () { return
|
|
377
|
+
get: function () { return chunk3FSXWVHW_cjs.PremiumModelsFrame; }
|
|
378
|
+
});
|
|
379
|
+
Object.defineProperty(exports, "PricingToggle", {
|
|
380
|
+
enumerable: true,
|
|
381
|
+
get: function () { return chunk3FSXWVHW_cjs.PricingToggle; }
|
|
3669
382
|
});
|
|
3670
383
|
Object.defineProperty(exports, "ProfileCard", {
|
|
3671
384
|
enumerable: true,
|
|
3672
|
-
get: function () { return
|
|
385
|
+
get: function () { return chunk3FSXWVHW_cjs.ProfileCard; }
|
|
386
|
+
});
|
|
387
|
+
Object.defineProperty(exports, "ProjectDetailHeader", {
|
|
388
|
+
enumerable: true,
|
|
389
|
+
get: function () { return chunk3FSXWVHW_cjs.ProjectDetailHeader; }
|
|
390
|
+
});
|
|
391
|
+
Object.defineProperty(exports, "ProjectDetailSection", {
|
|
392
|
+
enumerable: true,
|
|
393
|
+
get: function () { return chunk3FSXWVHW_cjs.ProjectDetailSection; }
|
|
394
|
+
});
|
|
395
|
+
Object.defineProperty(exports, "ProjectGroup", {
|
|
396
|
+
enumerable: true,
|
|
397
|
+
get: function () { return chunk3FSXWVHW_cjs.ProjectGroup; }
|
|
398
|
+
});
|
|
399
|
+
Object.defineProperty(exports, "ProjectList", {
|
|
400
|
+
enumerable: true,
|
|
401
|
+
get: function () { return chunk3FSXWVHW_cjs.ProjectList; }
|
|
402
|
+
});
|
|
403
|
+
Object.defineProperty(exports, "ProjectRow", {
|
|
404
|
+
enumerable: true,
|
|
405
|
+
get: function () { return chunk3FSXWVHW_cjs.ProjectRow; }
|
|
406
|
+
});
|
|
407
|
+
Object.defineProperty(exports, "PromoCodeInput", {
|
|
408
|
+
enumerable: true,
|
|
409
|
+
get: function () { return chunk3FSXWVHW_cjs.PromoCodeInput; }
|
|
410
|
+
});
|
|
411
|
+
Object.defineProperty(exports, "QuotaExceededDialogView", {
|
|
412
|
+
enumerable: true,
|
|
413
|
+
get: function () { return chunk3FSXWVHW_cjs.QuotaExceededDialogView; }
|
|
414
|
+
});
|
|
415
|
+
Object.defineProperty(exports, "QuotaMeter", {
|
|
416
|
+
enumerable: true,
|
|
417
|
+
get: function () { return chunk3FSXWVHW_cjs.QuotaMeter; }
|
|
418
|
+
});
|
|
419
|
+
Object.defineProperty(exports, "ReferralRewardBadge", {
|
|
420
|
+
enumerable: true,
|
|
421
|
+
get: function () { return chunk3FSXWVHW_cjs.ReferralRewardBadge; }
|
|
422
|
+
});
|
|
423
|
+
Object.defineProperty(exports, "ReferralRewardNote", {
|
|
424
|
+
enumerable: true,
|
|
425
|
+
get: function () { return chunk3FSXWVHW_cjs.ReferralRewardNote; }
|
|
426
|
+
});
|
|
427
|
+
Object.defineProperty(exports, "ReferralRewardSummary", {
|
|
428
|
+
enumerable: true,
|
|
429
|
+
get: function () { return chunk3FSXWVHW_cjs.ReferralRewardSummary; }
|
|
430
|
+
});
|
|
431
|
+
Object.defineProperty(exports, "RenameDialog", {
|
|
432
|
+
enumerable: true,
|
|
433
|
+
get: function () { return chunk3FSXWVHW_cjs.RenameDialog; }
|
|
3673
434
|
});
|
|
3674
435
|
Object.defineProperty(exports, "RequireVerified", {
|
|
3675
436
|
enumerable: true,
|
|
3676
|
-
get: function () { return
|
|
437
|
+
get: function () { return chunk3FSXWVHW_cjs.RequireVerified; }
|
|
438
|
+
});
|
|
439
|
+
Object.defineProperty(exports, "SegmentedControl", {
|
|
440
|
+
enumerable: true,
|
|
441
|
+
get: function () { return chunk3FSXWVHW_cjs.SegmentedControl; }
|
|
3677
442
|
});
|
|
3678
443
|
Object.defineProperty(exports, "ServerConnectionButton", {
|
|
3679
444
|
enumerable: true,
|
|
3680
|
-
get: function () { return
|
|
445
|
+
get: function () { return chunk3FSXWVHW_cjs.ServerConnectionButton; }
|
|
3681
446
|
});
|
|
3682
447
|
Object.defineProperty(exports, "SettingsActionRow", {
|
|
3683
448
|
enumerable: true,
|
|
3684
|
-
get: function () { return
|
|
449
|
+
get: function () { return chunk3FSXWVHW_cjs.SettingsActionRow; }
|
|
3685
450
|
});
|
|
3686
451
|
Object.defineProperty(exports, "SettingsCard", {
|
|
3687
452
|
enumerable: true,
|
|
3688
|
-
get: function () { return
|
|
453
|
+
get: function () { return chunk3FSXWVHW_cjs.SettingsCard; }
|
|
3689
454
|
});
|
|
3690
455
|
Object.defineProperty(exports, "SettingsDangerZone", {
|
|
3691
456
|
enumerable: true,
|
|
3692
|
-
get: function () { return
|
|
457
|
+
get: function () { return chunk3FSXWVHW_cjs.SettingsDangerZone; }
|
|
3693
458
|
});
|
|
3694
459
|
Object.defineProperty(exports, "SettingsPage", {
|
|
3695
460
|
enumerable: true,
|
|
3696
|
-
get: function () { return
|
|
461
|
+
get: function () { return chunk3FSXWVHW_cjs.SettingsPage; }
|
|
3697
462
|
});
|
|
3698
463
|
Object.defineProperty(exports, "SettingsPanel", {
|
|
3699
464
|
enumerable: true,
|
|
3700
|
-
get: function () { return
|
|
465
|
+
get: function () { return chunk3FSXWVHW_cjs.SettingsPanel; }
|
|
3701
466
|
});
|
|
3702
467
|
Object.defineProperty(exports, "SettingsRow", {
|
|
3703
468
|
enumerable: true,
|
|
3704
|
-
get: function () { return
|
|
469
|
+
get: function () { return chunk3FSXWVHW_cjs.SettingsRow; }
|
|
3705
470
|
});
|
|
3706
471
|
Object.defineProperty(exports, "SettingsSection", {
|
|
3707
472
|
enumerable: true,
|
|
3708
|
-
get: function () { return
|
|
473
|
+
get: function () { return chunk3FSXWVHW_cjs.SettingsSection; }
|
|
3709
474
|
});
|
|
3710
475
|
Object.defineProperty(exports, "SettingsSwitchGroup", {
|
|
3711
476
|
enumerable: true,
|
|
3712
|
-
get: function () { return
|
|
477
|
+
get: function () { return chunk3FSXWVHW_cjs.SettingsSwitchGroup; }
|
|
3713
478
|
});
|
|
3714
479
|
Object.defineProperty(exports, "SettingsSwitchRow", {
|
|
3715
480
|
enumerable: true,
|
|
3716
|
-
get: function () { return
|
|
481
|
+
get: function () { return chunk3FSXWVHW_cjs.SettingsSwitchRow; }
|
|
482
|
+
});
|
|
483
|
+
Object.defineProperty(exports, "SharedProjectRow", {
|
|
484
|
+
enumerable: true,
|
|
485
|
+
get: function () { return chunk3FSXWVHW_cjs.SharedProjectRow; }
|
|
486
|
+
});
|
|
487
|
+
Object.defineProperty(exports, "SharedProjectsSection", {
|
|
488
|
+
enumerable: true,
|
|
489
|
+
get: function () { return chunk3FSXWVHW_cjs.SharedProjectsSection; }
|
|
490
|
+
});
|
|
491
|
+
Object.defineProperty(exports, "SubscriptionStatusView", {
|
|
492
|
+
enumerable: true,
|
|
493
|
+
get: function () { return chunk3FSXWVHW_cjs.SubscriptionStatusView; }
|
|
494
|
+
});
|
|
495
|
+
Object.defineProperty(exports, "SupportPanel", {
|
|
496
|
+
enumerable: true,
|
|
497
|
+
get: function () { return chunk3FSXWVHW_cjs.SupportPanel; }
|
|
498
|
+
});
|
|
499
|
+
Object.defineProperty(exports, "SupportUnavailable", {
|
|
500
|
+
enumerable: true,
|
|
501
|
+
get: function () { return chunk3FSXWVHW_cjs.SupportUnavailable; }
|
|
502
|
+
});
|
|
503
|
+
Object.defineProperty(exports, "SyncCheckList", {
|
|
504
|
+
enumerable: true,
|
|
505
|
+
get: function () { return chunk3FSXWVHW_cjs.SyncCheckList; }
|
|
506
|
+
});
|
|
507
|
+
Object.defineProperty(exports, "SyncDialogBody", {
|
|
508
|
+
enumerable: true,
|
|
509
|
+
get: function () { return chunk3FSXWVHW_cjs.SyncDialogBody; }
|
|
510
|
+
});
|
|
511
|
+
Object.defineProperty(exports, "SyncDialogFooter", {
|
|
512
|
+
enumerable: true,
|
|
513
|
+
get: function () { return chunk3FSXWVHW_cjs.SyncDialogFooter; }
|
|
514
|
+
});
|
|
515
|
+
Object.defineProperty(exports, "SyncField", {
|
|
516
|
+
enumerable: true,
|
|
517
|
+
get: function () { return chunk3FSXWVHW_cjs.SyncField; }
|
|
518
|
+
});
|
|
519
|
+
Object.defineProperty(exports, "SyncFolderRow", {
|
|
520
|
+
enumerable: true,
|
|
521
|
+
get: function () { return chunk3FSXWVHW_cjs.SyncFolderRow; }
|
|
522
|
+
});
|
|
523
|
+
Object.defineProperty(exports, "SyncFolderStatus", {
|
|
524
|
+
enumerable: true,
|
|
525
|
+
get: function () { return chunk3FSXWVHW_cjs.SyncFolderStatus; }
|
|
526
|
+
});
|
|
527
|
+
Object.defineProperty(exports, "SyncLinkButton", {
|
|
528
|
+
enumerable: true,
|
|
529
|
+
get: function () { return chunk3FSXWVHW_cjs.SyncLinkButton; }
|
|
530
|
+
});
|
|
531
|
+
Object.defineProperty(exports, "SyncLinkRow", {
|
|
532
|
+
enumerable: true,
|
|
533
|
+
get: function () { return chunk3FSXWVHW_cjs.SyncLinkRow; }
|
|
534
|
+
});
|
|
535
|
+
Object.defineProperty(exports, "SyncLoading", {
|
|
536
|
+
enumerable: true,
|
|
537
|
+
get: function () { return chunk3FSXWVHW_cjs.SyncLoading; }
|
|
538
|
+
});
|
|
539
|
+
Object.defineProperty(exports, "SyncNote", {
|
|
540
|
+
enumerable: true,
|
|
541
|
+
get: function () { return chunk3FSXWVHW_cjs.SyncNote; }
|
|
542
|
+
});
|
|
543
|
+
Object.defineProperty(exports, "SyncOptionToggle", {
|
|
544
|
+
enumerable: true,
|
|
545
|
+
get: function () { return chunk3FSXWVHW_cjs.SyncOptionToggle; }
|
|
546
|
+
});
|
|
547
|
+
Object.defineProperty(exports, "SyncOptions", {
|
|
548
|
+
enumerable: true,
|
|
549
|
+
get: function () { return chunk3FSXWVHW_cjs.SyncOptions; }
|
|
550
|
+
});
|
|
551
|
+
Object.defineProperty(exports, "SyncReconnectNotice", {
|
|
552
|
+
enumerable: true,
|
|
553
|
+
get: function () { return chunk3FSXWVHW_cjs.SyncReconnectNotice; }
|
|
554
|
+
});
|
|
555
|
+
Object.defineProperty(exports, "SyncSelect", {
|
|
556
|
+
enumerable: true,
|
|
557
|
+
get: function () { return chunk3FSXWVHW_cjs.SyncSelect; }
|
|
558
|
+
});
|
|
559
|
+
Object.defineProperty(exports, "SyncSmallNote", {
|
|
560
|
+
enumerable: true,
|
|
561
|
+
get: function () { return chunk3FSXWVHW_cjs.SyncSmallNote; }
|
|
562
|
+
});
|
|
563
|
+
Object.defineProperty(exports, "SyncTreeFrame", {
|
|
564
|
+
enumerable: true,
|
|
565
|
+
get: function () { return chunk3FSXWVHW_cjs.SyncTreeFrame; }
|
|
566
|
+
});
|
|
567
|
+
Object.defineProperty(exports, "ThreadPreviewDialog", {
|
|
568
|
+
enumerable: true,
|
|
569
|
+
get: function () { return chunk3FSXWVHW_cjs.ThreadPreviewDialog; }
|
|
570
|
+
});
|
|
571
|
+
Object.defineProperty(exports, "TipsEditorDialog", {
|
|
572
|
+
enumerable: true,
|
|
573
|
+
get: function () { return chunk3FSXWVHW_cjs.TipsEditorDialog; }
|
|
574
|
+
});
|
|
575
|
+
Object.defineProperty(exports, "UsageActionButton", {
|
|
576
|
+
enumerable: true,
|
|
577
|
+
get: function () { return chunk3FSXWVHW_cjs.UsageActionButton; }
|
|
578
|
+
});
|
|
579
|
+
Object.defineProperty(exports, "UsageLegend", {
|
|
580
|
+
enumerable: true,
|
|
581
|
+
get: function () { return chunk3FSXWVHW_cjs.UsageLegend; }
|
|
582
|
+
});
|
|
583
|
+
Object.defineProperty(exports, "UsageLineChart", {
|
|
584
|
+
enumerable: true,
|
|
585
|
+
get: function () { return chunk3FSXWVHW_cjs.UsageLineChart; }
|
|
586
|
+
});
|
|
587
|
+
Object.defineProperty(exports, "UsagePanel", {
|
|
588
|
+
enumerable: true,
|
|
589
|
+
get: function () { return chunk3FSXWVHW_cjs.UsagePanel; }
|
|
590
|
+
});
|
|
591
|
+
Object.defineProperty(exports, "UsageProportionBar", {
|
|
592
|
+
enumerable: true,
|
|
593
|
+
get: function () { return chunk3FSXWVHW_cjs.UsageProportionBar; }
|
|
594
|
+
});
|
|
595
|
+
Object.defineProperty(exports, "UsageQuotaHint", {
|
|
596
|
+
enumerable: true,
|
|
597
|
+
get: function () { return chunk3FSXWVHW_cjs.UsageQuotaHint; }
|
|
598
|
+
});
|
|
599
|
+
Object.defineProperty(exports, "UsageSection", {
|
|
600
|
+
enumerable: true,
|
|
601
|
+
get: function () { return chunk3FSXWVHW_cjs.UsageSection; }
|
|
602
|
+
});
|
|
603
|
+
Object.defineProperty(exports, "UsageSummary", {
|
|
604
|
+
enumerable: true,
|
|
605
|
+
get: function () { return chunk3FSXWVHW_cjs.UsageSummary; }
|
|
606
|
+
});
|
|
607
|
+
Object.defineProperty(exports, "UsageToggle", {
|
|
608
|
+
enumerable: true,
|
|
609
|
+
get: function () { return chunk3FSXWVHW_cjs.UsageToggle; }
|
|
610
|
+
});
|
|
611
|
+
Object.defineProperty(exports, "WelcomeDialog", {
|
|
612
|
+
enumerable: true,
|
|
613
|
+
get: function () { return chunk3FSXWVHW_cjs.WelcomeDialog; }
|
|
614
|
+
});
|
|
615
|
+
Object.defineProperty(exports, "WelcomeProjectPicker", {
|
|
616
|
+
enumerable: true,
|
|
617
|
+
get: function () { return chunk3FSXWVHW_cjs.WelcomeProjectPicker; }
|
|
3717
618
|
});
|
|
3718
619
|
Object.defineProperty(exports, "WorkOfflineToggle", {
|
|
3719
620
|
enumerable: true,
|
|
3720
|
-
get: function () { return
|
|
621
|
+
get: function () { return chunk3FSXWVHW_cjs.WorkOfflineToggle; }
|
|
622
|
+
});
|
|
623
|
+
Object.defineProperty(exports, "applyInvertedIndexFilter", {
|
|
624
|
+
enumerable: true,
|
|
625
|
+
get: function () { return chunk3FSXWVHW_cjs.applyInvertedIndexFilter; }
|
|
626
|
+
});
|
|
627
|
+
Object.defineProperty(exports, "buildInvertedIndex", {
|
|
628
|
+
enumerable: true,
|
|
629
|
+
get: function () { return chunk3FSXWVHW_cjs.buildInvertedIndex; }
|
|
3721
630
|
});
|
|
3722
631
|
Object.defineProperty(exports, "formatSessionTtl", {
|
|
3723
632
|
enumerable: true,
|
|
3724
|
-
get: function () { return
|
|
633
|
+
get: function () { return chunk3FSXWVHW_cjs.formatSessionTtl; }
|
|
3725
634
|
});
|
|
3726
635
|
Object.defineProperty(exports, "resolveSettingsSection", {
|
|
3727
636
|
enumerable: true,
|
|
3728
|
-
get: function () { return
|
|
637
|
+
get: function () { return chunk3FSXWVHW_cjs.resolveSettingsSection; }
|
|
3729
638
|
});
|
|
3730
639
|
Object.defineProperty(exports, "serverConnectionView", {
|
|
3731
640
|
enumerable: true,
|
|
3732
|
-
get: function () { return
|
|
641
|
+
get: function () { return chunk3FSXWVHW_cjs.serverConnectionView; }
|
|
3733
642
|
});
|
|
3734
643
|
Object.defineProperty(exports, "toActiveSessionViews", {
|
|
3735
644
|
enumerable: true,
|
|
3736
|
-
get: function () { return
|
|
645
|
+
get: function () { return chunk3FSXWVHW_cjs.toActiveSessionViews; }
|
|
3737
646
|
});
|
|
3738
647
|
Object.defineProperty(exports, "toDeleteBlockerViews", {
|
|
3739
648
|
enumerable: true,
|
|
3740
|
-
get: function () { return
|
|
649
|
+
get: function () { return chunk3FSXWVHW_cjs.toDeleteBlockerViews; }
|
|
3741
650
|
});
|
|
3742
651
|
Object.defineProperty(exports, "toLogoutSessionViews", {
|
|
3743
652
|
enumerable: true,
|
|
3744
|
-
get: function () { return
|
|
653
|
+
get: function () { return chunk3FSXWVHW_cjs.toLogoutSessionViews; }
|
|
3745
654
|
});
|
|
3746
655
|
Object.defineProperty(exports, "toNotificationCategories", {
|
|
3747
656
|
enumerable: true,
|
|
3748
|
-
get: function () { return
|
|
657
|
+
get: function () { return chunk3FSXWVHW_cjs.toNotificationCategories; }
|
|
3749
658
|
});
|
|
3750
659
|
Object.defineProperty(exports, "ModalBreadcrumbHeader", {
|
|
3751
660
|
enumerable: true,
|
|
@@ -3777,11 +686,11 @@ Object.defineProperty(exports, "TriStateFilterMenu", {
|
|
|
3777
686
|
});
|
|
3778
687
|
Object.defineProperty(exports, "ConfirmDialog", {
|
|
3779
688
|
enumerable: true,
|
|
3780
|
-
get: function () { return
|
|
689
|
+
get: function () { return chunkZAVEMQ37_cjs.ConfirmDialog; }
|
|
3781
690
|
});
|
|
3782
691
|
Object.defineProperty(exports, "DEFAULT_CONFIRM_DIALOG_LABELS", {
|
|
3783
692
|
enumerable: true,
|
|
3784
|
-
get: function () { return
|
|
693
|
+
get: function () { return chunkZAVEMQ37_cjs.DEFAULT_CONFIRM_DIALOG_LABELS; }
|
|
3785
694
|
});
|
|
3786
695
|
Object.defineProperty(exports, "MODAL_SECTION_TITLE_CLASS", {
|
|
3787
696
|
enumerable: true,
|
|
@@ -3803,127 +712,5 @@ Object.defineProperty(exports, "ModalSectionTitle", {
|
|
|
3803
712
|
enumerable: true,
|
|
3804
713
|
get: function () { return chunkULWRNGGE_cjs.ModalSectionTitle; }
|
|
3805
714
|
});
|
|
3806
|
-
exports.AppearanceSettings = AppearanceSettings;
|
|
3807
|
-
exports.CONVERSATION_TITLE_MAX = CONVERSATION_TITLE_MAX;
|
|
3808
|
-
exports.CheckoutDialogFrame = CheckoutDialogFrame;
|
|
3809
|
-
exports.ConfigSwitcherBar = ConfigSwitcherBar;
|
|
3810
|
-
exports.ConnectionCard = ConnectionCard;
|
|
3811
|
-
exports.ConnectionsEmpty = ConnectionsEmpty;
|
|
3812
|
-
exports.ConnectionsError = ConnectionsError;
|
|
3813
|
-
exports.ConnectionsLoading = ConnectionsLoading;
|
|
3814
|
-
exports.ConversationTitleSection = ConversationTitleSection;
|
|
3815
|
-
exports.DEFAULT_APPEARANCE_PAIRING_IDS = DEFAULT_APPEARANCE_PAIRING_IDS;
|
|
3816
|
-
exports.DEFAULT_CHECKOUT_DIALOG_LABELS = DEFAULT_CHECKOUT_DIALOG_LABELS;
|
|
3817
|
-
exports.DEFAULT_CONFIG_SWITCHER_BAR_LABELS = DEFAULT_CONFIG_SWITCHER_BAR_LABELS;
|
|
3818
|
-
exports.DEFAULT_CONNECTION_CARD_LABELS = DEFAULT_CONNECTION_CARD_LABELS;
|
|
3819
|
-
exports.DEFAULT_CONVERSATION_TITLE_SECTION_LABELS = DEFAULT_CONVERSATION_TITLE_SECTION_LABELS;
|
|
3820
|
-
exports.DEFAULT_DAILY_CAP_FIELD_LABELS = DEFAULT_DAILY_CAP_FIELD_LABELS;
|
|
3821
|
-
exports.DEFAULT_EMAIL_WORKSPACE_DIALOG_LABELS = DEFAULT_EMAIL_WORKSPACE_DIALOG_LABELS;
|
|
3822
|
-
exports.DEFAULT_ERROR_DIALOG_LABELS = DEFAULT_ERROR_DIALOG_LABELS;
|
|
3823
|
-
exports.DEFAULT_INLINE_NAME_EDITOR_LABELS = DEFAULT_INLINE_NAME_EDITOR_LABELS;
|
|
3824
|
-
exports.DEFAULT_INVITE_CONTACTS_DIALOG_LABELS = DEFAULT_INVITE_CONTACTS_DIALOG_LABELS;
|
|
3825
|
-
exports.DEFAULT_INVOICES_DIALOG_LABELS = DEFAULT_INVOICES_DIALOG_LABELS;
|
|
3826
|
-
exports.DEFAULT_MEMBER_PROJECT_ROW_LABELS = DEFAULT_MEMBER_PROJECT_ROW_LABELS;
|
|
3827
|
-
exports.DEFAULT_MODEL_SELECTION_SECTION_LABELS = DEFAULT_MODEL_SELECTION_SECTION_LABELS;
|
|
3828
|
-
exports.DEFAULT_PLAN_CARD_LABELS = DEFAULT_PLAN_CARD_LABELS;
|
|
3829
|
-
exports.DEFAULT_PROJECT_CARD_VIEW_LABELS = DEFAULT_PROJECT_CARD_VIEW_LABELS;
|
|
3830
|
-
exports.DEFAULT_PROJECT_DETAIL_HEADER_LABELS = DEFAULT_PROJECT_DETAIL_HEADER_LABELS;
|
|
3831
|
-
exports.DEFAULT_PROJECT_LIST_LABELS = DEFAULT_PROJECT_LIST_LABELS;
|
|
3832
|
-
exports.DEFAULT_QUOTA_EXCEEDED_DIALOG_LABELS = DEFAULT_QUOTA_EXCEEDED_DIALOG_LABELS;
|
|
3833
|
-
exports.DEFAULT_REFERRAL_REWARD_LABELS = DEFAULT_REFERRAL_REWARD_LABELS;
|
|
3834
|
-
exports.DEFAULT_RENAME_DIALOG_LABELS = DEFAULT_RENAME_DIALOG_LABELS;
|
|
3835
|
-
exports.DEFAULT_SHARED_PROJECTS_SECTION_LABELS = DEFAULT_SHARED_PROJECTS_SECTION_LABELS;
|
|
3836
|
-
exports.DEFAULT_SUBSCRIPTION_SECTION_LABELS = DEFAULT_SUBSCRIPTION_SECTION_LABELS;
|
|
3837
|
-
exports.DEFAULT_SUBSCRIPTION_STATUS_LABELS = DEFAULT_SUBSCRIPTION_STATUS_LABELS;
|
|
3838
|
-
exports.DEFAULT_SUPPORT_PANEL_LABELS = DEFAULT_SUPPORT_PANEL_LABELS;
|
|
3839
|
-
exports.DEFAULT_SYNC_DIALOG_FOOTER_LABELS = DEFAULT_SYNC_DIALOG_FOOTER_LABELS;
|
|
3840
|
-
exports.DEFAULT_SYNC_FOLDER_ROW_LABELS = DEFAULT_SYNC_FOLDER_ROW_LABELS;
|
|
3841
|
-
exports.DEFAULT_TIPS_EDITOR_LABELS = DEFAULT_TIPS_EDITOR_LABELS;
|
|
3842
|
-
exports.DEFAULT_USAGE_LINE_CHART_LABELS = DEFAULT_USAGE_LINE_CHART_LABELS;
|
|
3843
|
-
exports.DEFAULT_USAGE_PANEL_LABELS = DEFAULT_USAGE_PANEL_LABELS;
|
|
3844
|
-
exports.DEFAULT_USAGE_PROPORTION_BAR_LABELS = DEFAULT_USAGE_PROPORTION_BAR_LABELS;
|
|
3845
|
-
exports.DEFAULT_WELCOME_DIALOG_LABELS = DEFAULT_WELCOME_DIALOG_LABELS;
|
|
3846
|
-
exports.DailyCapField = DailyCapField;
|
|
3847
|
-
exports.EmailWorkspaceDialogView = EmailWorkspaceDialogView;
|
|
3848
|
-
exports.ErrorDialogView = ErrorDialogView;
|
|
3849
|
-
exports.FilterChip = FilterChip;
|
|
3850
|
-
exports.FloatingPanel = FloatingPanel;
|
|
3851
|
-
exports.InlineNameEditor = InlineNameEditor;
|
|
3852
|
-
exports.InviteContactsDialog = InviteContactsDialog;
|
|
3853
|
-
exports.InvoicesDialog = InvoicesDialog;
|
|
3854
|
-
exports.JsonTree = JsonTree;
|
|
3855
|
-
exports.MemberProjectRow = MemberProjectRow;
|
|
3856
|
-
exports.MessageJsonTree = MessageJsonTree;
|
|
3857
|
-
exports.ModelSelectionSection = ModelSelectionSection;
|
|
3858
|
-
exports.MoreInfo = MoreInfo;
|
|
3859
|
-
exports.MoreInfoList = MoreInfoList;
|
|
3860
|
-
exports.PlanActionButton = PlanActionButton;
|
|
3861
|
-
exports.PlanActionRow = PlanActionRow;
|
|
3862
|
-
exports.PlanBadge = PlanBadge;
|
|
3863
|
-
exports.PlanCard = PlanCard;
|
|
3864
|
-
exports.PlanCardGrid = PlanCardGrid;
|
|
3865
|
-
exports.PlanDialogFrame = PlanDialogFrame;
|
|
3866
|
-
exports.PlanInfoPopover = PlanInfoPopover;
|
|
3867
|
-
exports.PlanNotice = PlanNotice;
|
|
3868
|
-
exports.PlanPickerCard = PlanPickerCard;
|
|
3869
|
-
exports.PlanPickerHeader = PlanPickerHeader;
|
|
3870
|
-
exports.PlanStack = PlanStack;
|
|
3871
|
-
exports.PlanTierOption = PlanTierOption;
|
|
3872
|
-
exports.PlanTransition = PlanTransition;
|
|
3873
|
-
exports.PricingToggle = PricingToggle;
|
|
3874
|
-
exports.ProjectCardView = ProjectCardView;
|
|
3875
|
-
exports.ProjectDetailHeader = ProjectDetailHeader;
|
|
3876
|
-
exports.ProjectDetailSection = ProjectDetailSection;
|
|
3877
|
-
exports.ProjectGroup = ProjectGroup;
|
|
3878
|
-
exports.ProjectList = ProjectList;
|
|
3879
|
-
exports.ProjectNameLabel = ProjectNameLabel;
|
|
3880
|
-
exports.ProjectPlanPicker = ProjectPlanPicker;
|
|
3881
|
-
exports.ProjectRow = ProjectRow;
|
|
3882
|
-
exports.ProjectRowActions = ProjectRowActions;
|
|
3883
|
-
exports.PromoCodeInput = PromoCodeInput;
|
|
3884
|
-
exports.QuotaExceededDialogView = QuotaExceededDialogView;
|
|
3885
|
-
exports.QuotaMeter = QuotaMeter;
|
|
3886
|
-
exports.ReferralRewardBadge = ReferralRewardBadge;
|
|
3887
|
-
exports.ReferralRewardNote = ReferralRewardNote;
|
|
3888
|
-
exports.ReferralRewardSummary = ReferralRewardSummary;
|
|
3889
|
-
exports.RenameDialog = RenameDialog;
|
|
3890
|
-
exports.RowButton = RowButton;
|
|
3891
|
-
exports.RowIconAction = RowIconAction;
|
|
3892
|
-
exports.SegmentedControl = SegmentedControl;
|
|
3893
|
-
exports.SharedProjectRow = SharedProjectRow;
|
|
3894
|
-
exports.SharedProjectsSection = SharedProjectsSection;
|
|
3895
|
-
exports.SubscriptionSectionView = SubscriptionSectionView;
|
|
3896
|
-
exports.SubscriptionStatusView = SubscriptionStatusView;
|
|
3897
|
-
exports.SupportPanel = SupportPanel;
|
|
3898
|
-
exports.SupportUnavailable = SupportUnavailable;
|
|
3899
|
-
exports.SyncCheckList = SyncCheckList;
|
|
3900
|
-
exports.SyncDialogBody = SyncDialogBody;
|
|
3901
|
-
exports.SyncDialogFooter = SyncDialogFooter;
|
|
3902
|
-
exports.SyncField = SyncField;
|
|
3903
|
-
exports.SyncFolderRow = SyncFolderRow;
|
|
3904
|
-
exports.SyncFolderStatus = SyncFolderStatus;
|
|
3905
|
-
exports.SyncLinkButton = SyncLinkButton;
|
|
3906
|
-
exports.SyncLinkRow = SyncLinkRow;
|
|
3907
|
-
exports.SyncLoading = SyncLoading;
|
|
3908
|
-
exports.SyncNote = SyncNote;
|
|
3909
|
-
exports.SyncOptionToggle = SyncOptionToggle;
|
|
3910
|
-
exports.SyncOptions = SyncOptions;
|
|
3911
|
-
exports.SyncReconnectNotice = SyncReconnectNotice;
|
|
3912
|
-
exports.SyncSelect = SyncSelect;
|
|
3913
|
-
exports.SyncSmallNote = SyncSmallNote;
|
|
3914
|
-
exports.SyncTreeFrame = SyncTreeFrame;
|
|
3915
|
-
exports.ThreadPreviewDialog = ThreadPreviewDialog;
|
|
3916
|
-
exports.TipsEditorDialog = TipsEditorDialog;
|
|
3917
|
-
exports.UsageActionButton = UsageActionButton;
|
|
3918
|
-
exports.UsageLegend = UsageLegend;
|
|
3919
|
-
exports.UsageLineChart = UsageLineChart;
|
|
3920
|
-
exports.UsagePanel = UsagePanel;
|
|
3921
|
-
exports.UsageProportionBar = UsageProportionBar;
|
|
3922
|
-
exports.UsageQuotaHint = UsageQuotaHint;
|
|
3923
|
-
exports.UsageSection = UsageSection;
|
|
3924
|
-
exports.UsageSummary = UsageSummary;
|
|
3925
|
-
exports.UsageToggle = UsageToggle;
|
|
3926
|
-
exports.WelcomeDialog = WelcomeDialog;
|
|
3927
|
-
exports.WelcomeProjectPicker = WelcomeProjectPicker;
|
|
3928
715
|
//# sourceMappingURL=index.cjs.map
|
|
3929
716
|
//# sourceMappingURL=index.cjs.map
|