@arbidocs/blocks 0.4.159 → 0.4.160
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/README.md +48 -9
- package/dist/{ConnectedNativeDocxComparison-R6RU5TZE.cjs → ConnectedNativeDocxComparison-GLHOGUP6.cjs} +12 -11
- package/dist/{ConnectedNativeDocxComparison-R6RU5TZE.cjs.map → ConnectedNativeDocxComparison-GLHOGUP6.cjs.map} +1 -1
- package/dist/{ConnectedNativeDocxComparison-XMZ5KLD4.js → ConnectedNativeDocxComparison-LKIMKOTA.js} +11 -10
- package/dist/{ConnectedStreamedWordArtifact-IXRJ7MUE.js.map → ConnectedNativeDocxComparison-LKIMKOTA.js.map} +1 -1
- package/dist/{ConnectedNativeDocxEditor-NGUK2AX6.js → ConnectedNativeDocxEditor-6LNYWZ3P.js} +10 -9
- package/dist/{ConnectedNativeDocxEditor-NGUK2AX6.js.map → ConnectedNativeDocxEditor-6LNYWZ3P.js.map} +1 -1
- package/dist/{ConnectedNativeDocxEditor-LBATSM3M.cjs → ConnectedNativeDocxEditor-M3UGWL6K.cjs} +12 -11
- package/dist/{ConnectedNativeDocxEditor-LBATSM3M.cjs.map → ConnectedNativeDocxEditor-M3UGWL6K.cjs.map} +1 -1
- package/dist/{ConnectedStreamedWordArtifact-IXRJ7MUE.js → ConnectedStreamedWordArtifact-432HT7DK.js} +11 -10
- package/dist/{ConnectedNativeDocxComparison-XMZ5KLD4.js.map → ConnectedStreamedWordArtifact-432HT7DK.js.map} +1 -1
- package/dist/{ConnectedStreamedWordArtifact-CWFR6A37.cjs → ConnectedStreamedWordArtifact-COEXL5IT.cjs} +12 -11
- package/dist/ConnectedStreamedWordArtifact-COEXL5IT.cjs.map +1 -0
- package/dist/{FactTextEditor-YESAU2IJ.js → FactTextEditor-ABKKJOCY.js} +2 -2
- package/dist/FactTextEditor-ABKKJOCY.js.map +1 -0
- package/dist/{FactTextEditor-YUPBCTXK.cjs → FactTextEditor-GYN5RHJT.cjs} +2 -2
- package/dist/FactTextEditor-GYN5RHJT.cjs.map +1 -0
- package/dist/{WorkspaceTableView-EYLEUZZT.cjs → WorkspaceTableView-AQTF5F6T.cjs} +6 -5
- package/dist/WorkspaceTableView-AQTF5F6T.cjs.map +1 -0
- package/dist/{WorkspaceTableView-DWUE4VQF.js → WorkspaceTableView-PTB5BPVA.js} +4 -3
- package/dist/WorkspaceTableView-PTB5BPVA.js.map +1 -0
- package/dist/agents/index.cjs +263 -263
- package/dist/agents/index.js +6 -6
- package/dist/agents/skills/skillLibrary.d.ts +1 -1
- package/dist/{chunk-FPHTSNOE.js → chunk-2AKIMCDD.js} +3 -3
- package/dist/{chunk-FPHTSNOE.js.map → chunk-2AKIMCDD.js.map} +1 -1
- package/dist/{chunk-YNMO3DSR.js → chunk-2AMYT2HQ.js} +3 -3
- package/dist/{chunk-YNMO3DSR.js.map → chunk-2AMYT2HQ.js.map} +1 -1
- package/dist/{chunk-MSFQDELO.cjs → chunk-3CUORKDL.cjs} +4 -4
- package/dist/{chunk-MSFQDELO.cjs.map → chunk-3CUORKDL.cjs.map} +1 -1
- package/dist/{chunk-MNG7N6M2.js → chunk-3PQIWOTZ.js} +122 -57
- package/dist/chunk-3PQIWOTZ.js.map +1 -0
- package/dist/chunk-5C7DRQQE.cjs +1891 -0
- package/dist/chunk-5C7DRQQE.cjs.map +1 -0
- package/dist/{chunk-F57LNUSZ.js → chunk-5NWY3FXQ.js} +24 -57
- package/dist/chunk-5NWY3FXQ.js.map +1 -0
- package/dist/{chunk-ISHFVKVU.js → chunk-5WLORPGX.js} +4 -4
- package/dist/{chunk-ISHFVKVU.js.map → chunk-5WLORPGX.js.map} +1 -1
- package/dist/{chunk-FAXXN7KI.cjs → chunk-5Y6V7F6W.cjs} +53 -4
- package/dist/chunk-5Y6V7F6W.cjs.map +1 -0
- package/dist/{chunk-6QAAIDQQ.cjs → chunk-6UTIAHQG.cjs} +60 -60
- package/dist/{chunk-6QAAIDQQ.cjs.map → chunk-6UTIAHQG.cjs.map} +1 -1
- package/dist/{chunk-KCSIX7CY.js → chunk-6XIXNH26.js} +3 -3
- package/dist/{chunk-KCSIX7CY.js.map → chunk-6XIXNH26.js.map} +1 -1
- package/dist/{chunk-YBJ4QGNH.cjs → chunk-ANLTECZ6.cjs} +8 -8
- package/dist/{chunk-YBJ4QGNH.cjs.map → chunk-ANLTECZ6.cjs.map} +1 -1
- package/dist/{chunk-Q2XGM372.cjs → chunk-AR6A2PMV.cjs} +4 -4
- package/dist/{chunk-Q2XGM372.cjs.map → chunk-AR6A2PMV.cjs.map} +1 -1
- package/dist/{chunk-KBO75NLM.cjs → chunk-AYJZRBHG.cjs} +7 -7
- package/dist/{chunk-KBO75NLM.cjs.map → chunk-AYJZRBHG.cjs.map} +1 -1
- package/dist/{chunk-FM3IRQJW.cjs → chunk-AYKE6USO.cjs} +12 -12
- package/dist/chunk-AYKE6USO.cjs.map +1 -0
- package/dist/chunk-BGJZVJJM.cjs +63 -0
- package/dist/chunk-BGJZVJJM.cjs.map +1 -0
- package/dist/{chunk-ECW2R2KF.cjs → chunk-BPL5RLNN.cjs} +27 -27
- package/dist/{chunk-ECW2R2KF.cjs.map → chunk-BPL5RLNN.cjs.map} +1 -1
- package/dist/{chunk-CNHUJRQ4.cjs → chunk-EFEFLBRM.cjs} +21 -55
- package/dist/chunk-EFEFLBRM.cjs.map +1 -0
- package/dist/{chunk-ETZ5A3GU.js → chunk-EVO2UNX3.js} +3 -3
- package/dist/chunk-EVO2UNX3.js.map +1 -0
- package/dist/{chunk-P6RIBIVN.js → chunk-FMJGVAWX.js} +8 -9
- package/dist/chunk-FMJGVAWX.js.map +1 -0
- package/dist/chunk-H5542IOD.cjs +108 -0
- package/dist/chunk-H5542IOD.cjs.map +1 -0
- package/dist/{chunk-VF5EUAIV.js → chunk-H7PHANI4.js} +3 -3
- package/dist/chunk-H7PHANI4.js.map +1 -0
- package/dist/chunk-HQJL7FSY.js +58 -0
- package/dist/chunk-HQJL7FSY.js.map +1 -0
- package/dist/{chunk-OFV3PRF2.cjs → chunk-HRDVQERS.cjs} +7 -7
- package/dist/{chunk-OFV3PRF2.cjs.map → chunk-HRDVQERS.cjs.map} +1 -1
- package/dist/{chunk-3VULDTNL.cjs → chunk-HUNX4CQG.cjs} +4 -4
- package/dist/chunk-HUNX4CQG.cjs.map +1 -0
- package/dist/{chunk-2BHDRVVL.cjs → chunk-I6I34FDU.cjs} +38 -37
- package/dist/chunk-I6I34FDU.cjs.map +1 -0
- package/dist/chunk-IWVOZREF.js +12 -0
- package/dist/chunk-IWVOZREF.js.map +1 -0
- package/dist/chunk-J7YHBMBB.js +1834 -0
- package/dist/chunk-J7YHBMBB.js.map +1 -0
- package/dist/{chunk-SDOEHEJP.js → chunk-JMQLTMJ7.js} +53 -5
- package/dist/chunk-JMQLTMJ7.js.map +1 -0
- package/dist/{chunk-TF7HN5EU.js → chunk-JNE2XEXD.js} +12 -12
- package/dist/chunk-JNE2XEXD.js.map +1 -0
- package/dist/{chunk-QKR5LWDO.js → chunk-K7CZFNJ2.js} +7 -7
- package/dist/{chunk-QKR5LWDO.js.map → chunk-K7CZFNJ2.js.map} +1 -1
- package/dist/{chunk-4RPBUMHB.cjs → chunk-KMZO5W6D.cjs} +4 -4
- package/dist/chunk-KMZO5W6D.cjs.map +1 -0
- package/dist/{chunk-FTZ45WHY.js → chunk-KNCJSPXV.js} +5020 -4014
- package/dist/chunk-KNCJSPXV.js.map +1 -0
- package/dist/{chunk-3OCNUKGX.js → chunk-KQWC4YBX.js} +3 -3
- package/dist/{chunk-3OCNUKGX.js.map → chunk-KQWC4YBX.js.map} +1 -1
- package/dist/{chunk-TC3RQNEX.cjs → chunk-L4KWTDFE.cjs} +5 -5
- package/dist/chunk-L4KWTDFE.cjs.map +1 -0
- package/dist/{chunk-VTTZZ4FN.js → chunk-LH3JAZ33.js} +5 -5
- package/dist/chunk-LH3JAZ33.js.map +1 -0
- package/dist/{chunk-P2YM67Y5.cjs → chunk-LQYPOWKN.cjs} +14 -21
- package/dist/chunk-LQYPOWKN.cjs.map +1 -0
- package/dist/{chunk-RATEAOKT.js → chunk-NOXGEQQR.js} +7 -13
- package/dist/chunk-NOXGEQQR.js.map +1 -0
- package/dist/{chunk-NPLGB4LI.cjs → chunk-NUAC5GTQ.cjs} +5115 -4077
- package/dist/chunk-NUAC5GTQ.cjs.map +1 -0
- package/dist/chunk-NYECCTB3.js +101 -0
- package/dist/chunk-NYECCTB3.js.map +1 -0
- package/dist/{chunk-GC2FSPSQ.cjs → chunk-O5E3NKPI.cjs} +128 -58
- package/dist/chunk-O5E3NKPI.cjs.map +1 -0
- package/dist/{chunk-SZOFGU7W.js → chunk-O5XREO7H.js} +3 -3
- package/dist/{chunk-SZOFGU7W.js.map → chunk-O5XREO7H.js.map} +1 -1
- package/dist/{chunk-OOU4QLRK.cjs → chunk-OHCYJFV2.cjs} +9 -9
- package/dist/{chunk-OOU4QLRK.cjs.map → chunk-OHCYJFV2.cjs.map} +1 -1
- package/dist/{chunk-DEPF5LQI.js → chunk-OKRYNQPH.js} +3 -3
- package/dist/chunk-OKRYNQPH.js.map +1 -0
- package/dist/{chunk-KFMRBZQK.js → chunk-PCL7IEZO.js} +21 -20
- package/dist/chunk-PCL7IEZO.js.map +1 -0
- package/dist/chunk-RFB7B6XG.cjs +169 -0
- package/dist/chunk-RFB7B6XG.cjs.map +1 -0
- package/dist/{chunk-SZSJGZSO.js → chunk-SQQU3WRB.js} +714 -5
- package/dist/chunk-SQQU3WRB.js.map +1 -0
- package/dist/{chunk-OALEDG67.cjs → chunk-TNESYDBR.cjs} +5 -5
- package/dist/{chunk-OALEDG67.cjs.map → chunk-TNESYDBR.cjs.map} +1 -1
- package/dist/chunk-TTS353W2.js +163 -0
- package/dist/chunk-TTS353W2.js.map +1 -0
- package/dist/{chunk-CROGFB46.cjs → chunk-U7OUZHBH.cjs} +753 -2
- package/dist/chunk-U7OUZHBH.cjs.map +1 -0
- package/dist/{chunk-BQ77KSXU.js → chunk-UORU5S7Y.js} +3 -3
- package/dist/{chunk-BQ77KSXU.js.map → chunk-UORU5S7Y.js.map} +1 -1
- package/dist/{chunk-FYZXDZM7.js → chunk-VFF76GTB.js} +4 -4
- package/dist/{chunk-FYZXDZM7.js.map → chunk-VFF76GTB.js.map} +1 -1
- package/dist/{chunk-E4H5H2C3.cjs → chunk-VYTK2WJB.cjs} +4 -4
- package/dist/{chunk-E4H5H2C3.cjs.map → chunk-VYTK2WJB.cjs.map} +1 -1
- package/dist/{chunk-XI37A7HH.js → chunk-WKSP73RU.js} +3 -3
- package/dist/{chunk-XI37A7HH.js.map → chunk-WKSP73RU.js.map} +1 -1
- package/dist/chunk-WP4VIOOA.cjs +15 -0
- package/dist/chunk-WP4VIOOA.cjs.map +1 -0
- package/dist/{chunk-YF3QUHKN.cjs → chunk-X3XPXEIM.cjs} +14 -15
- package/dist/chunk-X3XPXEIM.cjs.map +1 -0
- package/dist/{chunk-VZPFYZZU.cjs → chunk-Z2HEBOA3.cjs} +8 -8
- package/dist/{chunk-VZPFYZZU.cjs.map → chunk-Z2HEBOA3.cjs.map} +1 -1
- package/dist/{chunk-Q7CQYYZW.cjs → chunk-ZMYW5M75.cjs} +5 -5
- package/dist/chunk-ZMYW5M75.cjs.map +1 -0
- package/dist/{chunk-7UENVUA6.js → chunk-ZW2AWACP.js} +3 -3
- package/dist/{chunk-7UENVUA6.js.map → chunk-ZW2AWACP.js.map} +1 -1
- package/dist/citations/index.cjs +10 -10
- package/dist/citations/index.js +2 -2
- package/dist/collaboration/contacts/contact-form.d.ts +47 -0
- package/dist/collaboration/contacts/index.d.ts +3 -1
- package/dist/collaboration/contacts/invite-plan.d.ts +46 -0
- package/dist/collaboration/contacts/parseEmails.d.ts +7 -0
- package/dist/collaboration/index.cjs +163 -83
- package/dist/collaboration/index.js +2 -2
- package/dist/components/ActionLink.d.ts +1 -1
- package/dist/components/TeamGrid.d.ts +1 -1
- package/dist/components/editorial/{ProfileCard.d.ts → EditorialProfileCard.d.ts} +2 -2
- package/dist/components/editorial/index.d.ts +1 -1
- package/dist/connect/docx.cjs +14 -13
- package/dist/connect/docx.d.ts +1 -1
- package/dist/connect/docx.js +10 -9
- package/dist/connect/index.cjs +22053 -14708
- package/dist/connect/index.cjs.map +1 -1
- package/dist/connect/index.d.ts +11 -7
- package/dist/connect/index.js +15193 -7911
- package/dist/connect/index.js.map +1 -1
- package/dist/connect/viewer.cjs +86 -141
- package/dist/connect/viewer.cjs.map +1 -1
- package/dist/connect/viewer.d.ts +3 -2
- package/dist/connect/viewer.js +28 -85
- package/dist/connect/viewer.js.map +1 -1
- package/dist/connection/ConnectedSettings.d.ts +3 -2
- package/dist/connection/ConnectionProvider.d.ts +5 -4
- package/dist/connection/StreamedArtifact.d.ts +1 -1
- package/dist/connection/billing/index.d.ts +3 -3
- package/dist/connection/billing/support.d.ts +4 -7
- package/dist/connection/contacts/ConnectedAddContacts.d.ts +9 -0
- package/dist/connection/contacts/ConnectedContactCardForm.d.ts +11 -0
- package/dist/connection/contacts/ConnectedContactToggle.d.ts +16 -0
- package/dist/connection/contacts/ConnectedContactsDirectory.d.ts +10 -0
- package/dist/connection/contacts/ImportVcf.d.ts +29 -0
- package/dist/connection/contacts/index.d.ts +5 -0
- package/dist/connection/defaultHost.d.ts +9 -0
- package/dist/connection/docx/ConnectedNativeDocxEditor.d.ts +3 -3
- package/dist/connection/docx/support.d.ts +10 -9
- package/dist/connection/files/bulk/ConnectedFilesBulkActions.d.ts +22 -0
- package/dist/connection/files/bulk/useDocumentBulkActions.d.ts +19 -0
- package/dist/connection/files/explorer/FileTiles.d.ts +6 -3
- package/dist/connection/files/fields/ConnectedBulkTagEditor.d.ts +16 -0
- package/dist/connection/files/fields/ConnectedFieldsEditor.d.ts +40 -0
- package/dist/connection/files/fields/ConnectedFieldsManager.d.ts +33 -0
- package/dist/connection/files/fields/ConnectedTagEditorDialog.d.ts +20 -0
- package/dist/connection/files/fields/ConnectedTagForm.d.ts +54 -0
- package/dist/connection/files/fields/DocumentFieldParts.d.ts +33 -0
- package/dist/connection/files/fields/DocumentUser.d.ts +11 -0
- package/dist/connection/files/fields/documentField.d.ts +48 -0
- package/dist/connection/files/fields/useFieldWrites.d.ts +20 -0
- package/dist/connection/files/fields/useFieldsApply.d.ts +49 -0
- package/dist/connection/files/fields/useMemberLookup.d.ts +3 -0
- package/dist/connection/files/grid/ConnectedTagEntity.d.ts +19 -0
- package/dist/connection/files/grid/cells.d.ts +85 -0
- package/dist/connection/files/grid/documentColumns.d.ts +66 -0
- package/dist/connection/files/grid/documentGridBus.d.ts +48 -0
- package/dist/connection/files/grid/documentStatus.d.ts +43 -0
- package/dist/connection/files/grid/familyMeta.d.ts +21 -0
- package/dist/connection/files/grid/tagColumn.d.ts +23 -0
- package/dist/connection/files/grid/useDocumentGridSync.d.ts +48 -0
- package/dist/connection/files/grid/useDocumentTable.d.ts +30 -0
- package/dist/connection/files/index.d.ts +36 -2
- package/dist/connection/files/move/ConnectedMoveToFolder.d.ts +31 -0
- package/dist/connection/files/page/ConnectedFilesPage.d.ts +86 -0
- package/dist/connection/files/page/DocumentsFilterBarActions.d.ts +39 -0
- package/dist/connection/files/page/DocumentsUploadButton.d.ts +25 -0
- package/dist/connection/files/page/PersistedGridView.d.ts +6 -0
- package/dist/connection/files/page/ProgressiveLoadingChip.d.ts +12 -0
- package/dist/connection/files/page/useDocumentNavigation.d.ts +20 -0
- package/dist/connection/files/review/ConnectedAiReview.d.ts +40 -0
- package/dist/connection/files/review/reviewProgress.d.ts +2 -0
- package/dist/connection/files/store.d.ts +96 -0
- package/dist/connection/files/useDocumentFilters.d.ts +54 -0
- package/dist/connection/files/views/ViewSelector.d.ts +33 -0
- package/dist/connection/files/views/tableViews.d.ts +22 -0
- package/dist/connection/files/views/useTableViews.d.ts +22 -0
- package/dist/connection/mail/ConnectedMailbox.d.ts +2 -2
- package/dist/connection/messenger/ChatAttachments.d.ts +15 -0
- package/dist/connection/messenger/ConnectedChatThread.d.ts +21 -0
- package/dist/connection/messenger/ConnectedGroupMembers.d.ts +20 -0
- package/dist/connection/messenger/ConnectedMessenger.d.ts +52 -0
- package/dist/connection/messenger/index.d.ts +6 -0
- package/dist/connection/messenger/types.d.ts +103 -0
- package/dist/connection/messenger/useMessengerRows.d.ts +19 -0
- package/dist/connection/tags/ConnectedTagsPage.d.ts +2 -35
- package/dist/connection/viewer/ConnectedDocumentToolsProvider.d.ts +19 -2
- package/dist/connection/viewer/ConnectedDocumentViewer.d.ts +1 -1
- package/dist/connection/viewer/support.d.ts +21 -15
- package/dist/connection/workspaceData.d.ts +134 -8
- package/dist/facts/index.cjs +3 -3
- package/dist/facts/index.js +2 -2
- package/dist/files/bulk/BulkActionsBar.d.ts +9 -5
- package/dist/files/cells/DocumentNameCell.d.ts +4 -2
- package/dist/files/cells/MultiSelectCellEditor.d.ts +13 -0
- package/dist/files/cells/RelatedDocsCell.d.ts +2 -1
- package/dist/files/cells/index.d.ts +1 -0
- package/dist/files/documentColumns.d.ts +15 -0
- package/dist/files/folders/DocumentsFolderButton.d.ts +26 -0
- package/dist/files/folders/FolderTreePicker.d.ts +16 -0
- package/dist/files/folders/index.d.ts +2 -0
- package/dist/files/index.cjs +430 -434
- package/dist/files/index.d.ts +4 -1
- package/dist/files/index.js +5 -5
- package/dist/files/navigator/DocumentSearchList.d.ts +19 -0
- package/dist/files/navigator/ExplorerFileNavigator.d.ts +23 -0
- package/dist/files/navigator/NavDocumentPicker.d.ts +15 -0
- package/dist/files/navigator/NavigatorPickerBar.d.ts +26 -0
- package/dist/files/navigator/index.d.ts +5 -0
- package/dist/files/navigator/types.d.ts +7 -0
- package/dist/files/tags/BulkTagEditor.d.ts +2 -1
- package/dist/files/tags/index.d.ts +0 -2
- package/dist/files/visibility.d.ts +6 -5
- package/dist/home/StartTiles.d.ts +1 -1
- package/dist/home/index.cjs +30 -30
- package/dist/home/index.js +5 -5
- package/dist/index.cjs +684 -694
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +22 -134
- package/dist/index.js.map +1 -1
- package/dist/provider/{BlocksProvider.d.ts → environment.d.ts} +8 -10
- package/dist/provider/host.d.ts +44 -0
- package/dist/retrieval/index.cjs +4 -4
- package/dist/retrieval/index.js +2 -2
- package/dist/shell/index.cjs +44 -44
- package/dist/shell/index.js +3 -3
- package/dist/shell/types.d.ts +1 -1
- package/dist/site/index.cjs +61 -61
- package/dist/site/index.js +2 -2
- package/dist/studio/index.cjs +86 -87
- package/dist/studio/index.cjs.map +1 -1
- package/dist/studio/index.js +15 -16
- package/dist/studio/index.js.map +1 -1
- package/dist/workflow-canvas/index.cjs +28 -27
- package/dist/workflow-canvas/index.cjs.map +1 -1
- package/dist/workflow-canvas/index.js +11 -10
- package/dist/workflow-canvas/index.js.map +1 -1
- package/dist/workspaces/WorkspaceCard.d.ts +1 -1
- package/dist/workspaces/index.cjs +20 -20
- package/dist/workspaces/index.js +4 -4
- package/node_modules/@arbidocs/coedit/package.json +1 -1
- package/package.json +5 -5
- package/dist/ConnectedStreamedWordArtifact-CWFR6A37.cjs.map +0 -1
- package/dist/FactTextEditor-YESAU2IJ.js.map +0 -1
- package/dist/FactTextEditor-YUPBCTXK.cjs.map +0 -1
- package/dist/WorkspaceTableView-DWUE4VQF.js.map +0 -1
- package/dist/WorkspaceTableView-EYLEUZZT.cjs.map +0 -1
- package/dist/chunk-2BHDRVVL.cjs.map +0 -1
- package/dist/chunk-3VULDTNL.cjs.map +0 -1
- package/dist/chunk-4RPBUMHB.cjs.map +0 -1
- package/dist/chunk-5ZIYPZYE.js +0 -2748
- package/dist/chunk-5ZIYPZYE.js.map +0 -1
- package/dist/chunk-6I6CVX5G.cjs +0 -22
- package/dist/chunk-6I6CVX5G.cjs.map +0 -1
- package/dist/chunk-7NL6WJER.cjs +0 -682
- package/dist/chunk-7NL6WJER.cjs.map +0 -1
- package/dist/chunk-CB4TIDEX.cjs +0 -54
- package/dist/chunk-CB4TIDEX.cjs.map +0 -1
- package/dist/chunk-CNHUJRQ4.cjs.map +0 -1
- package/dist/chunk-CROGFB46.cjs.map +0 -1
- package/dist/chunk-DEPF5LQI.js.map +0 -1
- package/dist/chunk-ETZ5A3GU.js.map +0 -1
- package/dist/chunk-EYJMMGXF.js +0 -19
- package/dist/chunk-EYJMMGXF.js.map +0 -1
- package/dist/chunk-F57LNUSZ.js.map +0 -1
- package/dist/chunk-FAXXN7KI.cjs.map +0 -1
- package/dist/chunk-FM3IRQJW.cjs.map +0 -1
- package/dist/chunk-FTZ45WHY.js.map +0 -1
- package/dist/chunk-GC2FSPSQ.cjs.map +0 -1
- package/dist/chunk-KDLX5AA7.js +0 -49
- package/dist/chunk-KDLX5AA7.js.map +0 -1
- package/dist/chunk-KFMRBZQK.js.map +0 -1
- package/dist/chunk-MNG7N6M2.js.map +0 -1
- package/dist/chunk-NPLGB4LI.cjs.map +0 -1
- package/dist/chunk-P2YM67Y5.cjs.map +0 -1
- package/dist/chunk-P6RIBIVN.js.map +0 -1
- package/dist/chunk-Q7CQYYZW.cjs.map +0 -1
- package/dist/chunk-QJFJ5JBF.cjs +0 -2838
- package/dist/chunk-QJFJ5JBF.cjs.map +0 -1
- package/dist/chunk-RATEAOKT.js.map +0 -1
- package/dist/chunk-SDOEHEJP.js.map +0 -1
- package/dist/chunk-SZSJGZSO.js.map +0 -1
- package/dist/chunk-TC3RQNEX.cjs.map +0 -1
- package/dist/chunk-TF7HN5EU.js.map +0 -1
- package/dist/chunk-VF5EUAIV.js.map +0 -1
- package/dist/chunk-VTTZZ4FN.js.map +0 -1
- package/dist/chunk-WK6FVIF7.js +0 -654
- package/dist/chunk-WK6FVIF7.js.map +0 -1
- package/dist/chunk-YF3QUHKN.cjs.map +0 -1
- package/dist/connection/ArbiAppProvider.d.ts +0 -16
- package/dist/connection/files/support.d.ts +0 -40
- package/dist/files/tags/DocTagPopover.d.ts +0 -113
- package/dist/files/tags/TagManager.d.ts +0 -54
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/home/HomeLayout.tsx","../src/home/CreateTile.tsx","../src/home/DashboardParts.tsx","../src/home/FactsStrip.tsx","../src/home/RecentList.tsx"],"names":["cn","jsx","jsxs"],"mappings":"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","file":"chunk-ISHFVKVU.js","sourcesContent":["import type { ReactNode } from 'react'\nimport { cn } from '@arbidocs/react/ui'\nimport { Callout } from '../components/Callout'\n\n/** Column of the home page: greeting header, then the content. */\nexport function HomeFrame({\n testId = 'home-page',\n children,\n}: {\n testId?: string\n children: ReactNode\n}) {\n return (\n <div data-slot=\"home-frame\" data-testid={testId} className=\"flex h-full flex-col\">\n {children}\n </div>\n )\n}\n\n/** Content area under the header; the pages inside own their scrolling. */\nexport function HomeMain({ children }: { children: ReactNode }) {\n return (\n <main\n data-slot=\"home-main\"\n className=\"min-h-0 min-w-sidebar flex-1 overflow-hidden bg-background\"\n >\n {children}\n </main>\n )\n}\n\n/**\n * Scroll container that spans the full width (so its scrollbar rides the window edge) with the\n * content centred in a bounded column.\n */\nexport function HomeCenteredScroll({ children }: { children: ReactNode }) {\n return (\n <div data-slot=\"home-scroll\" className=\"h-full overflow-y-auto\">\n <div className=\"mx-auto max-w-6xl\">{children}</div>\n </div>\n )\n}\n\n/** Bounded, centred column for a full-height child (the workspaces table). */\nexport function HomeCenteredColumn({\n className,\n children,\n}: {\n className?: string\n children: ReactNode\n}) {\n return (\n <div\n data-slot=\"home-column\"\n className={cn('mx-auto h-full max-w-6xl px-4 pb-4 sm:px-8', className)}\n >\n {children}\n </div>\n )\n}\n\n/** Centred error notice for a page that could not load. */\nexport function HomeLoadError({\n title,\n body,\n testId,\n}: {\n title: string\n body: string\n testId?: string\n}) {\n return (\n <div\n data-slot=\"home-load-error\"\n className=\"flex h-full flex-col items-center justify-center p-8\"\n >\n <div className=\"w-full max-w-md\">\n <Callout variant=\"danger\" title={title} body={body} testId={testId} />\n </div>\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { Plus } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\n\nexport interface CreateTileProps {\n /** Visible label, e.g. \"New workspace\". */\n label: string\n /** Accessible name; defaults to `label`. */\n ariaLabel?: string\n onSelect?: () => void\n /** One line explaining what is being created (first-run empty state). */\n help?: ReactNode\n /** When set, the tile is disabled and shows this explanation instead of `help`. */\n disabledReason?: string\n className?: string\n testId?: string\n}\n\n/**\n * The \"create\" tile. Sits in the grid beside the workspace tiles at the same\n * height, in the same tonal family: no dashed outline, no shadow.\n */\nexport function CreateTile({\n label,\n ariaLabel,\n onSelect,\n help,\n disabledReason,\n className,\n testId,\n}: CreateTileProps) {\n const disabled = !!disabledReason\n const select = disabled ? undefined : onSelect\n return (\n <div\n className={cn(\n 'flex min-h-40 w-full flex-col items-center justify-center gap-1 rounded-lg p-4 text-muted-foreground border border-border bg-card shadow-xs transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n disabled\n ? 'cursor-not-allowed opacity-60'\n : 'cursor-pointer hover:border-ring/50 hover:bg-accent/40 hover:text-foreground',\n className\n )}\n onClick={select}\n onKeyDown={(event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n select?.()\n }\n }}\n role=\"button\"\n tabIndex={0}\n aria-disabled={disabled || undefined}\n title={disabledReason}\n aria-label={ariaLabel ?? label}\n data-slot=\"create-tile\"\n data-testid={testId}\n >\n <span className=\"inline-flex flex-col items-center gap-2 text-sm font-medium\">\n <Plus className=\"size-6\" aria-hidden=\"true\" />\n {label}\n </span>\n {(disabledReason ?? help) && (\n <p className=\"max-w-64 px-4 text-center text-xs leading-snug text-muted-foreground\">\n {disabledReason ?? help}\n </p>\n )}\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { Button, cn } from '@arbidocs/react/ui'\n\n/** A section's quiet header action: ghost, small, still 44px on touch. */\nexport const DASHBOARD_QUIET_ACTION_CLASS =\n 'h-8 gap-1.5 px-2 text-sm bg-transparent text-muted-foreground hover:bg-muted hover:text-foreground pointer-coarse:h-11'\n\n/** Column of the workspace dashboard's bands. A container, so children can use `@2xl:` queries. */\nexport function DashboardRoot({\n testId,\n className,\n children,\n}: {\n testId?: string\n className?: string\n children: ReactNode\n}) {\n return (\n <div\n data-slot=\"dashboard\"\n data-testid={testId}\n className={cn('flex flex-col gap-6', className)}\n >\n {children}\n </div>\n )\n}\n\n/** A dashboard band: `start` is the tiles under the identity bar, `recent` the lists with an eyebrow. */\nexport function DashboardBand({\n kind,\n children,\n}: {\n kind: 'start' | 'recent'\n children: ReactNode\n}) {\n return (\n <div\n data-slot=\"dashboard-band\"\n data-kind={kind}\n className={kind === 'start' ? 'mt-2' : 'mt-4 flex flex-col gap-3'}\n >\n {children}\n </div>\n )\n}\n\n/** Two equal columns from the `@2xl` container width, one below it. */\nexport function DashboardColumns({ children }: { children: ReactNode }) {\n return (\n <div data-slot=\"dashboard-columns\" className=\"grid gap-8 @2xl:grid-cols-2\">\n {children}\n </div>\n )\n}\n\n/** A fact row's mark: a quiet dot. */\nexport function FactMark() {\n return (\n <span\n data-slot=\"fact-mark\"\n className=\"mx-1 size-1.5 shrink-0 rounded-full bg-muted-foreground/40\"\n aria-hidden\n />\n )\n}\n\nexport interface DashboardActionProps {\n /** `primary` is the page's one filled action; `quiet` the ghost header actions. */\n emphasis: 'primary' | 'quiet'\n icon: ReactNode\n label: string\n onClick: () => void\n testId?: string\n}\n\n/** Header action of a dashboard section (\"New chat\", \"New fact\"). */\nexport function DashboardAction({ emphasis, icon, label, onClick, testId }: DashboardActionProps) {\n return (\n <Button\n variant={emphasis === 'primary' ? 'default' : 'ghost'}\n size=\"sm\"\n className={\n emphasis === 'primary'\n ? 'h-8 gap-1.5 px-3 text-sm pointer-coarse:h-11'\n : DASHBOARD_QUIET_ACTION_CLASS\n }\n onClick={onClick}\n data-testid={testId}\n >\n {icon}\n {label}\n </Button>\n )\n}\n","import type { ReactNode } from 'react'\nimport type { LucideIcon } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { EmptyStrip, SectionHeader } from './sections'\n\nexport interface FactsStripRow {\n id: string\n leading?: ReactNode\n title: string\n /** Right-aligned stamp: a date or a time. */\n time?: string\n onSelect?: () => void\n}\n\nexport interface FactsStripGroup {\n /** Captions the group (\"Upcoming\", \"Created\"); an empty group is not rendered. */\n caption: string\n rows: FactsStripRow[]\n /** Test id of every row in this group. Defaults to `${testId}-row`. */\n rowTestId?: string\n}\n\nexport interface FactsStripEmpty {\n icon: LucideIcon\n label: ReactNode\n description?: ReactNode\n onSelect?: () => void\n testId?: string\n}\n\nexport interface FactsStripProps {\n icon?: LucideIcon\n title: string\n count?: number\n onOpen?: () => void\n action?: ReactNode\n groups: FactsStripGroup[]\n empty?: FactsStripEmpty\n className?: string\n /** Root test id; the title button gets `${testId}-open`. */\n testId?: string\n}\n\n/**\n * A glanceable band of captioned groups (facts: upcoming, recently created).\n * Not a third list page: callers hand it a few rows per group.\n */\nexport function FactsStrip({\n icon,\n title,\n count,\n onOpen,\n action,\n groups,\n empty,\n className,\n testId,\n}: FactsStripProps) {\n const filled = groups.filter((g) => g.rows.length > 0)\n return (\n <section\n className={cn('flex min-w-0 flex-col gap-1', className)}\n data-slot=\"facts-strip\"\n data-testid={testId}\n >\n <SectionHeader\n icon={icon}\n title={title}\n count={count}\n onOpen={onOpen}\n openTestId={testId && `${testId}-open`}\n action={action}\n />\n {filled.length === 0\n ? empty && (\n <EmptyStrip\n icon={empty.icon}\n label={empty.label}\n description={empty.description}\n onSelect={empty.onSelect}\n testId={empty.testId}\n />\n )\n : filled.map((group) => (\n <div key={group.caption} className=\"min-w-0\">\n <p className=\"px-3 pb-1 pt-1 text-right text-xs text-muted-foreground\">\n {group.caption}\n </p>\n <ul>\n {group.rows.map((row) => (\n <li key={row.id}>\n <button\n type=\"button\"\n onClick={row.onSelect}\n title={row.title}\n className=\"flex w-full min-w-0 items-center gap-3 rounded-md px-3 py-2 text-left transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring [&:hover]:bg-muted pointer-coarse:min-h-11\"\n data-testid={group.rowTestId ?? (testId && `${testId}-row`)}\n >\n {row.leading}\n <span className=\"min-w-0 flex-1 truncate text-sm text-foreground\">\n {row.title}\n </span>\n {row.time && (\n <span className=\"shrink-0 text-xs tabular-nums text-muted-foreground\">\n {row.time}\n </span>\n )}\n </button>\n </li>\n ))}\n </ul>\n </div>\n ))}\n </section>\n )\n}\n","import type { ReactNode } from 'react'\nimport type { LucideIcon } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { ActionLink } from '../components/ActionLink'\nimport { EmptyStrip, SectionHeader } from './sections'\n\n/** One listed item. Source-agnostic: a chat, a file. */\nexport interface RecentRow {\n id: string\n /** Bare entity mark (an icon carries its own identity; no tinted box). */\n leading?: ReactNode\n title: string\n subtitle?: string\n /** Pinned right on the title line, like a message time. Hidden when `trailing` is set. */\n time?: string\n onSelect?: () => void\n /** Real link target; `onSelect` still fires on a plain click (see `ActionLink`). */\n href?: string\n /** A control rendered beside the row, outside its button. */\n trailing?: ReactNode\n}\n\nexport interface RecentListEmpty {\n icon?: LucideIcon\n label: ReactNode\n description?: ReactNode\n /** Makes the empty strip an invitation button. */\n onSelect?: () => void\n}\n\nexport interface RecentListProps {\n icon?: LucideIcon\n title: string\n count?: number\n /** Opens the full list; makes the header title a button. */\n onOpen?: () => void\n /** Real link target of the header title (with `onOpen`, plain clicks call `onOpen`). */\n openHref?: string\n /** The section's one quiet header action. */\n action?: ReactNode\n rows: RecentRow[]\n /** Names the right-hand column (\"Added\", \"Messaged\"). */\n caption?: string\n /** What an empty section says. A plain muted line unless `onSelect` is set. */\n empty?: RecentListEmpty\n className?: string\n /** Root test id; derived ids: `-open`, `-caption`, `-row`, `-empty-action`. */\n testId?: string\n}\n\n/**\n * A titled list of recent items (files, chats): plain rows under a quiet\n * header. An empty list is one tonal strip that invites the first item.\n */\nexport function RecentList({\n icon,\n title,\n count,\n onOpen,\n openHref,\n action,\n rows,\n caption,\n empty,\n className,\n testId,\n}: RecentListProps) {\n return (\n <section\n className={cn('flex min-w-0 flex-col gap-1', className)}\n data-slot=\"recent-list\"\n data-testid={testId}\n >\n <SectionHeader\n icon={icon}\n title={title}\n count={count}\n onOpen={onOpen}\n openHref={openHref}\n openTestId={testId && `${testId}-open`}\n action={action}\n />\n {rows.length === 0 ? (\n empty?.onSelect ? (\n <EmptyStrip\n icon={empty.icon}\n label={empty.label}\n description={empty.description}\n onSelect={empty.onSelect}\n testId={testId && `${testId}-empty-action`}\n />\n ) : (\n <p className=\"px-1 py-3 text-sm text-muted-foreground\">\n {empty?.description ?? empty?.label}\n </p>\n )\n ) : (\n <>\n {caption && (\n <p className=\"sr-only\" data-testid={testId && `${testId}-caption`}>\n {caption}\n </p>\n )}\n <ul>\n {rows.map((row) => (\n <li\n key={row.id}\n className=\"relative flex items-center rounded-md transition-colors [&:hover]:bg-muted has-[:focus-visible]:bg-muted\"\n data-slot=\"recent-row\"\n >\n <ActionLink\n href={row.href}\n onSelect={row.onSelect}\n title={row.title}\n className={cn(\n 'flex min-w-0 flex-1 items-start gap-3 rounded-md px-3 py-2 text-left focus-visible:outline-none',\n row.onSelect && 'cursor-pointer',\n 'pointer-coarse:min-h-11'\n )}\n data-testid={testId && `${testId}-row`}\n >\n {row.leading}\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-baseline gap-2\">\n <span className=\"min-w-0 flex-1 truncate text-sm font-medium text-foreground\">\n {row.title}\n </span>\n {!row.trailing && row.time && (\n <span className=\"shrink-0 text-xs tabular-nums text-muted-foreground\">\n {row.time}\n </span>\n )}\n </div>\n {row.subtitle && (\n <p className=\"mt-0.5 truncate text-xs text-muted-foreground\">\n {row.subtitle}\n </p>\n )}\n </div>\n </ActionLink>\n {row.trailing ? <div className=\"shrink-0 pr-3\">{row.trailing}</div> : null}\n </li>\n ))}\n </ul>\n </>\n )}\n </section>\n )\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/home/HomeLayout.tsx","../src/home/CreateTile.tsx","../src/home/DashboardParts.tsx","../src/home/FactsStrip.tsx","../src/home/RecentList.tsx"],"names":["cn","jsx","jsxs"],"mappings":"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","file":"chunk-5WLORPGX.js","sourcesContent":["import type { ReactNode } from 'react'\nimport { cn } from '@arbidocs/react/ui'\nimport { Callout } from '../components/Callout'\n\n/** Column of the home page: greeting header, then the content. */\nexport function HomeFrame({\n testId = 'home-page',\n children,\n}: {\n testId?: string\n children: ReactNode\n}) {\n return (\n <div data-slot=\"home-frame\" data-testid={testId} className=\"flex h-full flex-col\">\n {children}\n </div>\n )\n}\n\n/** Content area under the header; the pages inside own their scrolling. */\nexport function HomeMain({ children }: { children: ReactNode }) {\n return (\n <main\n data-slot=\"home-main\"\n className=\"min-h-0 min-w-sidebar flex-1 overflow-hidden bg-background\"\n >\n {children}\n </main>\n )\n}\n\n/**\n * Scroll container that spans the full width (so its scrollbar rides the window edge) with the\n * content centred in a bounded column.\n */\nexport function HomeCenteredScroll({ children }: { children: ReactNode }) {\n return (\n <div data-slot=\"home-scroll\" className=\"h-full overflow-y-auto\">\n <div className=\"mx-auto max-w-6xl\">{children}</div>\n </div>\n )\n}\n\n/** Bounded, centred column for a full-height child (the workspaces table). */\nexport function HomeCenteredColumn({\n className,\n children,\n}: {\n className?: string\n children: ReactNode\n}) {\n return (\n <div\n data-slot=\"home-column\"\n className={cn('mx-auto h-full max-w-6xl px-4 pb-4 sm:px-8', className)}\n >\n {children}\n </div>\n )\n}\n\n/** Centred error notice for a page that could not load. */\nexport function HomeLoadError({\n title,\n body,\n testId,\n}: {\n title: string\n body: string\n testId?: string\n}) {\n return (\n <div\n data-slot=\"home-load-error\"\n className=\"flex h-full flex-col items-center justify-center p-8\"\n >\n <div className=\"w-full max-w-md\">\n <Callout variant=\"danger\" title={title} body={body} testId={testId} />\n </div>\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { Plus } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\n\nexport interface CreateTileProps {\n /** Visible label, e.g. \"New workspace\". */\n label: string\n /** Accessible name; defaults to `label`. */\n ariaLabel?: string\n onSelect?: () => void\n /** One line explaining what is being created (first-run empty state). */\n help?: ReactNode\n /** When set, the tile is disabled and shows this explanation instead of `help`. */\n disabledReason?: string\n className?: string\n testId?: string\n}\n\n/**\n * The \"create\" tile. Sits in the grid beside the workspace tiles at the same\n * height, in the same tonal family: no dashed outline, no shadow.\n */\nexport function CreateTile({\n label,\n ariaLabel,\n onSelect,\n help,\n disabledReason,\n className,\n testId,\n}: CreateTileProps) {\n const disabled = !!disabledReason\n const select = disabled ? undefined : onSelect\n return (\n <div\n className={cn(\n 'flex min-h-40 w-full flex-col items-center justify-center gap-1 rounded-lg p-4 text-muted-foreground border border-border bg-card shadow-xs transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n disabled\n ? 'cursor-not-allowed opacity-60'\n : 'cursor-pointer hover:border-ring/50 hover:bg-accent/40 hover:text-foreground',\n className\n )}\n onClick={select}\n onKeyDown={(event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n select?.()\n }\n }}\n role=\"button\"\n tabIndex={0}\n aria-disabled={disabled || undefined}\n title={disabledReason}\n aria-label={ariaLabel ?? label}\n data-slot=\"create-tile\"\n data-testid={testId}\n >\n <span className=\"inline-flex flex-col items-center gap-2 text-sm font-medium\">\n <Plus className=\"size-6\" aria-hidden=\"true\" />\n {label}\n </span>\n {(disabledReason ?? help) && (\n <p className=\"max-w-64 px-4 text-center text-xs leading-snug text-muted-foreground\">\n {disabledReason ?? help}\n </p>\n )}\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { Button, cn } from '@arbidocs/react/ui'\n\n/** A section's quiet header action: ghost, small, still 44px on touch. */\nexport const DASHBOARD_QUIET_ACTION_CLASS =\n 'h-8 gap-1.5 px-2 text-sm bg-transparent text-muted-foreground hover:bg-muted hover:text-foreground pointer-coarse:h-11'\n\n/** Column of the workspace dashboard's bands. A container, so children can use `@2xl:` queries. */\nexport function DashboardRoot({\n testId,\n className,\n children,\n}: {\n testId?: string\n className?: string\n children: ReactNode\n}) {\n return (\n <div\n data-slot=\"dashboard\"\n data-testid={testId}\n className={cn('flex flex-col gap-6', className)}\n >\n {children}\n </div>\n )\n}\n\n/** A dashboard band: `start` is the tiles under the identity bar, `recent` the lists with an eyebrow. */\nexport function DashboardBand({\n kind,\n children,\n}: {\n kind: 'start' | 'recent'\n children: ReactNode\n}) {\n return (\n <div\n data-slot=\"dashboard-band\"\n data-kind={kind}\n className={kind === 'start' ? 'mt-2' : 'mt-4 flex flex-col gap-3'}\n >\n {children}\n </div>\n )\n}\n\n/** Two equal columns from the `@2xl` container width, one below it. */\nexport function DashboardColumns({ children }: { children: ReactNode }) {\n return (\n <div data-slot=\"dashboard-columns\" className=\"grid gap-8 @2xl:grid-cols-2\">\n {children}\n </div>\n )\n}\n\n/** A fact row's mark: a quiet dot. */\nexport function FactMark() {\n return (\n <span\n data-slot=\"fact-mark\"\n className=\"mx-1 size-1.5 shrink-0 rounded-full bg-muted-foreground/40\"\n aria-hidden\n />\n )\n}\n\nexport interface DashboardActionProps {\n /** `primary` is the page's one filled action; `quiet` the ghost header actions. */\n emphasis: 'primary' | 'quiet'\n icon: ReactNode\n label: string\n onClick: () => void\n testId?: string\n}\n\n/** Header action of a dashboard section (\"New chat\", \"New fact\"). */\nexport function DashboardAction({ emphasis, icon, label, onClick, testId }: DashboardActionProps) {\n return (\n <Button\n variant={emphasis === 'primary' ? 'default' : 'ghost'}\n size=\"sm\"\n className={\n emphasis === 'primary'\n ? 'h-8 gap-1.5 px-3 text-sm pointer-coarse:h-11'\n : DASHBOARD_QUIET_ACTION_CLASS\n }\n onClick={onClick}\n data-testid={testId}\n >\n {icon}\n {label}\n </Button>\n )\n}\n","import type { ReactNode } from 'react'\nimport type { LucideIcon } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { EmptyStrip, SectionHeader } from './sections'\n\nexport interface FactsStripRow {\n id: string\n leading?: ReactNode\n title: string\n /** Right-aligned stamp: a date or a time. */\n time?: string\n onSelect?: () => void\n}\n\nexport interface FactsStripGroup {\n /** Captions the group (\"Upcoming\", \"Created\"); an empty group is not rendered. */\n caption: string\n rows: FactsStripRow[]\n /** Test id of every row in this group. Defaults to `${testId}-row`. */\n rowTestId?: string\n}\n\nexport interface FactsStripEmpty {\n icon: LucideIcon\n label: ReactNode\n description?: ReactNode\n onSelect?: () => void\n testId?: string\n}\n\nexport interface FactsStripProps {\n icon?: LucideIcon\n title: string\n count?: number\n onOpen?: () => void\n action?: ReactNode\n groups: FactsStripGroup[]\n empty?: FactsStripEmpty\n className?: string\n /** Root test id; the title button gets `${testId}-open`. */\n testId?: string\n}\n\n/**\n * A glanceable band of captioned groups (facts: upcoming, recently created).\n * Not a third list page: callers hand it a few rows per group.\n */\nexport function FactsStrip({\n icon,\n title,\n count,\n onOpen,\n action,\n groups,\n empty,\n className,\n testId,\n}: FactsStripProps) {\n const filled = groups.filter((g) => g.rows.length > 0)\n return (\n <section\n className={cn('flex min-w-0 flex-col gap-1', className)}\n data-slot=\"facts-strip\"\n data-testid={testId}\n >\n <SectionHeader\n icon={icon}\n title={title}\n count={count}\n onOpen={onOpen}\n openTestId={testId && `${testId}-open`}\n action={action}\n />\n {filled.length === 0\n ? empty && (\n <EmptyStrip\n icon={empty.icon}\n label={empty.label}\n description={empty.description}\n onSelect={empty.onSelect}\n testId={empty.testId}\n />\n )\n : filled.map((group) => (\n <div key={group.caption} className=\"min-w-0\">\n <p className=\"px-3 pb-1 pt-1 text-right text-xs text-muted-foreground\">\n {group.caption}\n </p>\n <ul>\n {group.rows.map((row) => (\n <li key={row.id}>\n <button\n type=\"button\"\n onClick={row.onSelect}\n title={row.title}\n className=\"flex w-full min-w-0 items-center gap-3 rounded-md px-3 py-2 text-left transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring [&:hover]:bg-muted pointer-coarse:min-h-11\"\n data-testid={group.rowTestId ?? (testId && `${testId}-row`)}\n >\n {row.leading}\n <span className=\"min-w-0 flex-1 truncate text-sm text-foreground\">\n {row.title}\n </span>\n {row.time && (\n <span className=\"shrink-0 text-xs tabular-nums text-muted-foreground\">\n {row.time}\n </span>\n )}\n </button>\n </li>\n ))}\n </ul>\n </div>\n ))}\n </section>\n )\n}\n","import type { ReactNode } from 'react'\nimport type { LucideIcon } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { ActionLink } from '../components/ActionLink'\nimport { EmptyStrip, SectionHeader } from './sections'\n\n/** One listed item. Source-agnostic: a chat, a file. */\nexport interface RecentRow {\n id: string\n /** Bare entity mark (an icon carries its own identity; no tinted box). */\n leading?: ReactNode\n title: string\n subtitle?: string\n /** Pinned right on the title line, like a message time. Hidden when `trailing` is set. */\n time?: string\n onSelect?: () => void\n /** Real link target; `onSelect` still fires on a plain click (see `ActionLink`). */\n href?: string\n /** A control rendered beside the row, outside its button. */\n trailing?: ReactNode\n}\n\nexport interface RecentListEmpty {\n icon?: LucideIcon\n label: ReactNode\n description?: ReactNode\n /** Makes the empty strip an invitation button. */\n onSelect?: () => void\n}\n\nexport interface RecentListProps {\n icon?: LucideIcon\n title: string\n count?: number\n /** Opens the full list; makes the header title a button. */\n onOpen?: () => void\n /** Real link target of the header title (with `onOpen`, plain clicks call `onOpen`). */\n openHref?: string\n /** The section's one quiet header action. */\n action?: ReactNode\n rows: RecentRow[]\n /** Names the right-hand column (\"Added\", \"Messaged\"). */\n caption?: string\n /** What an empty section says. A plain muted line unless `onSelect` is set. */\n empty?: RecentListEmpty\n className?: string\n /** Root test id; derived ids: `-open`, `-caption`, `-row`, `-empty-action`. */\n testId?: string\n}\n\n/**\n * A titled list of recent items (files, chats): plain rows under a quiet\n * header. An empty list is one tonal strip that invites the first item.\n */\nexport function RecentList({\n icon,\n title,\n count,\n onOpen,\n openHref,\n action,\n rows,\n caption,\n empty,\n className,\n testId,\n}: RecentListProps) {\n return (\n <section\n className={cn('flex min-w-0 flex-col gap-1', className)}\n data-slot=\"recent-list\"\n data-testid={testId}\n >\n <SectionHeader\n icon={icon}\n title={title}\n count={count}\n onOpen={onOpen}\n openHref={openHref}\n openTestId={testId && `${testId}-open`}\n action={action}\n />\n {rows.length === 0 ? (\n empty?.onSelect ? (\n <EmptyStrip\n icon={empty.icon}\n label={empty.label}\n description={empty.description}\n onSelect={empty.onSelect}\n testId={testId && `${testId}-empty-action`}\n />\n ) : (\n <p className=\"px-1 py-3 text-sm text-muted-foreground\">\n {empty?.description ?? empty?.label}\n </p>\n )\n ) : (\n <>\n {caption && (\n <p className=\"sr-only\" data-testid={testId && `${testId}-caption`}>\n {caption}\n </p>\n )}\n <ul>\n {rows.map((row) => (\n <li\n key={row.id}\n className=\"relative flex items-center rounded-md transition-colors [&:hover]:bg-muted has-[:focus-visible]:bg-muted\"\n data-slot=\"recent-row\"\n >\n <ActionLink\n href={row.href}\n onSelect={row.onSelect}\n title={row.title}\n className={cn(\n 'flex min-w-0 flex-1 items-start gap-3 rounded-md px-3 py-2 text-left focus-visible:outline-none',\n row.onSelect && 'cursor-pointer',\n 'pointer-coarse:min-h-11'\n )}\n data-testid={testId && `${testId}-row`}\n >\n {row.leading}\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-baseline gap-2\">\n <span className=\"min-w-0 flex-1 truncate text-sm font-medium text-foreground\">\n {row.title}\n </span>\n {!row.trailing && row.time && (\n <span className=\"shrink-0 text-xs tabular-nums text-muted-foreground\">\n {row.time}\n </span>\n )}\n </div>\n {row.subtitle && (\n <p className=\"mt-0.5 truncate text-xs text-muted-foreground\">\n {row.subtitle}\n </p>\n )}\n </div>\n </ActionLink>\n {row.trailing ? <div className=\"shrink-0 pr-3\">{row.trailing}</div> : null}\n </li>\n ))}\n </ul>\n </>\n )}\n </section>\n )\n}\n"]}
|
|
@@ -2,11 +2,59 @@
|
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
4
|
var chunkSIB6C7P7_cjs = require('./chunk-SIB6C7P7.cjs');
|
|
5
|
-
var react = require('react');
|
|
6
5
|
var lucideReact = require('lucide-react');
|
|
7
|
-
var ui = require('@arbidocs/react/ui');
|
|
8
6
|
var jsxRuntime = require('react/jsx-runtime');
|
|
7
|
+
var react = require('react');
|
|
8
|
+
var ui = require('@arbidocs/react/ui');
|
|
9
9
|
|
|
10
|
+
function RowNavigatorControls({
|
|
11
|
+
total,
|
|
12
|
+
currentIndex,
|
|
13
|
+
onGo,
|
|
14
|
+
testId,
|
|
15
|
+
itemLabel = "row",
|
|
16
|
+
keepWhenEmpty = false
|
|
17
|
+
}) {
|
|
18
|
+
if (total === 0 && !keepWhenEmpty) return null;
|
|
19
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex shrink-0 items-center gap-0.5", "data-testid": `${testId}-nav`, children: [
|
|
20
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
21
|
+
"button",
|
|
22
|
+
{
|
|
23
|
+
type: "button",
|
|
24
|
+
"aria-label": `Previous ${itemLabel}`,
|
|
25
|
+
"data-testid": `${testId}-nav-prev`,
|
|
26
|
+
disabled: total === 0 || currentIndex === null || currentIndex <= 0,
|
|
27
|
+
onClick: () => onGo((currentIndex ?? 0) - 1),
|
|
28
|
+
className: "rounded p-0.5 text-muted-foreground enabled:hover:bg-accent enabled:hover:text-foreground disabled:opacity-30 pointer-coarse:size-11! shrink-0",
|
|
29
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronLeft, { className: "h-4 w-4" })
|
|
30
|
+
}
|
|
31
|
+
),
|
|
32
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
33
|
+
"span",
|
|
34
|
+
{
|
|
35
|
+
className: "whitespace-nowrap tabular-nums text-sm font-light text-muted-foreground",
|
|
36
|
+
"data-testid": `${testId}-nav-position`,
|
|
37
|
+
children: [
|
|
38
|
+
currentIndex !== null ? currentIndex + 1 : "\u2013",
|
|
39
|
+
" / ",
|
|
40
|
+
total > 0 ? total : "\u2013"
|
|
41
|
+
]
|
|
42
|
+
}
|
|
43
|
+
),
|
|
44
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
45
|
+
"button",
|
|
46
|
+
{
|
|
47
|
+
type: "button",
|
|
48
|
+
"aria-label": `Next ${itemLabel}`,
|
|
49
|
+
"data-testid": `${testId}-nav-next`,
|
|
50
|
+
disabled: total === 0 || currentIndex !== null && currentIndex >= total - 1,
|
|
51
|
+
onClick: () => onGo(currentIndex === null ? 0 : currentIndex + 1),
|
|
52
|
+
className: "rounded p-0.5 text-muted-foreground enabled:hover:bg-accent enabled:hover:text-foreground disabled:opacity-30 pointer-coarse:size-11! shrink-0",
|
|
53
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRight, { className: "h-4 w-4" })
|
|
54
|
+
}
|
|
55
|
+
)
|
|
56
|
+
] });
|
|
57
|
+
}
|
|
10
58
|
var CHIP_ROW_H = 24;
|
|
11
59
|
var CHIP_GAP = 4;
|
|
12
60
|
function labelChipClampHeight(rowHeight) {
|
|
@@ -208,6 +256,7 @@ var LabelMultiSelectView = react.memo(function LabelMultiSelectView2({
|
|
|
208
256
|
exports.DEFAULT_LABEL_MULTI_SELECT_LABELS = DEFAULT_LABEL_MULTI_SELECT_LABELS;
|
|
209
257
|
exports.LabelMultiSelectView = LabelMultiSelectView;
|
|
210
258
|
exports.LabelPickerList = LabelPickerList;
|
|
259
|
+
exports.RowNavigatorControls = RowNavigatorControls;
|
|
211
260
|
exports.labelChipClampHeight = labelChipClampHeight;
|
|
212
|
-
//# sourceMappingURL=chunk-
|
|
213
|
-
//# sourceMappingURL=chunk-
|
|
261
|
+
//# sourceMappingURL=chunk-5Y6V7F6W.cjs.map
|
|
262
|
+
//# sourceMappingURL=chunk-5Y6V7F6W.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/RowNavigatorControls.tsx","../src/files/cells/LabelMultiSelect.tsx"],"names":["jsx","ChevronLeft","jsxs","ChevronRight","useMemo","useState","Command","CommandInput","CommandList","CommandEmpty","CommandGroup","CommandItem","Check","Minus","PencilLine","memo","LabelMultiSelectView","useRef","useEffect","Popover","PopoverTrigger","CellHoverIcon","Fragment","PopoverContent"],"mappings":"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","file":"chunk-5Y6V7F6W.cjs","sourcesContent":["/**\n * RowNavigatorControls\n *\n * The bare ‹ n / N › stepper shared by every list navigator — the Files table\n * (GridRowNavigator, over AG Grid's displayed rows) and the Files gallery\n * (ExplorerFileNavigator, over the explorer's displayed tiles). Presentation\n * only: the owner resolves what \"current\" and \"total\" mean and what stepping\n * does, so the two surfaces stay pixel-identical while their sources differ.\n */\n\nimport { ChevronLeft, ChevronRight } from 'lucide-react'\n\nexport interface RowNavigatorControlsProps {\n /** Rows currently displayed. Renders nothing at 0. */\n total: number\n /** Zero-based position of the open row, or null for \"– / N\". */\n currentIndex: number | null\n /** Step to a zero-based index (already clamped by the caller if it cares). */\n onGo: (index: number) => void\n /** Prefix for every `data-testid` this control emits. */\n testId: string\n /** Noun for the buttons' aria-labels (\"Previous fact\" / \"Next document\"). */\n itemLabel?: string\n /**\n * Render a disabled \"– / –\" stepper instead of nothing when there is nothing\n * to step through. The gallery keeps it so a folder-only view doesn't drop a\n * control out of the toolbar (and shift everything left) on every folder hop;\n * the table, whose empty state replaces the whole grid, hides it.\n */\n keepWhenEmpty?: boolean\n}\n\nexport function RowNavigatorControls({\n total,\n currentIndex,\n onGo,\n testId,\n itemLabel = 'row',\n keepWhenEmpty = false,\n}: RowNavigatorControlsProps) {\n if (total === 0 && !keepWhenEmpty) return null\n\n return (\n <span className=\"flex shrink-0 items-center gap-0.5\" data-testid={`${testId}-nav`}>\n <button\n type=\"button\"\n aria-label={`Previous ${itemLabel}`}\n data-testid={`${testId}-nav-prev`}\n disabled={total === 0 || currentIndex === null || currentIndex <= 0}\n onClick={() => onGo((currentIndex ?? 0) - 1)}\n className=\"rounded p-0.5 text-muted-foreground enabled:hover:bg-accent enabled:hover:text-foreground disabled:opacity-30 pointer-coarse:size-11! shrink-0\"\n >\n <ChevronLeft className=\"h-4 w-4\" />\n </button>\n <span\n className=\"whitespace-nowrap tabular-nums text-sm font-light text-muted-foreground\"\n data-testid={`${testId}-nav-position`}\n >\n {currentIndex !== null ? currentIndex + 1 : '–'} / {total > 0 ? total : '–'}\n </span>\n <button\n type=\"button\"\n aria-label={`Next ${itemLabel}`}\n data-testid={`${testId}-nav-next`}\n disabled={total === 0 || (currentIndex !== null && currentIndex >= total - 1)}\n onClick={() => onGo(currentIndex === null ? 0 : currentIndex + 1)}\n className=\"rounded p-0.5 text-muted-foreground enabled:hover:bg-accent enabled:hover:text-foreground disabled:opacity-30 pointer-coarse:size-11! shrink-0\"\n >\n <ChevronRight className=\"h-4 w-4\" />\n </button>\n </span>\n )\n}\n","import { memo, useEffect, useMemo, useRef, useState } from 'react'\nimport { Check, Minus, PencilLine } from 'lucide-react'\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from '@arbidocs/react/ui'\nimport { CellHoverIcon } from './HoverIconCell'\n\n/** Chip row metrics (px): a chip is 24px tall with a 4px gap, as in the Facts labels cell. */\nconst CHIP_ROW_H = 24\nconst CHIP_GAP = 4\n\n/** Max height of the chip container: whole chip rows that fit `rowHeight`, never half a row. */\nexport function labelChipClampHeight(rowHeight: number): number {\n const rows = Math.max(1, Math.floor((rowHeight + CHIP_GAP) / (CHIP_ROW_H + CHIP_GAP)))\n return CHIP_ROW_H * rows + CHIP_GAP * (rows - 1)\n}\n\n/** One label a document can carry. `color` is any CSS colour (the host derives it from the id). */\nexport interface LabelOption {\n id: string\n name: string\n color: string\n}\n\n/** Every fixed string of the label picker. */\nexport interface LabelMultiSelectLabels {\n searchPlaceholder: string\n noLabels: string\n create: (name: string) => string\n editLabel: string\n}\n\nexport const DEFAULT_LABEL_MULTI_SELECT_LABELS: LabelMultiSelectLabels = {\n searchPlaceholder: 'Search or create...',\n noLabels: 'No labels yet',\n create: (name) => `Create “${name}”`,\n editLabel: 'Edit field',\n}\n\nexport interface LabelMultiSelectViewProps {\n options: LabelOption[]\n /** Ids of the labels applied to the row. */\n appliedIds: ReadonlySet<string>\n onToggle: (id: string) => void\n /** Create a label named `name` and apply it (the host decides what a non-member may do). */\n onCreate: (name: string) => void\n /** Opens the label editor; omit to hide the per-option edit button. */\n onEditLabels?: () => void\n /** The grid row height: clamps the chips to the rows that fully fit, with an ellipsis. */\n rowHeight?: number\n labels?: Partial<LabelMultiSelectLabels>\n}\n\nconst CHECK_BOX = 'flex shrink-0 items-center justify-center rounded border-2'\n\nexport interface LabelPickerListProps {\n options: LabelOption[]\n appliedIds: ReadonlySet<string>\n mixedIds?: ReadonlySet<string>\n onToggle: (id: string) => void\n /** Create a label named `name`; omit to hide \"Create ...\" (the picker only toggles). */\n onCreate?: (name: string) => void\n /**\n * Further ways to create from the typed name, each its own row under \"Create ...\" (e.g. one per\n * kind of tag). Enter still runs `onCreate`.\n */\n moreCreates?: { label: (name: string) => string; onCreate: (name: string) => void }[]\n /** Opens the label editor; omit to hide the per-option edit button. */\n onEditLabels?: () => void\n labels?: Partial<LabelMultiSelectLabels>\n}\n\n/**\n * Searchable list of labels with check boxes: type to filter, Enter (or the \"Create ...\" row, shown\n * whenever the typed name is not a label yet, below any labels that partly match it) creates it. Used by the grid cell and the document form field.\n */\nexport function LabelPickerList({\n options,\n appliedIds,\n mixedIds,\n onToggle,\n onCreate,\n moreCreates,\n onEditLabels,\n labels,\n}: LabelPickerListProps) {\n const l = useMemo(() => ({ ...DEFAULT_LABEL_MULTI_SELECT_LABELS, ...labels }), [labels])\n const [search, setSearch] = useState('')\n const trimmed = search.trim()\n const matchesExisting = options.some((o) => o.name.toLowerCase() === trimmed.toLowerCase())\n\n const create = () => {\n onCreate?.(trimmed)\n setSearch('')\n }\n\n return (\n <Command shouldFilter>\n <CommandInput\n placeholder={l.searchPlaceholder}\n value={search}\n onValueChange={setSearch}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && onCreate && trimmed && !matchesExisting) {\n e.preventDefault()\n create()\n }\n }}\n />\n <CommandList>\n {/* Nothing matches and nothing to create: say so. A new name is offered below instead. */}\n {!(trimmed && onCreate) && (\n <CommandEmpty>\n <span className=\"text-muted-foreground\">{l.noLabels}</span>\n </CommandEmpty>\n )}\n <CommandGroup>\n {options.map((o) => {\n const isApplied = appliedIds.has(o.id)\n const isMixed = mixedIds?.has(o.id)\n return (\n <CommandItem\n key={o.id}\n value={o.name}\n onSelect={() => onToggle(o.id)}\n onPointerDown={(e) => e.preventDefault()}\n className=\"group/label cursor-pointer\"\n data-testid={`label-select-${o.id}`}\n >\n <span\n className={`mr-2 size-4 ${CHECK_BOX} ${isApplied ? '' : 'bg-background'}`}\n style={{\n borderColor: o.color,\n backgroundColor: isApplied ? o.color : undefined,\n }}\n >\n {isApplied && <Check className=\"size-3 text-white\" strokeWidth={3} />}\n {isMixed && <Minus className=\"size-3\" style={{ color: o.color }} />}\n </span>\n <span className=\"flex-1 text-sm\">{o.name}</span>\n {onEditLabels && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation()\n onEditLabels()\n }}\n onPointerDown={(e) => e.preventDefault()}\n className=\"shrink-0 rounded p-0.5 opacity-0 hover:bg-muted focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring group-hover/label:opacity-100 group-data-[selected=true]/label:opacity-100 pointer-coarse:flex pointer-coarse:size-11 pointer-coarse:items-center pointer-coarse:justify-center pointer-coarse:opacity-100\"\n title={l.editLabel}\n aria-label={l.editLabel}\n >\n <PencilLine className=\"size-3 text-muted-foreground\" />\n </button>\n )}\n </CommandItem>\n )\n })}\n </CommandGroup>\n </CommandList>\n {trimmed && onCreate && !matchesExisting && (\n <div className=\"border-t border-border p-1\" data-slot=\"label-picker-create\">\n {[{ label: l.create, onCreate }, ...(moreCreates ?? [])].map((c, i) => (\n <button\n key={i}\n type=\"button\"\n onClick={() => {\n c.onCreate(trimmed)\n setSearch('')\n }}\n onPointerDown={(e) => e.preventDefault()}\n className=\"w-full cursor-pointer rounded px-2 py-1.5 text-left text-sm text-primary hover:bg-accent pointer-coarse:min-h-11\"\n >\n {c.label(trimmed)}\n </button>\n ))}\n </div>\n )}\n </Command>\n )\n}\n\n/**\n * Labels column cell: applied labels as bordered chips; click (or Enter) opens a popover to\n * toggle labels or type a new name and press Enter to create it. Empty cells show a pencil on\n * hover, keyboard focus and touch.\n */\nexport const LabelMultiSelectView = memo(function LabelMultiSelectView({\n options,\n appliedIds,\n onToggle,\n onCreate,\n onEditLabels,\n rowHeight = 52,\n labels,\n}: LabelMultiSelectViewProps) {\n const [open, setOpen] = useState(false)\n\n const applied = options.filter((o) => appliedIds.has(o.id))\n const maxHeight = labelChipClampHeight(rowHeight)\n const chipsRef = useRef<HTMLDivElement>(null)\n const [hasOverflow, setHasOverflow] = useState(false)\n useEffect(() => {\n const el = chipsRef.current\n if (!el) return\n const measure = () => setHasOverflow(el.scrollHeight > el.clientHeight + 1)\n measure()\n const ro = new ResizeObserver(measure)\n ro.observe(el)\n return () => ro.disconnect()\n }, [appliedIds, maxHeight, options])\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n data-slot=\"label-multi-select\"\n // No vertical clip/padding: at the minimum row height an `overflow-hidden` button would\n // crop the pills. The chip container is clamped to whole chip rows instead.\n className=\"group relative flex h-full w-full min-w-0 cursor-pointer items-center gap-1 pr-4 text-left hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring\"\n >\n {applied.length === 0 ? (\n <span className=\"flex-1\">\n <CellHoverIcon />\n </span>\n ) : (\n <>\n <div\n ref={chipsRef}\n className=\"flex min-w-0 flex-1 flex-wrap content-start gap-1 overflow-hidden\"\n style={{ maxHeight }}\n data-testid=\"label-multi-select-chips\"\n >\n {applied.map((o) => (\n <span\n key={o.id}\n className=\"inline-flex shrink-0 items-center gap-1 rounded border px-1.5 py-0.5 text-xs font-medium\"\n title={o.name}\n style={{ borderColor: o.color }}\n >\n <span\n className=\"flex size-3.5 shrink-0 items-center justify-center rounded\"\n style={{ backgroundColor: o.color }}\n >\n <Check className=\"size-2.5 text-white\" strokeWidth={3} />\n </span>\n <span className=\"max-w-[80px] truncate\">{o.name}</span>\n </span>\n ))}\n </div>\n {hasOverflow && (\n <span\n className=\"pointer-events-none absolute bottom-0.5 right-0.5 text-xs font-semibold leading-none text-muted-foreground\"\n aria-hidden\n data-testid=\"label-multi-select-overflow\"\n >\n …\n </span>\n )}\n </>\n )}\n </button>\n </PopoverTrigger>\n {open && (\n <PopoverContent className=\"w-[360px] p-0\" align=\"start\" side=\"bottom\" sideOffset={4}>\n <LabelPickerList\n options={options}\n appliedIds={appliedIds}\n onToggle={onToggle}\n onCreate={onCreate}\n onEditLabels={onEditLabels}\n labels={labels}\n />\n </PopoverContent>\n )}\n </Popover>\n )\n})\n"]}
|