@arbidocs/blocks 0.4.147 → 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-VUR63NMQ.js → chunk-3E2F4AHD.js} +8 -8
- package/dist/{chunk-VUR63NMQ.js.map → chunk-3E2F4AHD.js.map} +1 -1
- package/dist/{chunk-U37AYUPI.cjs → chunk-3FSXWVHW.cjs} +47 -234
- package/dist/chunk-3FSXWVHW.cjs.map +1 -0
- package/dist/{chunk-IL3WB3YX.cjs → chunk-4JNKXOFZ.cjs} +3 -3
- package/dist/{chunk-IL3WB3YX.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-LZRMXJIE.js → chunk-COA3S3CZ.js} +3 -3
- package/dist/{chunk-LZRMXJIE.js.map → chunk-COA3S3CZ.js.map} +1 -1
- package/dist/{chunk-SUUPR735.js → chunk-CQPFW64W.js} +5 -5
- package/dist/{chunk-SUUPR735.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-AINU3EJ6.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-H74HEPKT.js → chunk-HGLC566X.js} +598 -13
- package/dist/chunk-HGLC566X.js.map +1 -0
- package/dist/{chunk-AO7SK6WP.cjs → chunk-ILM42LE6.cjs} +33 -33
- package/dist/{chunk-AO7SK6WP.cjs.map → chunk-ILM42LE6.cjs.map} +1 -1
- package/dist/{chunk-LTU35TQN.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-T5I4NRFP.cjs → chunk-NWNAYXC7.cjs} +9 -9
- package/dist/{chunk-T5I4NRFP.cjs.map → chunk-NWNAYXC7.cjs.map} +1 -1
- package/dist/{chunk-WIZ7Z7FN.js → chunk-Q6N6MZKO.js} +47 -222
- 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-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-MFY2ZNP6.cjs → chunk-SMN32BQ3.cjs} +4 -4
- 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-DAHCRVPM.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-DGV7HQA7.js → chunk-ZLEYLCE4.js} +4 -4
- 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 +36 -36
- package/dist/collaboration/index.js +2 -2
- 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 +8661 -2823
- package/dist/connect/index.cjs.map +1 -1
- package/dist/connect/index.d.ts +10 -2
- package/dist/connect/index.js +8468 -2671
- 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/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/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 +1041 -1257
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +24 -357
- 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/SubscriptionParts.d.ts +1 -50
- package/dist/settings/index.cjs +170 -218
- package/dist/settings/index.d.ts +3 -2
- package/dist/settings/index.js +3 -3
- 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/studio/index.cjs +5 -5
- package/dist/studio/index.js +4 -4
- 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-6YTHQ73P.cjs.map +0 -1
- package/dist/chunk-7RJTEWYM.js.map +0 -1
- package/dist/chunk-AINU3EJ6.cjs.map +0 -1
- package/dist/chunk-AOSUHWIL.js.map +0 -1
- package/dist/chunk-B3AHCIV5.js.map +0 -1
- package/dist/chunk-CSI2B2H5.js.map +0 -1
- package/dist/chunk-DAHCRVPM.js.map +0 -1
- package/dist/chunk-DETZZBG2.cjs.map +0 -1
- package/dist/chunk-DGV7HQA7.js.map +0 -1
- package/dist/chunk-EVUEIBNU.js.map +0 -1
- package/dist/chunk-H74HEPKT.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-LTU35TQN.cjs.map +0 -1
- package/dist/chunk-MFY2ZNP6.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-ODRHHWHY.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-U37AYUPI.cjs.map +0 -1
- package/dist/chunk-WIZ7Z7FN.js.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
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
4
|
var chunkKPZZ5FHE_cjs = require('./chunk-KPZZ5FHE.cjs');
|
|
5
|
-
var chunkKDG6FER6_cjs = require('./chunk-KDG6FER6.cjs');
|
|
6
5
|
var react = require('react');
|
|
7
6
|
var lucideReact = require('lucide-react');
|
|
8
7
|
var ui = require('@arbidocs/react/ui');
|
|
@@ -243,168 +242,174 @@ function PassagePill({
|
|
|
243
242
|
}
|
|
244
243
|
);
|
|
245
244
|
}
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
"
|
|
256
|
-
|
|
257
|
-
|
|
245
|
+
var DEFAULT_QUIET_MARK_LABELS = {
|
|
246
|
+
openLink: "Open link",
|
|
247
|
+
copyLink: "Copy link",
|
|
248
|
+
linkCopied: "Link copied",
|
|
249
|
+
copyFailed: "Could not copy",
|
|
250
|
+
jumpHere: "Jump to here",
|
|
251
|
+
copyPlaceLink: "Copy link to this place",
|
|
252
|
+
openDocument: "Open document",
|
|
253
|
+
linkMenu: "Link actions",
|
|
254
|
+
bookmarkMenu: "Bookmark actions"
|
|
255
|
+
};
|
|
256
|
+
function useCopyText(labels) {
|
|
257
|
+
const { notify } = chunkKPZZ5FHE_cjs.useBlocksEnvironment();
|
|
258
|
+
const done = labels?.linkCopied ?? DEFAULT_QUIET_MARK_LABELS.linkCopied;
|
|
259
|
+
const failed = labels?.copyFailed ?? DEFAULT_QUIET_MARK_LABELS.copyFailed;
|
|
260
|
+
return react.useCallback(
|
|
261
|
+
async (text, message) => {
|
|
262
|
+
try {
|
|
263
|
+
await navigator.clipboard.writeText(text);
|
|
264
|
+
notify(message ?? done, "success");
|
|
265
|
+
return true;
|
|
266
|
+
} catch {
|
|
267
|
+
notify(failed, "error");
|
|
268
|
+
return false;
|
|
269
|
+
}
|
|
270
|
+
},
|
|
271
|
+
[notify, done, failed]
|
|
272
|
+
);
|
|
273
|
+
}
|
|
274
|
+
var LINK_STYLE = {
|
|
275
|
+
external: "text-primary underline decoration-primary/40 decoration-1 underline-offset-[3px] transition-colors hover:decoration-primary focus-visible:decoration-primary",
|
|
276
|
+
document: "text-primary underline decoration-primary/40 decoration-1 underline-offset-[3px] transition-colors hover:decoration-primary focus-visible:decoration-primary",
|
|
277
|
+
// A bookmark is nearly invisible until hovered or focused.
|
|
278
|
+
anchor: "text-inherit underline decoration-dotted decoration-1 decoration-foreground/25 underline-offset-[3px] transition-colors hover:decoration-foreground/70 focus-visible:decoration-foreground/70"
|
|
279
|
+
};
|
|
280
|
+
function scrollToHash(href) {
|
|
281
|
+
const id = href?.startsWith("#") ? decodeURIComponent(href.slice(1)) : "";
|
|
282
|
+
document.getElementById(id)?.scrollIntoView({ behavior: "smooth", block: "start" });
|
|
283
|
+
}
|
|
284
|
+
function QuietLink({
|
|
285
|
+
href,
|
|
286
|
+
kind = "external",
|
|
287
|
+
onOpen,
|
|
288
|
+
placeLink,
|
|
289
|
+
labels,
|
|
258
290
|
className,
|
|
259
|
-
|
|
260
|
-
|
|
291
|
+
testId,
|
|
292
|
+
children
|
|
261
293
|
}) {
|
|
262
|
-
const
|
|
263
|
-
const
|
|
264
|
-
const
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
294
|
+
const l = { ...DEFAULT_QUIET_MARK_LABELS, ...labels };
|
|
295
|
+
const copy = useCopyText(l);
|
|
296
|
+
const open = onOpen ?? (kind === "anchor" ? () => scrollToHash(href) : () => {
|
|
297
|
+
if (href) window.open(href, "_blank", "noopener,noreferrer");
|
|
298
|
+
});
|
|
299
|
+
const copyTarget = kind === "anchor" ? placeLink ?? `${window.location.href.split("#")[0]}${href ?? ""}` : placeLink ?? href ?? "";
|
|
300
|
+
const items = [
|
|
301
|
+
{
|
|
302
|
+
id: "open",
|
|
303
|
+
label: kind === "anchor" ? l.jumpHere : kind === "document" ? l.openDocument : l.openLink,
|
|
304
|
+
primary: true,
|
|
305
|
+
onSelect: open,
|
|
306
|
+
testId: "mark-open"
|
|
307
|
+
},
|
|
308
|
+
{
|
|
309
|
+
id: "copy",
|
|
310
|
+
label: kind === "anchor" ? l.copyPlaceLink : l.copyLink,
|
|
311
|
+
onSelect: () => void copy(copyTarget),
|
|
312
|
+
testId: "mark-copy"
|
|
269
313
|
}
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
314
|
+
];
|
|
315
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
316
|
+
ui.MarkMenu,
|
|
317
|
+
{
|
|
318
|
+
as: "a",
|
|
319
|
+
href,
|
|
320
|
+
items,
|
|
321
|
+
menuLabel: kind === "anchor" ? l.bookmarkMenu : l.linkMenu,
|
|
322
|
+
preview: kind === "external" && href ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "block break-all text-xs text-muted-foreground", children: href }) : void 0,
|
|
323
|
+
className: ui.cn(LINK_STYLE[kind], "cursor-pointer", className),
|
|
324
|
+
testId,
|
|
325
|
+
"data-mark-kind": kind,
|
|
326
|
+
children
|
|
280
327
|
}
|
|
281
|
-
return groups;
|
|
282
|
-
}, [sources]);
|
|
283
|
-
const docIds = Array.from(byDoc.keys());
|
|
284
|
-
const handleRemoveDocument = react.useCallback(
|
|
285
|
-
(docExtId) => {
|
|
286
|
-
const remaining = sources.filter((d) => d.doc_ext_id !== docExtId);
|
|
287
|
-
onChange(localValue, remaining.length ? remaining : null);
|
|
288
|
-
},
|
|
289
|
-
[sources, localValue, onChange]
|
|
290
328
|
);
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
329
|
+
}
|
|
330
|
+
function PassageMark({ label, menuLabel, items, className, testId }) {
|
|
331
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
332
|
+
ui.MarkMenu,
|
|
333
|
+
{
|
|
334
|
+
items,
|
|
335
|
+
menuLabel,
|
|
336
|
+
testId,
|
|
337
|
+
"data-mark-kind": "passage",
|
|
338
|
+
className: ui.cn(
|
|
339
|
+
"touch-hit cursor-pointer select-none rounded-sm px-1 text-xs tabular-nums text-muted-foreground/80 transition-colors hover:text-foreground focus-visible:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring pointer-coarse:px-2 pointer-coarse:py-2",
|
|
340
|
+
className
|
|
341
|
+
),
|
|
342
|
+
children: label
|
|
343
|
+
}
|
|
301
344
|
);
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
345
|
+
}
|
|
346
|
+
function LabelMark({
|
|
347
|
+
colors,
|
|
348
|
+
menuLabel,
|
|
349
|
+
preview,
|
|
350
|
+
items,
|
|
351
|
+
name,
|
|
352
|
+
className,
|
|
353
|
+
testId
|
|
354
|
+
}) {
|
|
355
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
356
|
+
ui.MarkMenu,
|
|
357
|
+
{
|
|
358
|
+
items,
|
|
359
|
+
preview,
|
|
360
|
+
menuLabel,
|
|
361
|
+
testId,
|
|
362
|
+
"aria-label": name,
|
|
363
|
+
"data-mark-kind": "label",
|
|
364
|
+
className: ui.cn(
|
|
365
|
+
"flex cursor-pointer flex-col gap-1 rounded-full focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:px-2 pointer-coarse:py-1",
|
|
366
|
+
className
|
|
367
|
+
),
|
|
368
|
+
children: colors.slice(0, 4).map((c, i) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
369
|
+
"span",
|
|
370
|
+
{
|
|
371
|
+
"aria-hidden": "true",
|
|
372
|
+
className: "h-2.5 w-1 rounded-full",
|
|
373
|
+
style: { backgroundColor: c }
|
|
374
|
+
},
|
|
375
|
+
i
|
|
376
|
+
))
|
|
377
|
+
}
|
|
305
378
|
);
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
379
|
+
}
|
|
380
|
+
function NoteMark({
|
|
381
|
+
label,
|
|
382
|
+
title,
|
|
383
|
+
menuLabel = "Note actions",
|
|
384
|
+
items = [],
|
|
385
|
+
className,
|
|
386
|
+
testId
|
|
387
|
+
}) {
|
|
388
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
389
|
+
ui.MarkMenu,
|
|
390
|
+
{
|
|
391
|
+
items,
|
|
392
|
+
preview: title ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "block text-xs text-muted-foreground", children: title }) : void 0,
|
|
393
|
+
menuLabel,
|
|
394
|
+
testId,
|
|
395
|
+
"data-slot": "note-mark",
|
|
396
|
+
"data-mark-kind": "note",
|
|
397
|
+
className: ui.cn(
|
|
398
|
+
"cursor-default select-none rounded-sm px-1 text-xs font-medium tabular-nums text-foreground/80 underline decoration-yellow-400 decoration-2 underline-offset-[3px] focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
|
|
399
|
+
className
|
|
400
|
+
),
|
|
401
|
+
children: label
|
|
402
|
+
}
|
|
313
403
|
);
|
|
314
|
-
const flushPendingChange = react.useCallback(() => {
|
|
315
|
-
if (!debounceRef.current) return;
|
|
316
|
-
clearTimeout(debounceRef.current);
|
|
317
|
-
debounceRef.current = null;
|
|
318
|
-
onChange(localValue, citations ?? null);
|
|
319
|
-
}, [localValue, citations, onChange]);
|
|
320
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: ui.cn("space-y-1", className), children: [
|
|
321
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative", children: isEditing ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
322
|
-
ui.Textarea,
|
|
323
|
-
{
|
|
324
|
-
ref: textareaRef,
|
|
325
|
-
dictate: true,
|
|
326
|
-
value: localValue,
|
|
327
|
-
onChange: (e) => handleChange(e.target.value),
|
|
328
|
-
onBlur: () => {
|
|
329
|
-
flushPendingChange();
|
|
330
|
-
setIsEditing(false);
|
|
331
|
-
},
|
|
332
|
-
onMouseUp: () => {
|
|
333
|
-
if (textareaRef.current && onHeightChange) {
|
|
334
|
-
onHeightChange(textareaRef.current.offsetHeight);
|
|
335
|
-
}
|
|
336
|
-
},
|
|
337
|
-
placeholder,
|
|
338
|
-
readOnly,
|
|
339
|
-
rows: 2,
|
|
340
|
-
"data-testid": dataTestId,
|
|
341
|
-
autoFocus: true,
|
|
342
|
-
style: defaultHeight ? { height: defaultHeight } : void 0,
|
|
343
|
-
className: "w-full text-sm p-2 pr-14 border border-border rounded-md resize-y bg-background focus:outline-none focus:ring-2 focus:ring-ring"
|
|
344
|
-
}
|
|
345
|
-
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
346
|
-
"div",
|
|
347
|
-
{
|
|
348
|
-
onClick: () => !readOnly && setIsEditing(true),
|
|
349
|
-
style: defaultHeight ? { minHeight: defaultHeight } : void 0,
|
|
350
|
-
"data-testid": dataTestId,
|
|
351
|
-
className: ui.cn(
|
|
352
|
-
"w-full text-sm p-2 pr-14 border border-border rounded-md min-h-[4rem] whitespace-pre-wrap bg-background",
|
|
353
|
-
!readOnly && "cursor-text hover:border-ring",
|
|
354
|
-
!localValue && "text-muted-foreground"
|
|
355
|
-
),
|
|
356
|
-
children: renderedContent || placeholder
|
|
357
|
-
}
|
|
358
|
-
) }),
|
|
359
|
-
(hasCitations || !readOnly) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1", children: [
|
|
360
|
-
docIds.map((docId) => {
|
|
361
|
-
const doc = citedDocs?.[docId];
|
|
362
|
-
const group = byDoc.get(docId);
|
|
363
|
-
const pages = (group?.pages ?? []).slice().sort((a, b) => a - b);
|
|
364
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
365
|
-
"div",
|
|
366
|
-
{
|
|
367
|
-
className: "flex items-center gap-1.5 text-sm",
|
|
368
|
-
"data-testid": `citation-doc-${docId}`,
|
|
369
|
-
children: [
|
|
370
|
-
doc ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
371
|
-
"button",
|
|
372
|
-
{
|
|
373
|
-
type: "button",
|
|
374
|
-
onClick: () => !readOnly && onCiteDocument?.(docId),
|
|
375
|
-
className: "flex-1 min-w-0 text-left",
|
|
376
|
-
title: "Open to tag more passages",
|
|
377
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(ui.DocumentEntity, { doc, fullWidth: true, labelMaxWidth: "max-w-full" })
|
|
378
|
-
}
|
|
379
|
-
) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: docId }),
|
|
380
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground shrink-0", children: chunkKDG6FER6_cjs.formatPageRefs(pages) }),
|
|
381
|
-
!readOnly && /* @__PURE__ */ jsxRuntime.jsx(
|
|
382
|
-
"button",
|
|
383
|
-
{
|
|
384
|
-
type: "button",
|
|
385
|
-
onClick: () => handleRemoveDocument(docId),
|
|
386
|
-
"aria-label": "Remove this document",
|
|
387
|
-
className: "p-0.5 hover:bg-destructive/20 hover:text-destructive rounded shrink-0",
|
|
388
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { size: 12 })
|
|
389
|
-
}
|
|
390
|
-
)
|
|
391
|
-
]
|
|
392
|
-
},
|
|
393
|
-
docId
|
|
394
|
-
);
|
|
395
|
-
}),
|
|
396
|
-
!readOnly && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-1", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 min-w-0", "data-testid": "citation-document-picker", children: renderDocumentPicker?.(handleToggleDocument, docIds) }) })
|
|
397
|
-
] }),
|
|
398
|
-
activeCitationKey && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-sm text-blue-text", children: [
|
|
399
|
-
"Click a passage in the document to add it \u2014 ",
|
|
400
|
-
/* @__PURE__ */ jsxRuntime.jsx("strong", { children: "shift-click" }),
|
|
401
|
-
" to take a whole range. Add as many as you like, from as many documents as you like."
|
|
402
|
-
] })
|
|
403
|
-
] });
|
|
404
404
|
}
|
|
405
405
|
|
|
406
|
-
exports.CitationEditor = CitationEditor;
|
|
407
406
|
exports.DEFAULT_PASSAGE_PILL_LABELS = DEFAULT_PASSAGE_PILL_LABELS;
|
|
407
|
+
exports.DEFAULT_QUIET_MARK_LABELS = DEFAULT_QUIET_MARK_LABELS;
|
|
408
|
+
exports.LabelMark = LabelMark;
|
|
409
|
+
exports.NoteMark = NoteMark;
|
|
410
|
+
exports.PassageMark = PassageMark;
|
|
408
411
|
exports.PassagePill = PassagePill;
|
|
409
|
-
|
|
410
|
-
|
|
412
|
+
exports.QuietLink = QuietLink;
|
|
413
|
+
exports.useCopyText = useCopyText;
|
|
414
|
+
//# sourceMappingURL=chunk-LXTOOUEN.cjs.map
|
|
415
|
+
//# sourceMappingURL=chunk-LXTOOUEN.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/citations/PassagePill.tsx","../src/citations/QuietMarks.tsx"],"names":["jsxs","Fragment","jsx","cn","Tooltip","TooltipTrigger","TooltipContent","useBlocksEnvironment","useState","useRef","useEffect","Check","Copy","useCallback","MarkMenu"],"mappings":"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","file":"chunk-LXTOOUEN.cjs","sourcesContent":["import {\n useEffect,\n useRef,\n useState,\n type MouseEvent,\n type ReactElement,\n type ReactNode,\n} from 'react'\nimport { Check, Copy } from 'lucide-react'\nimport { Tooltip, TooltipContent, TooltipTrigger, cn } from '@arbidocs/react/ui'\nimport { useBlocksEnvironment } from '../provider/BlocksProvider'\n\n/** Every fixed string of the passage pill. */\nexport interface PassagePillLabels {\n copyLink: string\n /** Announced and notified after the link was copied. */\n copied: string\n /** Notified when the clipboard refused the write. */\n copyFailed: string\n viewPassage: string\n page: string\n pages: string\n passage: string\n passages: string\n /** Visible abbreviation of \"page\" in the pill (\"p.3\"). */\n pageAbbreviation: string\n}\n\nexport const DEFAULT_PASSAGE_PILL_LABELS: PassagePillLabels = {\n copyLink: 'Copy passage link',\n copied: 'Passage link copied',\n copyFailed: 'Could not copy the passage link',\n viewPassage: 'View passage',\n page: 'Page',\n pages: 'Pages',\n passage: 'Passage',\n passages: 'Passages',\n pageAbbreviation: 'p.',\n}\n\n/** Overridable `data-testid`s of the pill (defaults keep the app's existing ids). */\nexport interface PassagePillTestIds {\n root: string\n copy: string\n}\n\nexport interface PassagePillProps {\n /** Glyph of the cited document (host-supplied: file-type icon). */\n icon: ReactNode\n documentTitle: string\n /** `pill`: title + page; `icon`: glyph only; `compact`: page/passage ref + copy link. */\n variant?: 'icon' | 'pill' | 'compact'\n pageNumber?: number\n passageIndex?: number\n /** End of a contiguous passage run: the label collapses to \"4–9\" instead of a pill each. */\n passageIndexEnd?: number\n /** End page of a range: \"p.3–5(4–9)\". */\n pageNumberEnd?: number\n /** Makes the element a link. */\n href?: string\n /** Makes the element a button (ignored for the element role when `href` is set). */\n onClick?: (e: MouseEvent) => void\n showTooltip?: boolean\n labelMaxWidth?: string\n size?: 'sm' | 'base'\n className?: string\n labels?: Partial<PassagePillLabels>\n testIds?: Partial<PassagePillTestIds>\n /** Root test id (default `passage-entity`); the copy button gets `<id>-copy`. */\n testId?: string\n}\n\nconst COPIED_RESET_MS = 2000\n\n/** Plain-language name of a passage reference: \"Title, Page 3, Passage 4\". */\nfunction describePassage(\n documentTitle: string,\n l: PassagePillLabels,\n page: { text?: string; isRange: boolean },\n passage: { text?: string; isRange: boolean }\n): string {\n return [\n documentTitle,\n page.text !== undefined ? `${page.isRange ? l.pages : l.page} ${page.text}` : null,\n passage.text !== undefined\n ? `${passage.isRange ? l.passages : l.passage} ${passage.text}`\n : null,\n ]\n .filter(Boolean)\n .join(', ')\n}\n\ninterface PillSurfaceProps {\n href?: string\n onClick?: (e: MouseEvent) => void\n className: string\n testId: string\n /** What assistive tech reads; the visible content is hidden from it. */\n accessibleName: string\n children: ReactNode\n tooltip?: ReactNode\n tooltipSide?: 'top' | 'bottom'\n}\n\n/**\n * The ONE interactive element of a pill: a link, a button or (when there is no action) plain text.\n * Never nests another interactive element, so it is valid inside any host container.\n */\nfunction PillSurface({\n href,\n onClick,\n className,\n testId,\n accessibleName,\n children,\n tooltip,\n tooltipSide = 'bottom',\n}: PillSurfaceProps) {\n const content = (\n <>\n <span aria-hidden=\"true\" className=\"inline-flex min-w-0 items-center gap-1\">\n {children}\n </span>\n <span className=\"sr-only\">{accessibleName}</span>\n </>\n )\n const interactive = cn(\n 'relative cursor-pointer hover:bg-muted/80 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n \"pointer-coarse:after:absolute pointer-coarse:after:inset-x-0 pointer-coarse:after:-inset-y-3 pointer-coarse:after:content-['']\"\n )\n\n let surface: ReactNode\n if (href) {\n surface = (\n <a\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={cn(className, interactive)}\n onClick={onClick}\n data-testid={testId}\n >\n {content}\n </a>\n )\n } else if (onClick) {\n surface = (\n <button\n type=\"button\"\n className={cn(className, interactive)}\n onClick={onClick}\n data-testid={testId}\n >\n {content}\n </button>\n )\n } else {\n surface = (\n <span className={className} data-testid={testId}>\n {content}\n </span>\n )\n }\n\n if (!tooltip) return surface\n return (\n <Tooltip>\n <TooltipTrigger asChild>{surface as ReactElement}</TooltipTrigger>\n <TooltipContent side={tooltipSide}>{tooltip}</TooltipContent>\n </Tooltip>\n )\n}\n\nfunction CopyLinkButton({\n href,\n labels,\n testId,\n}: {\n href: string\n labels: PassagePillLabels\n testId: string\n}) {\n const { notify } = useBlocksEnvironment()\n const [copied, setCopied] = useState(false)\n const timer = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n useEffect(\n () => () => {\n if (timer.current) clearTimeout(timer.current)\n },\n []\n )\n\n const handleCopy = async (e: MouseEvent) => {\n e.stopPropagation()\n try {\n await navigator.clipboard.writeText(href)\n } catch {\n // Say so instead of pretending: the host's notify surfaces the failure.\n notify(labels.copyFailed, 'error')\n return\n }\n setCopied(true)\n notify(labels.copied, 'success')\n if (timer.current) clearTimeout(timer.current)\n timer.current = setTimeout(() => setCopied(false), COPIED_RESET_MS)\n }\n\n return (\n <>\n <button\n type=\"button\"\n onClick={handleCopy}\n className=\"relative inline-flex items-center text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-fine:min-h-6 pointer-fine:min-w-6 pointer-fine:justify-center pointer-coarse:min-h-11 pointer-coarse:min-w-11 pointer-coarse:justify-center\"\n title={labels.copyLink}\n aria-label={labels.copyLink}\n data-testid={testId}\n >\n {copied ? (\n <Check className=\"size-3\" aria-hidden=\"true\" />\n ) : (\n <Copy className=\"size-3\" aria-hidden=\"true\" />\n )}\n </button>\n <span role=\"status\" className=\"sr-only\">\n {copied ? labels.copied : ''}\n </span>\n </>\n )\n}\n\n/** A citation to a passage of a document, as a pill, a bare icon or a compact page reference. */\nexport function PassagePill({\n icon,\n documentTitle,\n variant = 'pill',\n pageNumber,\n passageIndex,\n passageIndexEnd,\n pageNumberEnd,\n href,\n className,\n onClick,\n showTooltip = true,\n labelMaxWidth,\n size = 'sm',\n labels,\n testIds,\n testId = 'passage-entity',\n}: PassagePillProps) {\n const l = { ...DEFAULT_PASSAGE_PILL_LABELS, ...labels }\n const ids: PassagePillTestIds = {\n root: testIds?.root ?? testId,\n copy: testIds?.copy ?? `${testIds?.root ?? testId}-copy`,\n }\n // Ranges collapse to \"4–9\"; a range of one renders as a plain \"4\".\n const isPassageRange = passageIndexEnd !== undefined && passageIndexEnd > (passageIndex ?? 0)\n const isPageRange = pageNumberEnd !== undefined && pageNumberEnd > (pageNumber ?? 0)\n const passageText = isPassageRange ? `${passageIndex}–${passageIndexEnd}` : `${passageIndex}`\n const pageText = isPageRange ? `${pageNumber}–${pageNumberEnd}` : `${pageNumber}`\n const accessibleName = describePassage(\n documentTitle,\n l,\n { text: pageNumber !== undefined ? pageText : undefined, isRange: isPageRange },\n { text: passageIndex !== undefined ? passageText : undefined, isRange: isPassageRange }\n )\n const hasAction = Boolean(href || onClick)\n\n if (variant === 'icon') {\n return (\n <PillSurface\n href={href}\n onClick={onClick}\n className={cn('inline-flex items-center rounded-sm', className)}\n testId={ids.root}\n accessibleName={accessibleName}\n tooltip={\n showTooltip ? (\n <div className=\"flex flex-col gap-0.5\">\n <span className=\"font-medium\">{documentTitle}</span>\n {(pageNumber !== undefined || passageIndex !== undefined) && (\n <span className=\"text-xs text-muted-foreground\">\n {pageNumber !== undefined && `${isPageRange ? l.pages : l.page} ${pageText}`}\n {pageNumber !== undefined && passageIndex !== undefined && ', '}\n {passageIndex !== undefined &&\n `${isPassageRange ? l.passages : l.passage} ${passageText}`}\n </span>\n )}\n </div>\n ) : undefined\n }\n >\n {icon}\n </PillSurface>\n )\n }\n\n if (variant === 'compact') {\n const label =\n [\n pageNumber !== undefined ? `${l.pageAbbreviation}${pageText}` : null,\n passageIndex !== undefined ? `(${passageText})` : null,\n ]\n .filter(Boolean)\n .join('') || '—'\n return (\n <span\n className={cn(\n 'inline-flex items-center gap-1 rounded-md border border-transparent bg-muted px-1 text-sm font-medium',\n className\n )}\n >\n <PillSurface\n href={href}\n onClick={onClick}\n className=\"inline-flex items-center gap-1 rounded-sm\"\n testId={ids.root}\n accessibleName={accessibleName}\n tooltip={showTooltip ? documentTitle : undefined}\n >\n {icon}\n <span className=\"leading-tight\">{label}</span>\n </PillSurface>\n {href && <CopyLinkButton href={href} labels={l} testId={ids.copy} />}\n </span>\n )\n }\n\n return (\n <PillSurface\n href={href}\n onClick={onClick}\n className={cn(\n 'group/pill inline-flex items-center rounded-md border border-border bg-muted transition-all',\n size === 'base' ? 'gap-1.5 px-1.5 py-0.5 text-base' : 'gap-1 px-1 text-sm',\n className\n )}\n testId={ids.root}\n accessibleName={accessibleName}\n tooltip={showTooltip && hasAction ? l.viewPassage : undefined}\n >\n {icon}\n <span\n className={cn(\n 'min-w-0 truncate font-medium leading-tight',\n labelMaxWidth ?? 'max-w-[320px]'\n )}\n >\n {documentTitle}\n </span>\n {pageNumber ? (\n <span className=\"flex-shrink-0 text-xs leading-none text-muted-foreground\">\n {l.pageAbbreviation}\n {pageText}\n </span>\n ) : null}\n </PillSurface>\n )\n}\n","import { useCallback, type ReactNode } from 'react'\nimport { MarkMenu, cn, type MarkMenuItem } from '@arbidocs/react/ui'\nimport { useBlocksEnvironment } from '../provider/BlocksProvider'\n\n/**\n * Quiet inline marks: links, bookmarks, passage references, label and note marks.\n *\n * Each is typographically distinct TEXT (no pill, no button chrome, no icon in the flow) and owns\n * exactly one contextual menu through the shared `MarkMenu`. Domain-neutral: hosts supply the\n * handlers that make a row mean something.\n */\n\n/** Every fixed string of the quiet marks. */\nexport interface QuietMarkLabels {\n openLink: string\n copyLink: string\n linkCopied: string\n copyFailed: string\n jumpHere: string\n copyPlaceLink: string\n openDocument: string\n linkMenu: string\n bookmarkMenu: string\n}\n\nexport const DEFAULT_QUIET_MARK_LABELS: QuietMarkLabels = {\n openLink: 'Open link',\n copyLink: 'Copy link',\n linkCopied: 'Link copied',\n copyFailed: 'Could not copy',\n jumpHere: 'Jump to here',\n copyPlaceLink: 'Copy link to this place',\n openDocument: 'Open document',\n linkMenu: 'Link actions',\n bookmarkMenu: 'Bookmark actions',\n}\n\n/**\n * Copy text to the clipboard and say so (or say it failed) through the host's `notify`. Resolves\n * whether it was copied.\n */\nexport function useCopyText(labels?: Partial<Pick<QuietMarkLabels, 'linkCopied' | 'copyFailed'>>) {\n const { notify } = useBlocksEnvironment()\n const done = labels?.linkCopied ?? DEFAULT_QUIET_MARK_LABELS.linkCopied\n const failed = labels?.copyFailed ?? DEFAULT_QUIET_MARK_LABELS.copyFailed\n return useCallback(\n async (text: string, message?: string): Promise<boolean> => {\n try {\n await navigator.clipboard.writeText(text)\n notify(message ?? done, 'success')\n return true\n } catch {\n notify(failed, 'error')\n return false\n }\n },\n [notify, done, failed]\n )\n}\n\nexport type QuietLinkKind = 'external' | 'anchor' | 'document'\n\nexport interface QuietLinkProps {\n href?: string\n /** `external` (default) opens elsewhere, `anchor` jumps within the page, `document` is an in-app target. */\n kind?: QuietLinkKind\n /** The primary action. Defaults: external opens a new tab, anchor scrolls to the id. */\n onOpen?: () => void\n /** Absolute URL a copied anchor should carry; defaults to the current page plus the hash. */\n placeLink?: string\n labels?: Partial<QuietMarkLabels>\n className?: string\n testId?: string\n children: ReactNode\n}\n\nconst LINK_STYLE: Record<QuietLinkKind, string> = {\n external:\n 'text-primary underline decoration-primary/40 decoration-1 underline-offset-[3px] transition-colors hover:decoration-primary focus-visible:decoration-primary',\n document:\n 'text-primary underline decoration-primary/40 decoration-1 underline-offset-[3px] transition-colors hover:decoration-primary focus-visible:decoration-primary',\n // A bookmark is nearly invisible until hovered or focused.\n anchor:\n 'text-inherit underline decoration-dotted decoration-1 decoration-foreground/25 underline-offset-[3px] transition-colors hover:decoration-foreground/70 focus-visible:decoration-foreground/70',\n}\n\nfunction scrollToHash(href: string | undefined) {\n const id = href?.startsWith('#') ? decodeURIComponent(href.slice(1)) : ''\n document.getElementById(id)?.scrollIntoView({ behavior: 'smooth', block: 'start' })\n}\n\n/** A hyperlink, bookmark or document link as quiet text with one menu (open / copy). */\nexport function QuietLink({\n href,\n kind = 'external',\n onOpen,\n placeLink,\n labels,\n className,\n testId,\n children,\n}: QuietLinkProps) {\n const l = { ...DEFAULT_QUIET_MARK_LABELS, ...labels }\n const copy = useCopyText(l)\n\n const open =\n onOpen ??\n (kind === 'anchor'\n ? () => scrollToHash(href)\n : () => {\n if (href) window.open(href, '_blank', 'noopener,noreferrer')\n })\n const copyTarget =\n kind === 'anchor'\n ? (placeLink ?? `${window.location.href.split('#')[0]}${href ?? ''}`)\n : (placeLink ?? href ?? '')\n\n const items: MarkMenuItem[] = [\n {\n id: 'open',\n label: kind === 'anchor' ? l.jumpHere : kind === 'document' ? l.openDocument : l.openLink,\n primary: true,\n onSelect: open,\n testId: 'mark-open',\n },\n {\n id: 'copy',\n label: kind === 'anchor' ? l.copyPlaceLink : l.copyLink,\n onSelect: () => void copy(copyTarget),\n testId: 'mark-copy',\n },\n ]\n\n return (\n <MarkMenu\n as=\"a\"\n href={href}\n items={items}\n menuLabel={kind === 'anchor' ? l.bookmarkMenu : l.linkMenu}\n preview={\n kind === 'external' && href ? (\n <span className=\"block break-all text-xs text-muted-foreground\">{href}</span>\n ) : undefined\n }\n className={cn(LINK_STYLE[kind], 'cursor-pointer', className)}\n testId={testId}\n data-mark-kind={kind}\n >\n {children}\n </MarkMenu>\n )\n}\n\nexport interface PassageMarkProps {\n /** The reference as plain text, e.g. \"¶4\" or \"¶4–9 · p.1\". */\n label: string\n menuLabel: string\n /** Menu rows: copy, link, label, open in navigator. */\n items: MarkMenuItem[]\n className?: string\n testId?: string\n}\n\n/** A passage's reference as a faint text mark in the margin; its menu carries the passage actions. */\nexport function PassageMark({ label, menuLabel, items, className, testId }: PassageMarkProps) {\n return (\n <MarkMenu\n items={items}\n menuLabel={menuLabel}\n testId={testId}\n data-mark-kind=\"passage\"\n className={cn(\n 'touch-hit cursor-pointer select-none rounded-sm px-1 text-xs tabular-nums text-muted-foreground/80 transition-colors hover:text-foreground focus-visible:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring pointer-coarse:px-2 pointer-coarse:py-2',\n className\n )}\n >\n {label}\n </MarkMenu>\n )\n}\n\nexport interface LabelMarkProps {\n /** Colours of every label marking the passage. */\n colors: string[]\n menuLabel: string\n /** Names of the labels, shown in the menu. */\n preview?: ReactNode\n items: MarkMenuItem[]\n /** Accessible name of the stripes. */\n name: string\n className?: string\n testId?: string\n}\n\n/** The labels on a passage as thin margin stripes (not a chip); the menu shows / removes them. */\nexport function LabelMark({\n colors,\n menuLabel,\n preview,\n items,\n name,\n className,\n testId,\n}: LabelMarkProps) {\n return (\n <MarkMenu\n items={items}\n preview={preview}\n menuLabel={menuLabel}\n testId={testId}\n aria-label={name}\n data-mark-kind=\"label\"\n className={cn(\n 'flex cursor-pointer flex-col gap-1 rounded-full focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:px-2 pointer-coarse:py-1',\n className\n )}\n >\n {colors.slice(0, 4).map((c, i) => (\n <span\n key={i}\n aria-hidden=\"true\"\n className=\"h-2.5 w-1 rounded-full\"\n style={{ backgroundColor: c }}\n />\n ))}\n </MarkMenu>\n )\n}\n\nexport interface NoteMarkProps {\n /** Short label, e.g. the passage range this run covers (\"¶4–9\"). */\n label: string\n /** Full note text, shown as the menu preview so the mark is self-explaining. */\n title?: string\n menuLabel?: string\n /** Rows such as \"Show note\" and \"Edit\". With none, the menu is a read-only preview. */\n items?: MarkMenuItem[]\n className?: string\n testId?: string\n}\n\n/**\n * Marks a passage as cited by a Note: small text with a soft yellow underline, drawn once on\n * each CONTIGUOUS run of cited passages (a run is one citation).\n */\nexport function NoteMark({\n label,\n title,\n menuLabel = 'Note actions',\n items = [],\n className,\n testId,\n}: NoteMarkProps) {\n return (\n <MarkMenu\n items={items}\n preview={\n title ? <span className=\"block text-xs text-muted-foreground\">{title}</span> : undefined\n }\n menuLabel={menuLabel}\n testId={testId}\n data-slot=\"note-mark\"\n data-mark-kind=\"note\"\n className={cn(\n 'cursor-default select-none rounded-sm px-1 text-xs font-medium tabular-nums text-foreground/80 underline decoration-yellow-400 decoration-2 underline-offset-[3px] focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring',\n className\n )}\n >\n {label}\n </MarkMenu>\n )\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { useRef, useState } from 'react';
|
|
3
|
-
import { Loader2, UploadCloud } from 'lucide-react';
|
|
2
|
+
import { memo, useRef, useState } from 'react';
|
|
3
|
+
import { Ban, Plus, Pencil, Loader2, UploadCloud } from 'lucide-react';
|
|
4
4
|
import { cn } from '@arbidocs/react/ui';
|
|
5
5
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
6
6
|
|
|
@@ -83,7 +83,46 @@ function UploadDropzone({
|
|
|
83
83
|
}
|
|
84
84
|
);
|
|
85
85
|
}
|
|
86
|
+
var ICONS = { pencil: Pencil, plus: Plus, blocked: Ban };
|
|
87
|
+
function CellHoverIcon({
|
|
88
|
+
kind = "pencil",
|
|
89
|
+
className
|
|
90
|
+
}) {
|
|
91
|
+
const Icon = ICONS[kind];
|
|
92
|
+
return /* @__PURE__ */ jsx(
|
|
93
|
+
"span",
|
|
94
|
+
{
|
|
95
|
+
"data-slot": "cell-hover-icon",
|
|
96
|
+
"data-kind": kind,
|
|
97
|
+
"aria-hidden": true,
|
|
98
|
+
className: cn(
|
|
99
|
+
"inline-flex shrink-0 text-muted-foreground opacity-0 transition-opacity group-hover:opacity-70 group-focus-within:opacity-70 pointer-coarse:opacity-70",
|
|
100
|
+
className
|
|
101
|
+
),
|
|
102
|
+
children: /* @__PURE__ */ jsx(Icon, { className: "size-3.5" })
|
|
103
|
+
}
|
|
104
|
+
);
|
|
105
|
+
}
|
|
106
|
+
var HoverIconCell = memo(function HoverIconCell2({
|
|
107
|
+
content,
|
|
108
|
+
isEditable,
|
|
109
|
+
showIcon = true,
|
|
110
|
+
icon = "pencil",
|
|
111
|
+
className
|
|
112
|
+
}) {
|
|
113
|
+
return /* @__PURE__ */ jsxs(
|
|
114
|
+
"div",
|
|
115
|
+
{
|
|
116
|
+
"data-slot": "hover-icon-cell",
|
|
117
|
+
className: cn("group flex h-full w-full items-center gap-2 pr-2", className),
|
|
118
|
+
children: [
|
|
119
|
+
content,
|
|
120
|
+
showIcon && /* @__PURE__ */ jsx(CellHoverIcon, { kind: isEditable ? icon : "blocked" })
|
|
121
|
+
]
|
|
122
|
+
}
|
|
123
|
+
);
|
|
124
|
+
});
|
|
86
125
|
|
|
87
|
-
export { UploadDropzone };
|
|
88
|
-
//# sourceMappingURL=chunk-
|
|
89
|
-
//# sourceMappingURL=chunk-
|
|
126
|
+
export { CellHoverIcon, HoverIconCell, UploadDropzone };
|
|
127
|
+
//# sourceMappingURL=chunk-M4S75AEJ.js.map
|
|
128
|
+
//# sourceMappingURL=chunk-M4S75AEJ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/files/UploadDropzone.tsx","../src/files/cells/HoverIconCell.tsx"],"names":["jsx","cn","HoverIconCell","jsxs"],"mappings":"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","file":"chunk-M4S75AEJ.js","sourcesContent":["import { useRef, useState } from 'react'\nimport type { DragEvent } from 'react'\nimport type { LucideIcon } from 'lucide-react'\nimport { Loader2, UploadCloud } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\n\nexport interface UploadDropzoneProps {\n /** Called with the chosen/dropped files. */\n onFiles: (files: File[]) => void\n /** `accept` attribute for the file picker (e.g. `.pdf,.docx`). */\n accept?: string\n /** Allow selecting more than one file. Defaults to true. */\n multiple?: boolean\n /** Disables picking/dropping (e.g. no active workspace yet). */\n disabled?: boolean\n /** Shows a spinner + busy copy while an upload is in flight. */\n uploading?: boolean\n /** Primary line, e.g. \"Drag files here\". */\n title?: string\n /** Secondary line under the title. */\n description?: string\n /** Small muted hint, e.g. \"PDF, DOCX, images — up to 50MB\". */\n hint?: string\n /** Copy shown next to the spinner while uploading. */\n uploadingLabel?: string\n /** Glyph in the tile. Defaults to an upload-cloud icon. */\n icon?: LucideIcon\n testId?: string\n className?: string\n}\n\n/**\n * A themeable drag-and-drop upload target. Source-agnostic: it just surfaces\n * chosen files via `onFiles` — the host owns the actual upload. Handles its own\n * drag-over state, click-to-browse, and a busy state, styled with the kit's\n * SEMANTIC tokens only (border, muted, primary, foreground) so it renders in\n * each host's colours.\n */\nexport function UploadDropzone({\n onFiles,\n accept,\n multiple = true,\n disabled = false,\n uploading = false,\n title = 'Drag files here',\n description = 'or click to browse',\n hint,\n uploadingLabel = 'Uploading…',\n icon: Icon = UploadCloud,\n testId,\n className,\n}: UploadDropzoneProps) {\n const inputRef = useRef<HTMLInputElement>(null)\n const [dragOver, setDragOver] = useState(false)\n const inert = disabled || uploading\n\n const pick = (files: FileList | null) => {\n if (!files?.length) return\n onFiles(Array.from(files))\n }\n\n const onDrop = (e: DragEvent<HTMLButtonElement>) => {\n e.preventDefault()\n setDragOver(false)\n if (inert) return\n pick(e.dataTransfer.files)\n }\n\n const onDragOver = (e: DragEvent<HTMLButtonElement>) => {\n e.preventDefault()\n if (!inert) setDragOver(true)\n }\n\n return (\n <button\n type=\"button\"\n onClick={() => !inert && inputRef.current?.click()}\n onDrop={onDrop}\n onDragOver={onDragOver}\n onDragLeave={() => setDragOver(false)}\n disabled={inert}\n data-testid={testId}\n className={cn(\n 'flex w-full flex-col items-center justify-center gap-3 rounded-lg bg-muted px-6 py-12 text-center transition-colors',\n 'hover:bg-accent/60',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n dragOver && 'bg-accent ring-2 ring-primary',\n inert && 'cursor-not-allowed opacity-60 hover:bg-muted',\n className\n )}\n >\n <input\n ref={inputRef}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n className=\"hidden\"\n onChange={(e) => {\n pick(e.target.files)\n if (inputRef.current) inputRef.current.value = ''\n }}\n data-testid={testId ? `${testId}-input` : undefined}\n />\n <div className=\"flex size-12 items-center justify-center rounded-full bg-primary/10 text-primary\">\n {uploading ? <Loader2 className=\"size-6 animate-spin\" /> : <Icon className=\"size-6\" />}\n </div>\n {uploading ? (\n <p className=\"text-sm font-medium text-foreground\">{uploadingLabel}</p>\n ) : (\n <div className=\"space-y-1\">\n <p className=\"text-sm font-medium text-foreground\">\n {title} <span className=\"text-muted-foreground\">{description}</span>\n </p>\n {hint && <p className=\"text-xs text-muted-foreground\">{hint}</p>}\n </div>\n )}\n </button>\n )\n}\n","import { memo, type ReactNode } from 'react'\nimport { Ban, Pencil, Plus } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\n\nexport type CellHoverIconKind = 'pencil' | 'plus' | 'blocked'\n\nconst ICONS = { pencil: Pencil, plus: Plus, blocked: Ban } as const\n\n/**\n * Edit hint of a grid cell. It appears on pointer hover, on keyboard focus anywhere inside the\n * cell and always on touch devices (coarse pointer), where there is no hover to reveal it.\n * Place it inside an element carrying the `group` class.\n */\nexport function CellHoverIcon({\n kind = 'pencil',\n className,\n}: {\n kind?: CellHoverIconKind\n className?: string\n}) {\n const Icon = ICONS[kind]\n return (\n <span\n data-slot=\"cell-hover-icon\"\n data-kind={kind}\n aria-hidden\n className={cn(\n 'inline-flex shrink-0 text-muted-foreground opacity-0 transition-opacity group-hover:opacity-70 group-focus-within:opacity-70 pointer-coarse:opacity-70',\n className\n )}\n >\n <Icon className=\"size-3.5\" />\n </span>\n )\n}\n\nexport interface HoverIconCellProps {\n content: ReactNode\n /** Non-members get a \"blocked\" hint instead of the edit hint. */\n isEditable: boolean\n showIcon?: boolean\n icon?: Exclude<CellHoverIconKind, 'blocked'>\n className?: string\n}\n\n/** A cell's content with the edit hint after it (pure CSS reveal: no re-render on mouse move). */\nexport const HoverIconCell = memo(function HoverIconCell({\n content,\n isEditable,\n showIcon = true,\n icon = 'pencil',\n className,\n}: HoverIconCellProps) {\n return (\n <div\n data-slot=\"hover-icon-cell\"\n className={cn('group flex h-full w-full items-center gap-2 pr-2', className)}\n >\n {content}\n {showIcon && <CellHoverIcon kind={isEditable ? icon : 'blocked'} />}\n </div>\n )\n})\n"]}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
4
|
var chunk5FYU7ZIU_cjs = require('./chunk-5FYU7ZIU.cjs');
|
|
5
|
-
var
|
|
5
|
+
var chunkQT3A4PFC_cjs = require('./chunk-QT3A4PFC.cjs');
|
|
6
6
|
var chunk7UTB4PHM_cjs = require('./chunk-7UTB4PHM.cjs');
|
|
7
7
|
var fflate = require('fflate');
|
|
8
8
|
var server = require('react-dom/server');
|
|
@@ -1761,14 +1761,14 @@ function DefinedTermsProvider({
|
|
|
1761
1761
|
},
|
|
1762
1762
|
[load, sources, notify]
|
|
1763
1763
|
);
|
|
1764
|
-
const all = React4.useMemo(() =>
|
|
1764
|
+
const all = React4.useMemo(() => chunkQT3A4PFC_cjs.groupDefinitions(sources ?? []).groups, [sources]);
|
|
1765
1765
|
const byId = React4.useMemo(
|
|
1766
1766
|
() => new Map(all.flatMap((g) => g.definitions).map((d) => [d.id, d])),
|
|
1767
1767
|
[all]
|
|
1768
1768
|
);
|
|
1769
|
-
const agreements = React4.useMemo(() =>
|
|
1769
|
+
const agreements = React4.useMemo(() => chunkQT3A4PFC_cjs.definitionLabels(sources ?? []), [sources]);
|
|
1770
1770
|
const groups = React4.useMemo(
|
|
1771
|
-
() => picker ?
|
|
1771
|
+
() => picker ? chunkQT3A4PFC_cjs.filterTermGroups(chunkQT3A4PFC_cjs.groupDefinitions(sources ?? [], { labelId }).groups, picker.query).slice(
|
|
1772
1772
|
0,
|
|
1773
1773
|
MAX_GROUPS
|
|
1774
1774
|
) : [],
|
|
@@ -3809,7 +3809,7 @@ function TableButtons() {
|
|
|
3809
3809
|
] });
|
|
3810
3810
|
}
|
|
3811
3811
|
var CAPTION_LABELS = ["Figure", "Table", "Equation"];
|
|
3812
|
-
var CAPTION_STYLES =
|
|
3812
|
+
var CAPTION_STYLES = chunkQT3A4PFC_cjs.stylesXml(
|
|
3813
3813
|
"",
|
|
3814
3814
|
'<w:style w:type="paragraph" w:default="1" w:styleId="Normal"><w:name w:val="Normal"/><w:qFormat/></w:style><w:style w:type="paragraph" w:styleId="Caption"><w:name w:val="caption"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:uiPriority w:val="35"/><w:unhideWhenUsed/><w:qFormat/><w:pPr><w:spacing w:after="200" w:line="240" w:lineRule="auto"/></w:pPr><w:rPr><w:i/><w:iCs/><w:color w:val="44546A"/><w:sz w:val="18"/><w:szCs w:val="18"/></w:rPr></w:style>'
|
|
3815
3815
|
);
|
|
@@ -3837,9 +3837,9 @@ function countSeqFields(root, label, throughId) {
|
|
|
3837
3837
|
return count;
|
|
3838
3838
|
}
|
|
3839
3839
|
function captionParagraphXml(label, number, text) {
|
|
3840
|
-
const run = (value) => `<w:r><w:t xml:space="preserve">${
|
|
3840
|
+
const run = (value) => `<w:r><w:t xml:space="preserve">${chunkQT3A4PFC_cjs.esc(value)}</w:t></w:r>`;
|
|
3841
3841
|
const rest = text.trim() ? `: ${text.trim()}` : "";
|
|
3842
|
-
return `<w:p><w:pPr><w:pStyle w:val="Caption"/></w:pPr>${run(`${label} `)}<w:fldSimple w:instr=" SEQ ${
|
|
3842
|
+
return `<w:p><w:pPr><w:pStyle w:val="Caption"/></w:pPr>${run(`${label} `)}<w:fldSimple w:instr=" SEQ ${chunkQT3A4PFC_cjs.esc(label)} \\* ARABIC "><w:r><w:t>${number}</w:t></w:r></w:fldSimple>${rest ? run(rest) : ""}</w:p>`;
|
|
3843
3843
|
}
|
|
3844
3844
|
function base642(bytes) {
|
|
3845
3845
|
let binary = "";
|
|
@@ -3848,8 +3848,8 @@ function base642(bytes) {
|
|
|
3848
3848
|
return btoa(binary);
|
|
3849
3849
|
}
|
|
3850
3850
|
function captionFragmentHtml(label, number, text, revision) {
|
|
3851
|
-
const untracked =
|
|
3852
|
-
document:
|
|
3851
|
+
const untracked = chunkQT3A4PFC_cjs.docxPackage({
|
|
3852
|
+
document: chunkQT3A4PFC_cjs.documentXml(captionParagraphXml(label, number, text)),
|
|
3853
3853
|
styles: CAPTION_STYLES,
|
|
3854
3854
|
title: "Caption"
|
|
3855
3855
|
});
|
|
@@ -5108,5 +5108,5 @@ exports.useReview = useReview;
|
|
|
5108
5108
|
exports.useReviewItem = useReviewItem;
|
|
5109
5109
|
exports.useTrackedOrNoted = useTrackedOrNoted;
|
|
5110
5110
|
exports.withDirectEditing = withDirectEditing;
|
|
5111
|
-
//# sourceMappingURL=chunk-
|
|
5112
|
-
//# sourceMappingURL=chunk-
|
|
5111
|
+
//# sourceMappingURL=chunk-NPR5BGFF.cjs.map
|
|
5112
|
+
//# sourceMappingURL=chunk-NPR5BGFF.cjs.map
|