@corva/ui 3.74.0-0 → 3.74.0-10
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/cjs-bundle/components/AddComment/Popover.js +1 -1
- package/cjs-bundle/components/AddComment/Popover.js.map +1 -1
- package/cjs-bundle/components/AddComment/components/Content.js +1 -1
- package/cjs-bundle/components/AddComment/components/Content.js.map +1 -1
- package/cjs-bundle/components/AssetEditor/AssetEditorAutocomplete.js +1 -1
- package/cjs-bundle/components/AssetEditor/AssetEditorAutocomplete.js.map +1 -1
- package/cjs-bundle/components/AssetEditorV2/index.js +1 -1
- package/cjs-bundle/components/AssetEditorV2/index.js.map +1 -1
- package/cjs-bundle/components/AttachmentLightbox/AttachmentDocument.js +2 -0
- package/cjs-bundle/components/AttachmentLightbox/AttachmentDocument.js.map +1 -0
- package/cjs-bundle/components/AttachmentLightbox/AttachmentLightbox.js +1 -1
- package/cjs-bundle/components/AttachmentLightbox/AttachmentLightbox.js.map +1 -1
- package/cjs-bundle/components/AttachmentLightbox/AttachmentLightbox.scss.js +1 -1
- package/cjs-bundle/components/AttachmentLightbox/AttachmentPreviewPane.js +2 -0
- package/cjs-bundle/components/AttachmentLightbox/AttachmentPreviewPane.js.map +1 -0
- package/cjs-bundle/components/AttachmentLightbox/copyImageToClipboard.js +2 -0
- package/cjs-bundle/components/AttachmentLightbox/copyImageToClipboard.js.map +1 -0
- package/cjs-bundle/components/AttachmentLightbox/downloadAttachment.js +2 -0
- package/cjs-bundle/components/AttachmentLightbox/downloadAttachment.js.map +1 -0
- package/cjs-bundle/components/AttachmentLightbox/useAttachmentLightbox.js +1 -1
- package/cjs-bundle/components/AttachmentLightbox/useAttachmentLightbox.js.map +1 -1
- package/cjs-bundle/components/AttachmentLightbox/useZoomPan.js +2 -0
- package/cjs-bundle/components/AttachmentLightbox/useZoomPan.js.map +1 -0
- package/cjs-bundle/components/AttachmentPreview/AttachmentActionsMenu.js +2 -0
- package/cjs-bundle/components/AttachmentPreview/AttachmentActionsMenu.js.map +1 -0
- package/cjs-bundle/components/AttachmentPreview/AttachmentDownloadLink.js +2 -0
- package/cjs-bundle/components/AttachmentPreview/AttachmentDownloadLink.js.map +1 -0
- package/cjs-bundle/components/AttachmentPreview/AttachmentImage.js +2 -0
- package/cjs-bundle/components/AttachmentPreview/AttachmentImage.js.map +1 -0
- package/cjs-bundle/components/AttachmentPreview/AttachmentPreview.js +1 -1
- package/cjs-bundle/components/AttachmentPreview/AttachmentPreview.js.map +1 -1
- package/cjs-bundle/components/AttachmentPreview/AttachmentPreview.scss.js +1 -1
- package/cjs-bundle/components/AttachmentPreview/AttachmentRow.js +1 -1
- package/cjs-bundle/components/AttachmentPreview/AttachmentRow.js.map +1 -1
- package/cjs-bundle/components/AttachmentPreview/AttachmentTile.js +1 -1
- package/cjs-bundle/components/AttachmentPreview/AttachmentTile.js.map +1 -1
- package/cjs-bundle/components/AttachmentPreview/useStoredAttachment.js +2 -0
- package/cjs-bundle/components/AttachmentPreview/useStoredAttachment.js.map +1 -0
- package/cjs-bundle/components/AttachmentPreview/useStoredAttachments.js +1 -1
- package/cjs-bundle/components/AttachmentPreview/useStoredAttachments.js.map +1 -1
- package/cjs-bundle/components/BICOffsetPickerDialog/index.js +1 -1
- package/cjs-bundle/components/BICOffsetPickerDialog/index.js.map +1 -1
- package/cjs-bundle/components/Casing/CasingTableV2/components/CasingJoints/Editor.js +1 -1
- package/cjs-bundle/components/Casing/CasingTableV2/components/CasingJoints/Editor.js.map +1 -1
- package/cjs-bundle/components/Casing/CasingTableV2/components/Component.js +1 -1
- package/cjs-bundle/components/Casing/CasingTableV2/components/Component.js.map +1 -1
- package/cjs-bundle/components/Casing/CasingTableV2/components/DrillPipe/Editor.js +1 -1
- package/cjs-bundle/components/Casing/CasingTableV2/components/DrillPipe/Editor.js.map +1 -1
- package/cjs-bundle/components/CollapsableSidebar.js +1 -1
- package/cjs-bundle/components/CollapsableSidebar.js.map +1 -1
- package/cjs-bundle/components/CommentCard/CommentCard.js +1 -1
- package/cjs-bundle/components/CommentCard/CommentCard.js.map +1 -1
- package/cjs-bundle/components/CommentCard/CommentCardReactions.js +1 -1
- package/cjs-bundle/components/CommentCard/CommentCardReactions.js.map +1 -1
- package/cjs-bundle/components/CommentCard/CommentMenu.js +1 -1
- package/cjs-bundle/components/CommentCard/CommentMenu.js.map +1 -1
- package/cjs-bundle/components/CommentComposer/CommentComposer.js +1 -1
- package/cjs-bundle/components/CommentComposer/CommentComposer.js.map +1 -1
- package/cjs-bundle/components/CommentComposer/CommentReplyInput.js +1 -1
- package/cjs-bundle/components/CommentComposer/CommentReplyInput.js.map +1 -1
- package/cjs-bundle/components/CommentComposer/ShareToChatRow.js +1 -1
- package/cjs-bundle/components/CommentComposer/ShareToChatRow.js.map +1 -1
- package/cjs-bundle/components/CommentComposer/useAttachmentUpload.js +1 -1
- package/cjs-bundle/components/CommentComposer/useAttachmentUpload.js.map +1 -1
- package/cjs-bundle/components/CommentInputNext/CommentInputNext.js +1 -1
- package/cjs-bundle/components/CommentInputNext/CommentInputNext.js.map +1 -1
- package/cjs-bundle/components/CommentInputNext/useFilePaste.js +2 -0
- package/cjs-bundle/components/CommentInputNext/useFilePaste.js.map +1 -0
- package/cjs-bundle/components/DevCenter/AppsDataProvider/AppsDataProvider.js +1 -1
- package/cjs-bundle/components/DevCenter/AppsDataProvider/AppsDataProvider.js.map +1 -1
- package/cjs-bundle/components/DevCenter/DevCenterAppContainer/DevCenterAppContainer.js +1 -1
- package/cjs-bundle/components/DevCenter/DevCenterAppContainer/DevCenterAppContainer.js.map +1 -1
- package/cjs-bundle/components/DevCenter/DevCenterAppContainer/components/CommentsSwitch/CommentsSwitchButton.js +1 -1
- package/cjs-bundle/components/DevCenter/DevCenterAppContainer/components/CommentsSwitch/CommentsSwitchButton.js.map +1 -1
- package/cjs-bundle/components/DevCenter/DevCenterAppContainer/components/NonPriorityMenus/NonPriorityMenus.js +1 -1
- package/cjs-bundle/components/DevCenter/DevCenterAppContainer/components/NonPriorityMenus/NonPriorityMenus.js.map +1 -1
- package/cjs-bundle/components/DevCenter/DevCenterAppContainer/components/PriorityMenus/PriorityMenus.js +1 -1
- package/cjs-bundle/components/DevCenter/DevCenterAppContainer/components/PriorityMenus/PriorityMenus.js.map +1 -1
- package/cjs-bundle/components/DevCenter/DevCenterAppContainer/effects/useAppMaximized.js +1 -1
- package/cjs-bundle/components/DevCenter/DevCenterAppContainer/effects/useAppMaximized.js.map +1 -1
- package/cjs-bundle/components/DevCenter/IsolatedDevCenterAppContainer/DevCenterIsolatedApp.js +1 -1
- package/cjs-bundle/components/DevCenter/IsolatedDevCenterAppContainer/DevCenterIsolatedApp.js.map +1 -1
- package/cjs-bundle/components/DevCenter/IsolatedDevCenterAppContainer/useFullscreenModes.js +2 -0
- package/cjs-bundle/components/DevCenter/IsolatedDevCenterAppContainer/useFullscreenModes.js.map +1 -0
- package/cjs-bundle/components/DocumentViewer/DocumentViewer.js +1 -1
- package/cjs-bundle/components/DocumentViewer/DocumentViewer.js.map +1 -1
- package/cjs-bundle/components/Drillstring/BHAComponentsTable/components/Agitator/Editor.js +1 -1
- package/cjs-bundle/components/Drillstring/BHAComponentsTable/components/Agitator/Editor.js.map +1 -1
- package/cjs-bundle/components/Drillstring/BHAComponentsTable/components/Bit/Editor.js +1 -1
- package/cjs-bundle/components/Drillstring/BHAComponentsTable/components/Bit/Editor.js.map +1 -1
- package/cjs-bundle/components/Drillstring/BHAComponentsTable/components/Component.js +1 -1
- package/cjs-bundle/components/Drillstring/BHAComponentsTable/components/Component.js.map +1 -1
- package/cjs-bundle/components/Drillstring/BHAComponentsTable/components/DrillCollar/Editor.js +1 -1
- package/cjs-bundle/components/Drillstring/BHAComponentsTable/components/DrillCollar/Editor.js.map +1 -1
- package/cjs-bundle/components/Drillstring/BHAComponentsTable/components/DrillPipe/Editor.js +1 -1
- package/cjs-bundle/components/Drillstring/BHAComponentsTable/components/DrillPipe/Editor.js.map +1 -1
- package/cjs-bundle/components/Drillstring/BHAComponentsTable/components/Jar/Editor.js +1 -1
- package/cjs-bundle/components/Drillstring/BHAComponentsTable/components/Jar/Editor.js.map +1 -1
- package/cjs-bundle/components/Drillstring/BHAComponentsTable/components/Lwd/Editor.js +1 -1
- package/cjs-bundle/components/Drillstring/BHAComponentsTable/components/Lwd/Editor.js.map +1 -1
- package/cjs-bundle/components/Drillstring/BHAComponentsTable/components/Mwd/Editor.js +1 -1
- package/cjs-bundle/components/Drillstring/BHAComponentsTable/components/Mwd/Editor.js.map +1 -1
- package/cjs-bundle/components/Drillstring/BHAComponentsTable/components/Pdm/Editor.js +1 -1
- package/cjs-bundle/components/Drillstring/BHAComponentsTable/components/Pdm/Editor.js.map +1 -1
- package/cjs-bundle/components/Drillstring/BHAComponentsTable/components/Rss/Editor.js +1 -1
- package/cjs-bundle/components/Drillstring/BHAComponentsTable/components/Rss/Editor.js.map +1 -1
- package/cjs-bundle/components/Drillstring/BHAComponentsTable/components/Stabilizer/Editor.js +1 -1
- package/cjs-bundle/components/Drillstring/BHAComponentsTable/components/Stabilizer/Editor.js.map +1 -1
- package/cjs-bundle/components/Drillstring/BHAComponentsTable/components/Sub/Editor.js +1 -1
- package/cjs-bundle/components/Drillstring/BHAComponentsTable/components/Sub/Editor.js.map +1 -1
- package/cjs-bundle/components/Drillstring/BHAComponentsTable/components/Ur/Editor.js +1 -1
- package/cjs-bundle/components/Drillstring/BHAComponentsTable/components/Ur/Editor.js.map +1 -1
- package/cjs-bundle/components/Drillstring/BHAComponentsTable/components/shared/ConfirmationPopup.js +1 -1
- package/cjs-bundle/components/Drillstring/BHAComponentsTable/components/shared/ConfirmationPopup.js.map +1 -1
- package/cjs-bundle/components/FeedItem/FeedItem.js +1 -1
- package/cjs-bundle/components/FeedItem/FeedItem.js.map +1 -1
- package/cjs-bundle/components/FeedItem/components/FeedComments.js +1 -1
- package/cjs-bundle/components/FeedItem/components/FeedComments.js.map +1 -1
- package/cjs-bundle/components/IconMenu/index.js +1 -1
- package/cjs-bundle/components/IconMenu/index.js.map +1 -1
- package/cjs-bundle/components/KeyboardDateTimePicker.js +1 -1
- package/cjs-bundle/components/KeyboardDateTimePicker.js.map +1 -1
- package/cjs-bundle/components/LinkedText/LinkedText.js +2 -0
- package/cjs-bundle/components/LinkedText/LinkedText.js.map +1 -0
- package/cjs-bundle/components/LinkedText/LinkedText.scss.js +2 -0
- package/cjs-bundle/components/LinkedText/LinkedText.scss.js.map +1 -0
- package/cjs-bundle/components/NewDocumentViewer/utils.js +1 -1
- package/cjs-bundle/components/NewDocumentViewer/utils.js.map +1 -1
- package/cjs-bundle/components/OffsetWellPickerV2/components/Filter/ToggleMapButton.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV2/components/Filter/ToggleMapButton.js.map +1 -1
- package/cjs-bundle/components/OffsetWellPickerV2/components/Table/MetricsAddMenu.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV2/components/Table/MetricsAddMenu.js.map +1 -1
- package/cjs-bundle/components/OffsetWellPickerV3/components/CustomSelectionView/components/Table/MetricsAddMenu.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV3/components/CustomSelectionView/components/Table/MetricsAddMenu.js.map +1 -1
- package/cjs-bundle/components/OffsetWellPickerV3/components/CustomSelectionView/index.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV3/components/CustomSelectionView/index.js.map +1 -1
- package/cjs-bundle/components/OffsetWellPickerV3/components/OffsetWellSelectionView/index.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV3/components/OffsetWellSelectionView/index.js.map +1 -1
- package/cjs-bundle/components/OffsetWellPickerV3/components/TabSelection/ToggleMapButton.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV3/components/TabSelection/ToggleMapButton.js.map +1 -1
- package/cjs-bundle/components/OffsetWellPickerV3/components/TabSelection/index.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV3/components/TabSelection/index.js.map +1 -1
- package/cjs-bundle/components/OffsetWellPickerV3/components/WellHubView/index.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV3/components/WellHubView/index.js.map +1 -1
- package/cjs-bundle/components/OffsetWellPickerV3/components/shared/OffsetWellTableHead.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV3/components/shared/OffsetWellTableHead.js.map +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/AppHeader/components/HeaderActions/HeaderActions.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/AppHeader/components/HeaderActions/HeaderActions.js.map +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/AppHeader/components/LoadAllWellsToggle/LoadAllWellsToggle.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/AppHeader/components/LoadAllWellsToggle/LoadAllWellsToggle.js.map +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/Filter/Filter.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/Filter/Filter.js.map +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/Filter/components/CustomDateFields/CustomDateFields.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/Filter/components/CustomDateFields/CustomDateFields.js.map +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/Filter/components/PeriodFilterSelect/PeriodFilterSelect.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/Filter/components/PeriodFilterSelect/PeriodFilterSelect.js.map +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/Filter/components/SingleFilterSelect/SingleFilterSelect.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/Filter/components/SingleFilterSelect/SingleFilterSelect.js.map +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/Map/OffsetWellMap/components/ClusterTooltip/ClusterTooltip.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/Map/OffsetWellMap/components/ClusterTooltip/ClusterTooltip.js.map +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/Map/OffsetWellMap/components/LayerSwitcher/LayerSwitcher.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/Map/OffsetWellMap/components/LayerSwitcher/LayerSwitcher.js.map +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/Map/OffsetWellMap/components/MapControls/MapControls.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/Map/OffsetWellMap/components/MapControls/MapControls.js.map +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/Map/OffsetWellMap/components/MapHints/MapHintsStash.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/Map/OffsetWellMap/components/MapHints/MapHintsStash.js.map +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/Map/OffsetWellMap/components/SubjectWellMarker/SubjectWellMarker.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/Map/OffsetWellMap/components/SubjectWellMarker/SubjectWellMarker.js.map +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/OffsetWellPickerContent/OffsetWellPickerContent.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/OffsetWellPickerContent/OffsetWellPickerContent.js.map +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/OffsetWellsTable/AdvancedSearch/components/AssetResultSection/AssetResultSection.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/OffsetWellsTable/AdvancedSearch/components/AssetResultSection/AssetResultSection.js.map +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/OffsetWellsTable/AdvancedSearch/components/AutoCompleteAssetSearch/AutoCompleteAssetSearch.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/OffsetWellsTable/AdvancedSearch/components/AutoCompleteAssetSearch/AutoCompleteAssetSearch.js.map +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/OffsetWellsTable/cells/CompanyCell/CompanyCell.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/OffsetWellsTable/cells/CompanyCell/CompanyCell.js.map +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/OffsetWellsTable/cells/FormationCell/FormationCell.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/OffsetWellsTable/cells/FormationCell/FormationCell.js.map +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/OffsetWellsTable/cells/InterventionAssetCell/InterventionAssetCell.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/OffsetWellsTable/cells/InterventionAssetCell/InterventionAssetCell.js.map +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/OffsetWellsTable/cells/PadNameCell/PadNameCell.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/OffsetWellsTable/cells/PadNameCell/PadNameCell.js.map +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/OffsetWellsTable/cells/RigCell/RigCell.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/OffsetWellsTable/cells/RigCell/RigCell.js.map +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/OffsetWellsTable/cells/WellNameCell/WellNameCell.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/OffsetWellsTable/cells/WellNameCell/WellNameCell.js.map +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/OffsetWellsTable/components/SettingsMenu/SettingsMenu.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/OffsetWellsTable/components/SettingsMenu/SettingsMenu.js.map +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/OffsetWellsTable/components/SettingsMenu/components/MetricsSettingsSection/MetricsSettingsSection.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/OffsetWellsTable/components/SettingsMenu/components/MetricsSettingsSection/MetricsSettingsSection.js.map +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/OffsetWellsTable/components/SettingsMenu/components/TableSettingsSection/TableSettingsSection.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/OffsetWellsTable/components/SettingsMenu/components/TableSettingsSection/TableSettingsSection.js.map +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/OffsetWellsTable/components/WellNameHeaderCell/WellNameHeaderCell.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/OffsetWellsTable/components/WellNameHeaderCell/WellNameHeaderCell.js.map +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/PickerModalActions/PickerModalActions.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV5/components/PickerModalActions/PickerModalActions.js.map +1 -1
- package/cjs-bundle/components/PadOffsetsPicker/StagesSelector.js +1 -1
- package/cjs-bundle/components/PadOffsetsPicker/StagesSelector.js.map +1 -1
- package/cjs-bundle/components/PadOffsetsPickerV2/PadOffsetsPickerV2.js +1 -1
- package/cjs-bundle/components/PadOffsetsPickerV2/PadOffsetsPickerV2.js.map +1 -1
- package/cjs-bundle/components/Popover/Popover.js +1 -1
- package/cjs-bundle/components/Popover/Popover.js.map +1 -1
- package/cjs-bundle/components/Popper/Popper.js +1 -1
- package/cjs-bundle/components/Popper/Popper.js.map +1 -1
- package/cjs-bundle/components/PostInput/PostInput.js +1 -1
- package/cjs-bundle/components/PostInput/PostInput.js.map +1 -1
- package/cjs-bundle/components/RealTimeValuesSidebar/SidebarFooter.js +1 -1
- package/cjs-bundle/components/RealTimeValuesSidebar/SidebarFooter.js.map +1 -1
- package/cjs-bundle/components/UserMention/constants.js +1 -1
- package/cjs-bundle/components/UserMention/constants.js.map +1 -1
- package/cjs-bundle/components/UserMention/index.js +1 -1
- package/cjs-bundle/components/UserMention/index.js.map +1 -1
- package/cjs-bundle/components/index.js +1 -1
- package/cjs-bundle/componentsV2/AppCommonsProvider/AppCommonsContext.js.map +1 -1
- package/cjs-bundle/componentsV2/AppCommonsProvider/utils.js +1 -1
- package/cjs-bundle/componentsV2/AppCommonsProvider/utils.js.map +1 -1
- package/cjs-bundle/componentsV2/AppHeader/V3/Actions/Actions.constants.js +1 -1
- package/cjs-bundle/componentsV2/AppHeader/V3/Actions/Actions.constants.js.map +1 -1
- package/cjs-bundle/componentsV2/AppHeader/V3/Actions/Actions.js +1 -1
- package/cjs-bundle/componentsV2/AppHeader/V3/Actions/Actions.js.map +1 -1
- package/cjs-bundle/componentsV2/AppHeader/V3/AppHeaderV3.js +1 -1
- package/cjs-bundle/componentsV2/AppHeader/V3/AppHeaderV3.js.map +1 -1
- package/cjs-bundle/componentsV2/ButtonIcon/ButtonIcon.js +1 -1
- package/cjs-bundle/componentsV2/ButtonIcon/ButtonIcon.js.map +1 -1
- package/cjs-bundle/componentsV2/ButtonIcon/ButtonIcon.scss.js +1 -1
- package/cjs-bundle/componentsV2/Chip/Chip.js +1 -1
- package/cjs-bundle/componentsV2/Chip/Chip.js.map +1 -1
- package/cjs-bundle/componentsV2/ColorPicker/ColorPicker.js +1 -1
- package/cjs-bundle/componentsV2/ColorPicker/ColorPicker.js.map +1 -1
- package/cjs-bundle/componentsV2/ColorPicker/ColorPicker.scss.js +1 -1
- package/cjs-bundle/componentsV2/ColorPicker/OpacityDragtracker/OpacityDragtracker.js +1 -1
- package/cjs-bundle/componentsV2/ColorPicker/OpacityDragtracker/OpacityDragtracker.js.map +1 -1
- package/cjs-bundle/componentsV2/ColorPicker/Swatches/Swatches.scss.js +1 -1
- package/cjs-bundle/componentsV2/CompletionsOffsetWellPicker/Map/Map.js +1 -1
- package/cjs-bundle/componentsV2/CompletionsOffsetWellPicker/Map/Map.js.map +1 -1
- package/cjs-bundle/componentsV2/InterventionEventSelector/InterventionEventSelector.js +2 -0
- package/cjs-bundle/componentsV2/InterventionEventSelector/InterventionEventSelector.js.map +1 -0
- package/cjs-bundle/componentsV2/InterventionEventSelector/InterventionEventSelector.scss.js +2 -0
- package/cjs-bundle/componentsV2/InterventionEventSelector/InterventionEventSelector.scss.js.map +1 -0
- package/cjs-bundle/componentsV2/InterventionEventSelector/useInterventionUnitEvents.js +2 -0
- package/cjs-bundle/componentsV2/InterventionEventSelector/useInterventionUnitEvents.js.map +1 -0
- package/cjs-bundle/componentsV2/InterventionEventSelector/utils.js +2 -0
- package/cjs-bundle/componentsV2/InterventionEventSelector/utils.js.map +1 -0
- package/cjs-bundle/componentsV2/Modal/Modal.js +1 -1
- package/cjs-bundle/componentsV2/Modal/Modal.js.map +1 -1
- package/cjs-bundle/componentsV2/Modal/constants.js +2 -0
- package/cjs-bundle/componentsV2/Modal/constants.js.map +1 -0
- package/cjs-bundle/componentsV2/WellArchivedMessage/WellArchivedMessage.js +1 -1
- package/cjs-bundle/componentsV2/WellArchivedMessage/WellArchivedMessage.js.map +1 -1
- package/cjs-bundle/componentsV2/index.js +1 -1
- package/cjs-bundle/effects/useOutsideClick.js +1 -1
- package/cjs-bundle/effects/useOutsideClick.js.map +1 -1
- package/cjs-bundle/testing/AppTestWrapper/AppTestWrapper.js +1 -1
- package/cjs-bundle/testing/AppTestWrapper/AppTestWrapper.js.map +1 -1
- package/cjs-bundle/utils/devcenter.js +1 -1
- package/cjs-bundle/utils/devcenter.js.map +1 -1
- package/cjs-bundle/utils/fetchAttachment.js +2 -0
- package/cjs-bundle/utils/fetchAttachment.js.map +1 -0
- package/cjs-bundle/utils/fileExtension.js +1 -1
- package/cjs-bundle/utils/fileExtension.js.map +1 -1
- package/cjs-bundle/utils/links.js +2 -0
- package/cjs-bundle/utils/links.js.map +1 -0
- package/components/AddComment/Popover.js +1 -1
- package/components/AddComment/Popover.js.map +1 -1
- package/components/AddComment/components/Content.js +1 -1
- package/components/AddComment/components/Content.js.map +1 -1
- package/components/AssetEditor/AssetEditorAutocomplete.d.ts +96 -13
- package/components/AssetEditor/AssetEditorAutocomplete.d.ts.map +1 -1
- package/components/AssetEditor/AssetEditorAutocomplete.js +1 -1
- package/components/AssetEditor/AssetEditorAutocomplete.js.map +1 -1
- package/components/AssetEditorV2/index.d.ts +28 -12
- package/components/AssetEditorV2/index.d.ts.map +1 -1
- package/components/AssetEditorV2/index.js +1 -1
- package/components/AssetEditorV2/index.js.map +1 -1
- package/components/AttachmentLightbox/AttachmentDocument.d.ts +6 -0
- package/components/AttachmentLightbox/AttachmentDocument.d.ts.map +1 -0
- package/components/AttachmentLightbox/AttachmentDocument.js +2 -0
- package/components/AttachmentLightbox/AttachmentDocument.js.map +1 -0
- package/components/AttachmentLightbox/AttachmentLightbox.d.ts +9 -8
- package/components/AttachmentLightbox/AttachmentLightbox.d.ts.map +1 -1
- package/components/AttachmentLightbox/AttachmentLightbox.js +1 -1
- package/components/AttachmentLightbox/AttachmentLightbox.js.map +1 -1
- package/components/AttachmentLightbox/AttachmentLightbox.scss.js +1 -1
- package/components/AttachmentLightbox/AttachmentPreviewPane.d.ts +9 -0
- package/components/AttachmentLightbox/AttachmentPreviewPane.d.ts.map +1 -0
- package/components/AttachmentLightbox/AttachmentPreviewPane.js +2 -0
- package/components/AttachmentLightbox/AttachmentPreviewPane.js.map +1 -0
- package/components/AttachmentLightbox/__tests__/AttachmentDocument.test.d.ts +2 -0
- package/components/AttachmentLightbox/__tests__/AttachmentDocument.test.d.ts.map +1 -0
- package/components/AttachmentLightbox/__tests__/AttachmentLightbox.test.d.ts +2 -0
- package/components/AttachmentLightbox/__tests__/AttachmentLightbox.test.d.ts.map +1 -0
- package/components/AttachmentLightbox/__tests__/copyImageToClipboard.test.d.ts +2 -0
- package/components/AttachmentLightbox/__tests__/copyImageToClipboard.test.d.ts.map +1 -0
- package/components/AttachmentLightbox/__tests__/downloadAttachment.test.d.ts +2 -0
- package/components/AttachmentLightbox/__tests__/downloadAttachment.test.d.ts.map +1 -0
- package/components/AttachmentLightbox/__tests__/useZoomPan.test.d.ts +2 -0
- package/components/AttachmentLightbox/__tests__/useZoomPan.test.d.ts.map +1 -0
- package/components/AttachmentLightbox/copyImageToClipboard.d.ts +4 -0
- package/components/AttachmentLightbox/copyImageToClipboard.d.ts.map +1 -0
- package/components/AttachmentLightbox/copyImageToClipboard.js +2 -0
- package/components/AttachmentLightbox/copyImageToClipboard.js.map +1 -0
- package/components/AttachmentLightbox/downloadAttachment.d.ts +10 -0
- package/components/AttachmentLightbox/downloadAttachment.d.ts.map +1 -0
- package/components/AttachmentLightbox/downloadAttachment.js +2 -0
- package/components/AttachmentLightbox/downloadAttachment.js.map +1 -0
- package/components/AttachmentLightbox/useAttachmentLightbox.d.ts +6 -2
- package/components/AttachmentLightbox/useAttachmentLightbox.d.ts.map +1 -1
- package/components/AttachmentLightbox/useAttachmentLightbox.js +1 -1
- package/components/AttachmentLightbox/useAttachmentLightbox.js.map +1 -1
- package/components/AttachmentLightbox/useZoomPan.d.ts +29 -0
- package/components/AttachmentLightbox/useZoomPan.d.ts.map +1 -0
- package/components/AttachmentLightbox/useZoomPan.js +2 -0
- package/components/AttachmentLightbox/useZoomPan.js.map +1 -0
- package/components/AttachmentPreview/AttachmentActionsMenu.d.ts +16 -0
- package/components/AttachmentPreview/AttachmentActionsMenu.d.ts.map +1 -0
- package/components/AttachmentPreview/AttachmentActionsMenu.js +2 -0
- package/components/AttachmentPreview/AttachmentActionsMenu.js.map +1 -0
- package/components/AttachmentPreview/AttachmentDownloadLink.d.ts +11 -0
- package/components/AttachmentPreview/AttachmentDownloadLink.d.ts.map +1 -0
- package/components/AttachmentPreview/AttachmentDownloadLink.js +2 -0
- package/components/AttachmentPreview/AttachmentDownloadLink.js.map +1 -0
- package/components/AttachmentPreview/AttachmentImage.d.ts +12 -0
- package/components/AttachmentPreview/AttachmentImage.d.ts.map +1 -0
- package/components/AttachmentPreview/AttachmentImage.js +2 -0
- package/components/AttachmentPreview/AttachmentImage.js.map +1 -0
- package/components/AttachmentPreview/AttachmentPreview.d.ts.map +1 -1
- package/components/AttachmentPreview/AttachmentPreview.js +1 -1
- package/components/AttachmentPreview/AttachmentPreview.js.map +1 -1
- package/components/AttachmentPreview/AttachmentPreview.scss.js +1 -1
- package/components/AttachmentPreview/AttachmentPreview.types.d.ts +7 -0
- package/components/AttachmentPreview/AttachmentPreview.types.d.ts.map +1 -1
- package/components/AttachmentPreview/AttachmentRow.d.ts +7 -3
- package/components/AttachmentPreview/AttachmentRow.d.ts.map +1 -1
- package/components/AttachmentPreview/AttachmentRow.js +1 -1
- package/components/AttachmentPreview/AttachmentRow.js.map +1 -1
- package/components/AttachmentPreview/AttachmentTile.d.ts +5 -1
- package/components/AttachmentPreview/AttachmentTile.d.ts.map +1 -1
- package/components/AttachmentPreview/AttachmentTile.js +1 -1
- package/components/AttachmentPreview/AttachmentTile.js.map +1 -1
- package/components/AttachmentPreview/__tests__/AttachmentActionsMenu.test.d.ts +2 -0
- package/components/AttachmentPreview/__tests__/AttachmentActionsMenu.test.d.ts.map +1 -0
- package/components/AttachmentPreview/__tests__/AttachmentDownloadLink.test.d.ts +2 -0
- package/components/AttachmentPreview/__tests__/AttachmentDownloadLink.test.d.ts.map +1 -0
- package/components/AttachmentPreview/__tests__/AttachmentImage.test.d.ts +2 -0
- package/components/AttachmentPreview/__tests__/AttachmentImage.test.d.ts.map +1 -0
- package/components/AttachmentPreview/__tests__/AttachmentTile.test.d.ts +2 -0
- package/components/AttachmentPreview/__tests__/AttachmentTile.test.d.ts.map +1 -0
- package/components/AttachmentPreview/__tests__/useStoredAttachments.test.d.ts +2 -0
- package/components/AttachmentPreview/__tests__/useStoredAttachments.test.d.ts.map +1 -0
- package/components/AttachmentPreview/useStoredAttachment.d.ts +8 -0
- package/components/AttachmentPreview/useStoredAttachment.d.ts.map +1 -1
- package/components/AttachmentPreview/useStoredAttachment.js +2 -0
- package/components/AttachmentPreview/useStoredAttachment.js.map +1 -0
- package/components/AttachmentPreview/useStoredAttachments.d.ts +1 -1
- package/components/AttachmentPreview/useStoredAttachments.d.ts.map +1 -1
- package/components/AttachmentPreview/useStoredAttachments.js +1 -1
- package/components/AttachmentPreview/useStoredAttachments.js.map +1 -1
- package/components/BICOffsetPickerDialog/index.js +1 -1
- package/components/BICOffsetPickerDialog/index.js.map +1 -1
- package/components/Casing/CasingTableV2/components/CasingJoints/Editor.js +1 -1
- package/components/Casing/CasingTableV2/components/CasingJoints/Editor.js.map +1 -1
- package/components/Casing/CasingTableV2/components/Component.js +1 -1
- package/components/Casing/CasingTableV2/components/Component.js.map +1 -1
- package/components/Casing/CasingTableV2/components/DrillPipe/Editor.js +1 -1
- package/components/Casing/CasingTableV2/components/DrillPipe/Editor.js.map +1 -1
- package/components/CollapsableSidebar.js +1 -1
- package/components/CollapsableSidebar.js.map +1 -1
- package/components/CommentCard/CommentCard.d.ts.map +1 -1
- package/components/CommentCard/CommentCard.js +1 -1
- package/components/CommentCard/CommentCard.js.map +1 -1
- package/components/CommentCard/CommentCard.types.d.ts +2 -0
- package/components/CommentCard/CommentCard.types.d.ts.map +1 -1
- package/components/CommentCard/CommentCardReactions.js +1 -1
- package/components/CommentCard/CommentCardReactions.js.map +1 -1
- package/components/CommentCard/CommentMenu.d.ts.map +1 -1
- package/components/CommentCard/CommentMenu.js +1 -1
- package/components/CommentCard/CommentMenu.js.map +1 -1
- package/components/CommentComposer/CommentComposer.d.ts.map +1 -1
- package/components/CommentComposer/CommentComposer.js +1 -1
- package/components/CommentComposer/CommentComposer.js.map +1 -1
- package/components/CommentComposer/CommentReplyInput.d.ts.map +1 -1
- package/components/CommentComposer/CommentReplyInput.js +1 -1
- package/components/CommentComposer/CommentReplyInput.js.map +1 -1
- package/components/CommentComposer/ShareToChatRow.js +1 -1
- package/components/CommentComposer/ShareToChatRow.js.map +1 -1
- package/components/CommentComposer/__tests__/useAttachmentUpload.linked.test.d.ts +2 -0
- package/components/CommentComposer/__tests__/useAttachmentUpload.linked.test.d.ts.map +1 -0
- package/components/CommentComposer/useAttachmentUpload.d.ts +1 -0
- package/components/CommentComposer/useAttachmentUpload.d.ts.map +1 -1
- package/components/CommentComposer/useAttachmentUpload.js +1 -1
- package/components/CommentComposer/useAttachmentUpload.js.map +1 -1
- package/components/CommentInputNext/CommentInputNext.d.ts +2 -0
- package/components/CommentInputNext/CommentInputNext.d.ts.map +1 -1
- package/components/CommentInputNext/CommentInputNext.js +1 -1
- package/components/CommentInputNext/CommentInputNext.js.map +1 -1
- package/components/CommentInputNext/__tests__/useFilePaste.test.d.ts +2 -0
- package/components/CommentInputNext/__tests__/useFilePaste.test.d.ts.map +1 -0
- package/components/CommentInputNext/useFilePaste.d.ts +17 -0
- package/components/CommentInputNext/useFilePaste.d.ts.map +1 -0
- package/components/CommentInputNext/useFilePaste.js +2 -0
- package/components/CommentInputNext/useFilePaste.js.map +1 -0
- package/components/DevCenter/AppsDataProvider/AppsDataProvider.d.ts +5 -1
- package/components/DevCenter/AppsDataProvider/AppsDataProvider.d.ts.map +1 -1
- package/components/DevCenter/AppsDataProvider/AppsDataProvider.js +1 -1
- package/components/DevCenter/AppsDataProvider/AppsDataProvider.js.map +1 -1
- package/components/DevCenter/DevCenterAppContainer/DevCenterAppContainer.d.ts +9 -1
- package/components/DevCenter/DevCenterAppContainer/DevCenterAppContainer.d.ts.map +1 -1
- package/components/DevCenter/DevCenterAppContainer/DevCenterAppContainer.js +1 -1
- package/components/DevCenter/DevCenterAppContainer/DevCenterAppContainer.js.map +1 -1
- package/components/DevCenter/DevCenterAppContainer/__tests__/DevCenterAppContainer.registerAITools.test.d.ts +2 -0
- package/components/DevCenter/DevCenterAppContainer/__tests__/DevCenterAppContainer.registerAITools.test.d.ts.map +1 -0
- package/components/DevCenter/DevCenterAppContainer/components/CommentsSwitch/CommentsSwitchButton.js +1 -1
- package/components/DevCenter/DevCenterAppContainer/components/CommentsSwitch/CommentsSwitchButton.js.map +1 -1
- package/components/DevCenter/DevCenterAppContainer/components/NonPriorityMenus/NonPriorityMenus.js +1 -1
- package/components/DevCenter/DevCenterAppContainer/components/NonPriorityMenus/NonPriorityMenus.js.map +1 -1
- package/components/DevCenter/DevCenterAppContainer/components/PriorityMenus/PriorityMenus.js +1 -1
- package/components/DevCenter/DevCenterAppContainer/components/PriorityMenus/PriorityMenus.js.map +1 -1
- package/components/DevCenter/DevCenterAppContainer/effects/useAppMaximized.js +1 -1
- package/components/DevCenter/DevCenterAppContainer/effects/useAppMaximized.js.map +1 -1
- package/components/DevCenter/IsolatedDevCenterAppContainer/DevCenterIsolatedApp.d.ts.map +1 -1
- package/components/DevCenter/IsolatedDevCenterAppContainer/DevCenterIsolatedApp.js +1 -1
- package/components/DevCenter/IsolatedDevCenterAppContainer/DevCenterIsolatedApp.js.map +1 -1
- package/components/DevCenter/IsolatedDevCenterAppContainer/__tests__/useFullscreenModes.test.d.ts +2 -0
- package/components/DevCenter/IsolatedDevCenterAppContainer/__tests__/useFullscreenModes.test.d.ts.map +1 -0
- package/components/DevCenter/IsolatedDevCenterAppContainer/useFullscreenModes.d.ts +10 -0
- package/components/DevCenter/IsolatedDevCenterAppContainer/useFullscreenModes.d.ts.map +1 -0
- package/components/DevCenter/IsolatedDevCenterAppContainer/useFullscreenModes.js +2 -0
- package/components/DevCenter/IsolatedDevCenterAppContainer/useFullscreenModes.js.map +1 -0
- package/components/DocumentViewer/DocumentViewer.js +1 -1
- package/components/DocumentViewer/DocumentViewer.js.map +1 -1
- package/components/Drillstring/BHAComponentDetail/constants.d.ts +2 -2
- package/components/Drillstring/BHAComponentsTable/components/Agitator/Editor.js +1 -1
- package/components/Drillstring/BHAComponentsTable/components/Agitator/Editor.js.map +1 -1
- package/components/Drillstring/BHAComponentsTable/components/Bit/Editor.js +1 -1
- package/components/Drillstring/BHAComponentsTable/components/Bit/Editor.js.map +1 -1
- package/components/Drillstring/BHAComponentsTable/components/Component.js +1 -1
- package/components/Drillstring/BHAComponentsTable/components/Component.js.map +1 -1
- package/components/Drillstring/BHAComponentsTable/components/DrillCollar/Editor.js +1 -1
- package/components/Drillstring/BHAComponentsTable/components/DrillCollar/Editor.js.map +1 -1
- package/components/Drillstring/BHAComponentsTable/components/DrillPipe/Editor.js +1 -1
- package/components/Drillstring/BHAComponentsTable/components/DrillPipe/Editor.js.map +1 -1
- package/components/Drillstring/BHAComponentsTable/components/Jar/Editor.js +1 -1
- package/components/Drillstring/BHAComponentsTable/components/Jar/Editor.js.map +1 -1
- package/components/Drillstring/BHAComponentsTable/components/Lwd/Editor.js +1 -1
- package/components/Drillstring/BHAComponentsTable/components/Lwd/Editor.js.map +1 -1
- package/components/Drillstring/BHAComponentsTable/components/Mwd/Editor.js +1 -1
- package/components/Drillstring/BHAComponentsTable/components/Mwd/Editor.js.map +1 -1
- package/components/Drillstring/BHAComponentsTable/components/Pdm/Editor.js +1 -1
- package/components/Drillstring/BHAComponentsTable/components/Pdm/Editor.js.map +1 -1
- package/components/Drillstring/BHAComponentsTable/components/Rss/Editor.js +1 -1
- package/components/Drillstring/BHAComponentsTable/components/Rss/Editor.js.map +1 -1
- package/components/Drillstring/BHAComponentsTable/components/Stabilizer/Editor.js +1 -1
- package/components/Drillstring/BHAComponentsTable/components/Stabilizer/Editor.js.map +1 -1
- package/components/Drillstring/BHAComponentsTable/components/Sub/Editor.js +1 -1
- package/components/Drillstring/BHAComponentsTable/components/Sub/Editor.js.map +1 -1
- package/components/Drillstring/BHAComponentsTable/components/Ur/Editor.js +1 -1
- package/components/Drillstring/BHAComponentsTable/components/Ur/Editor.js.map +1 -1
- package/components/Drillstring/BHAComponentsTable/components/shared/ConfirmationPopup.js +1 -1
- package/components/Drillstring/BHAComponentsTable/components/shared/ConfirmationPopup.js.map +1 -1
- package/components/FeedItem/FeedItem.js +1 -1
- package/components/FeedItem/FeedItem.js.map +1 -1
- package/components/FeedItem/components/FeedComments.js +1 -1
- package/components/FeedItem/components/FeedComments.js.map +1 -1
- package/components/IconMenu/index.d.ts +67 -21
- package/components/IconMenu/index.d.ts.map +1 -1
- package/components/IconMenu/index.js +1 -1
- package/components/IconMenu/index.js.map +1 -1
- package/components/KeyboardDateTimePicker.d.ts +6 -7
- package/components/KeyboardDateTimePicker.d.ts.map +1 -1
- package/components/KeyboardDateTimePicker.js +1 -1
- package/components/KeyboardDateTimePicker.js.map +1 -1
- package/components/LinkedText/LinkedText.d.ts +17 -0
- package/components/LinkedText/LinkedText.d.ts.map +1 -0
- package/components/LinkedText/LinkedText.js +2 -0
- package/components/LinkedText/LinkedText.js.map +1 -0
- package/components/LinkedText/LinkedText.scss.js +2 -0
- package/components/LinkedText/LinkedText.scss.js.map +1 -0
- package/components/LinkedText/__tests__/LinkedText.test.d.ts +2 -0
- package/components/LinkedText/__tests__/LinkedText.test.d.ts.map +1 -0
- package/components/LinkedText/index.d.ts +2 -0
- package/components/LinkedText/index.d.ts.map +1 -0
- package/components/NewDocumentViewer/utils.d.ts.map +1 -1
- package/components/NewDocumentViewer/utils.js +1 -1
- package/components/NewDocumentViewer/utils.js.map +1 -1
- package/components/OffsetWellPickerV2/components/Filter/ToggleMapButton.js +1 -1
- package/components/OffsetWellPickerV2/components/Filter/ToggleMapButton.js.map +1 -1
- package/components/OffsetWellPickerV2/components/Table/MetricsAddMenu.js +1 -1
- package/components/OffsetWellPickerV2/components/Table/MetricsAddMenu.js.map +1 -1
- package/components/OffsetWellPickerV3/components/CustomSelectionView/components/Table/MetricsAddMenu.js +1 -1
- package/components/OffsetWellPickerV3/components/CustomSelectionView/components/Table/MetricsAddMenu.js.map +1 -1
- package/components/OffsetWellPickerV3/components/CustomSelectionView/index.js +1 -1
- package/components/OffsetWellPickerV3/components/CustomSelectionView/index.js.map +1 -1
- package/components/OffsetWellPickerV3/components/OffsetWellSelectionView/index.js +1 -1
- package/components/OffsetWellPickerV3/components/OffsetWellSelectionView/index.js.map +1 -1
- package/components/OffsetWellPickerV3/components/TabSelection/ToggleMapButton.js +1 -1
- package/components/OffsetWellPickerV3/components/TabSelection/ToggleMapButton.js.map +1 -1
- package/components/OffsetWellPickerV3/components/TabSelection/index.js +1 -1
- package/components/OffsetWellPickerV3/components/TabSelection/index.js.map +1 -1
- package/components/OffsetWellPickerV3/components/WellHubView/index.js +1 -1
- package/components/OffsetWellPickerV3/components/WellHubView/index.js.map +1 -1
- package/components/OffsetWellPickerV3/components/shared/OffsetWellTableHead.js +1 -1
- package/components/OffsetWellPickerV3/components/shared/OffsetWellTableHead.js.map +1 -1
- package/components/OffsetWellPickerV5/components/AppHeader/components/HeaderActions/HeaderActions.js +1 -1
- package/components/OffsetWellPickerV5/components/AppHeader/components/HeaderActions/HeaderActions.js.map +1 -1
- package/components/OffsetWellPickerV5/components/AppHeader/components/LoadAllWellsToggle/LoadAllWellsToggle.js +1 -1
- package/components/OffsetWellPickerV5/components/AppHeader/components/LoadAllWellsToggle/LoadAllWellsToggle.js.map +1 -1
- package/components/OffsetWellPickerV5/components/Filter/Filter.js +1 -1
- package/components/OffsetWellPickerV5/components/Filter/Filter.js.map +1 -1
- package/components/OffsetWellPickerV5/components/Filter/components/CustomDateFields/CustomDateFields.js +1 -1
- package/components/OffsetWellPickerV5/components/Filter/components/CustomDateFields/CustomDateFields.js.map +1 -1
- package/components/OffsetWellPickerV5/components/Filter/components/PeriodFilterSelect/PeriodFilterSelect.js +1 -1
- package/components/OffsetWellPickerV5/components/Filter/components/PeriodFilterSelect/PeriodFilterSelect.js.map +1 -1
- package/components/OffsetWellPickerV5/components/Filter/components/SingleFilterSelect/SingleFilterSelect.js +1 -1
- package/components/OffsetWellPickerV5/components/Filter/components/SingleFilterSelect/SingleFilterSelect.js.map +1 -1
- package/components/OffsetWellPickerV5/components/Map/OffsetWellMap/components/ClusterTooltip/ClusterTooltip.js +1 -1
- package/components/OffsetWellPickerV5/components/Map/OffsetWellMap/components/ClusterTooltip/ClusterTooltip.js.map +1 -1
- package/components/OffsetWellPickerV5/components/Map/OffsetWellMap/components/LayerSwitcher/LayerSwitcher.js +1 -1
- package/components/OffsetWellPickerV5/components/Map/OffsetWellMap/components/LayerSwitcher/LayerSwitcher.js.map +1 -1
- package/components/OffsetWellPickerV5/components/Map/OffsetWellMap/components/MapControls/MapControls.js +1 -1
- package/components/OffsetWellPickerV5/components/Map/OffsetWellMap/components/MapControls/MapControls.js.map +1 -1
- package/components/OffsetWellPickerV5/components/Map/OffsetWellMap/components/MapHints/MapHintsStash.js +1 -1
- package/components/OffsetWellPickerV5/components/Map/OffsetWellMap/components/MapHints/MapHintsStash.js.map +1 -1
- package/components/OffsetWellPickerV5/components/Map/OffsetWellMap/components/SubjectWellMarker/SubjectWellMarker.js +1 -1
- package/components/OffsetWellPickerV5/components/Map/OffsetWellMap/components/SubjectWellMarker/SubjectWellMarker.js.map +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellPickerContent/OffsetWellPickerContent.js +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellPickerContent/OffsetWellPickerContent.js.map +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/AdvancedSearch/components/AssetResultSection/AssetResultSection.js +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/AdvancedSearch/components/AssetResultSection/AssetResultSection.js.map +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/AdvancedSearch/components/AutoCompleteAssetSearch/AutoCompleteAssetSearch.js +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/AdvancedSearch/components/AutoCompleteAssetSearch/AutoCompleteAssetSearch.js.map +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/cells/CompanyCell/CompanyCell.js +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/cells/CompanyCell/CompanyCell.js.map +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/cells/FormationCell/FormationCell.js +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/cells/FormationCell/FormationCell.js.map +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/cells/InterventionAssetCell/InterventionAssetCell.js +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/cells/InterventionAssetCell/InterventionAssetCell.js.map +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/cells/PadNameCell/PadNameCell.js +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/cells/PadNameCell/PadNameCell.js.map +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/cells/RigCell/RigCell.js +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/cells/RigCell/RigCell.js.map +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/cells/WellNameCell/WellNameCell.js +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/cells/WellNameCell/WellNameCell.js.map +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/components/SettingsMenu/SettingsMenu.js +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/components/SettingsMenu/SettingsMenu.js.map +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/components/SettingsMenu/components/MetricsSettingsSection/MetricsSettingsSection.js +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/components/SettingsMenu/components/MetricsSettingsSection/MetricsSettingsSection.js.map +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/components/SettingsMenu/components/TableSettingsSection/TableSettingsSection.js +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/components/SettingsMenu/components/TableSettingsSection/TableSettingsSection.js.map +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/components/WellNameHeaderCell/WellNameHeaderCell.js +1 -1
- package/components/OffsetWellPickerV5/components/OffsetWellsTable/components/WellNameHeaderCell/WellNameHeaderCell.js.map +1 -1
- package/components/OffsetWellPickerV5/components/PickerModalActions/PickerModalActions.js +1 -1
- package/components/OffsetWellPickerV5/components/PickerModalActions/PickerModalActions.js.map +1 -1
- package/components/PadOffsetsPicker/StagesSelector.js +1 -1
- package/components/PadOffsetsPicker/StagesSelector.js.map +1 -1
- package/components/PadOffsetsPickerV2/PadOffsetsPickerV2.js +1 -1
- package/components/PadOffsetsPickerV2/PadOffsetsPickerV2.js.map +1 -1
- package/components/Popover/Popover.js +1 -1
- package/components/Popover/Popover.js.map +1 -1
- package/components/Popper/Popper.js +1 -1
- package/components/Popper/Popper.js.map +1 -1
- package/components/PostInput/PostInput.d.ts +20 -10
- package/components/PostInput/PostInput.d.ts.map +1 -1
- package/components/PostInput/PostInput.js +1 -1
- package/components/PostInput/PostInput.js.map +1 -1
- package/components/RealTimeValuesSidebar/SidebarFooter.js +1 -1
- package/components/RealTimeValuesSidebar/SidebarFooter.js.map +1 -1
- package/components/UserMention/__tests__/highlightLinks.test.d.ts +2 -0
- package/components/UserMention/__tests__/highlightLinks.test.d.ts.map +1 -0
- package/components/UserMention/constants.d.ts +1 -0
- package/components/UserMention/constants.d.ts.map +1 -1
- package/components/UserMention/constants.js +1 -1
- package/components/UserMention/constants.js.map +1 -1
- package/components/UserMention/index.js +1 -1
- package/components/UserMention/index.js.map +1 -1
- package/components/index.d.ts +2 -0
- package/components/index.d.ts.map +1 -1
- package/components/index.js +1 -1
- package/componentsV2/AppCommonsProvider/AppCommonsContext.d.ts +4 -2
- package/componentsV2/AppCommonsProvider/AppCommonsContext.d.ts.map +1 -1
- package/componentsV2/AppCommonsProvider/AppCommonsContext.js.map +1 -1
- package/componentsV2/AppCommonsProvider/utils.d.ts +1 -1
- package/componentsV2/AppCommonsProvider/utils.d.ts.map +1 -1
- package/componentsV2/AppCommonsProvider/utils.js +1 -1
- package/componentsV2/AppCommonsProvider/utils.js.map +1 -1
- package/componentsV2/AppHeader/V3/Actions/Actions.constants.d.ts +4 -1
- package/componentsV2/AppHeader/V3/Actions/Actions.constants.d.ts.map +1 -1
- package/componentsV2/AppHeader/V3/Actions/Actions.constants.js +1 -1
- package/componentsV2/AppHeader/V3/Actions/Actions.constants.js.map +1 -1
- package/componentsV2/AppHeader/V3/Actions/Actions.d.ts.map +1 -1
- package/componentsV2/AppHeader/V3/Actions/Actions.js +1 -1
- package/componentsV2/AppHeader/V3/Actions/Actions.js.map +1 -1
- package/componentsV2/AppHeader/V3/AppHeaderV3.d.ts.map +1 -1
- package/componentsV2/AppHeader/V3/AppHeaderV3.js +1 -1
- package/componentsV2/AppHeader/V3/AppHeaderV3.js.map +1 -1
- package/componentsV2/ButtonIcon/ButtonIcon.d.ts +2 -0
- package/componentsV2/ButtonIcon/ButtonIcon.d.ts.map +1 -1
- package/componentsV2/ButtonIcon/ButtonIcon.js +1 -1
- package/componentsV2/ButtonIcon/ButtonIcon.js.map +1 -1
- package/componentsV2/ButtonIcon/ButtonIcon.scss.js +1 -1
- package/componentsV2/ButtonIcon/ButtonIcon.stories.d.ts +1 -0
- package/componentsV2/ButtonIcon/ButtonIcon.stories.d.ts.map +1 -1
- package/componentsV2/Chip/Chip.d.ts +1 -0
- package/componentsV2/Chip/Chip.d.ts.map +1 -1
- package/componentsV2/Chip/Chip.js +1 -1
- package/componentsV2/Chip/Chip.js.map +1 -1
- package/componentsV2/Chip/Chip.stories.d.ts.map +1 -1
- package/componentsV2/ColorPicker/ColorPicker.d.ts +2 -1
- package/componentsV2/ColorPicker/ColorPicker.d.ts.map +1 -1
- package/componentsV2/ColorPicker/ColorPicker.js +1 -1
- package/componentsV2/ColorPicker/ColorPicker.js.map +1 -1
- package/componentsV2/ColorPicker/ColorPicker.scss.js +1 -1
- package/componentsV2/ColorPicker/ColorPicker.stories.d.ts.map +1 -1
- package/componentsV2/ColorPicker/OpacityDragtracker/OpacityDragtracker.d.ts.map +1 -1
- package/componentsV2/ColorPicker/OpacityDragtracker/OpacityDragtracker.js +1 -1
- package/componentsV2/ColorPicker/OpacityDragtracker/OpacityDragtracker.js.map +1 -1
- package/componentsV2/ColorPicker/Swatches/Swatches.scss.js +1 -1
- package/componentsV2/CompletionsOffsetWellPicker/Map/Map.js +1 -1
- package/componentsV2/CompletionsOffsetWellPicker/Map/Map.js.map +1 -1
- package/componentsV2/InterventionEventSelector/InterventionEventSelector.d.ts +3 -0
- package/componentsV2/InterventionEventSelector/InterventionEventSelector.d.ts.map +1 -0
- package/componentsV2/InterventionEventSelector/InterventionEventSelector.js +2 -0
- package/componentsV2/InterventionEventSelector/InterventionEventSelector.js.map +1 -0
- package/componentsV2/InterventionEventSelector/InterventionEventSelector.scss.js +2 -0
- package/componentsV2/InterventionEventSelector/InterventionEventSelector.scss.js.map +1 -0
- package/componentsV2/InterventionEventSelector/InterventionEventSelector.stories.d.ts +9 -0
- package/componentsV2/InterventionEventSelector/InterventionEventSelector.stories.d.ts.map +1 -0
- package/componentsV2/InterventionEventSelector/__tests__/InterventionEventSelector.test.d.ts +2 -0
- package/componentsV2/InterventionEventSelector/__tests__/InterventionEventSelector.test.d.ts.map +1 -0
- package/componentsV2/InterventionEventSelector/index.d.ts +5 -0
- package/componentsV2/InterventionEventSelector/index.d.ts.map +1 -0
- package/componentsV2/InterventionEventSelector/types.d.ts +22 -0
- package/componentsV2/InterventionEventSelector/types.d.ts.map +1 -0
- package/componentsV2/InterventionEventSelector/useInterventionUnitEvents.d.ts +8 -0
- package/componentsV2/InterventionEventSelector/useInterventionUnitEvents.d.ts.map +1 -0
- package/componentsV2/InterventionEventSelector/useInterventionUnitEvents.js +2 -0
- package/componentsV2/InterventionEventSelector/useInterventionUnitEvents.js.map +1 -0
- package/componentsV2/InterventionEventSelector/utils.d.ts +6 -0
- package/componentsV2/InterventionEventSelector/utils.d.ts.map +1 -0
- package/componentsV2/InterventionEventSelector/utils.js +2 -0
- package/componentsV2/InterventionEventSelector/utils.js.map +1 -0
- package/componentsV2/Modal/Modal.d.ts.map +1 -1
- package/componentsV2/Modal/Modal.js +1 -1
- package/componentsV2/Modal/Modal.js.map +1 -1
- package/componentsV2/Modal/constants.d.ts +3 -0
- package/componentsV2/Modal/constants.d.ts.map +1 -0
- package/componentsV2/Modal/constants.js +2 -0
- package/componentsV2/Modal/constants.js.map +1 -0
- package/componentsV2/WellArchivedMessage/WellArchivedMessage.js +1 -1
- package/componentsV2/WellArchivedMessage/WellArchivedMessage.js.map +1 -1
- package/componentsV2/index.d.ts +1 -0
- package/componentsV2/index.d.ts.map +1 -1
- package/componentsV2/index.js +1 -1
- package/effects/__tests__/useOutsideClick.test.d.ts.map +1 -1
- package/effects/useOutsideClick.d.ts.map +1 -1
- package/effects/useOutsideClick.js +1 -1
- package/effects/useOutsideClick.js.map +1 -1
- package/mcp-server/server.mjs +108 -24
- package/package.json +1 -1
- package/testing/AppTestWrapper/AppTestWrapper.js +1 -1
- package/testing/AppTestWrapper/AppTestWrapper.js.map +1 -1
- package/tsconfig.tsbuildinfo +1 -1
- package/types/shared/Common.d.ts +9 -0
- package/types/shared/Common.d.ts.map +1 -1
- package/utils/__tests__/fetchAttachment.test.d.ts +2 -0
- package/utils/__tests__/fetchAttachment.test.d.ts.map +1 -0
- package/utils/__tests__/links.test.d.ts +2 -0
- package/utils/__tests__/links.test.d.ts.map +1 -0
- package/utils/devcenter.d.ts +1 -0
- package/utils/devcenter.d.ts.map +1 -1
- package/utils/devcenter.js +1 -1
- package/utils/devcenter.js.map +1 -1
- package/utils/fetchAttachment.d.ts +3 -0
- package/utils/fetchAttachment.d.ts.map +1 -0
- package/utils/fetchAttachment.js +2 -0
- package/utils/fetchAttachment.js.map +1 -0
- package/utils/fileExtension.d.ts.map +1 -1
- package/utils/fileExtension.js +1 -1
- package/utils/fileExtension.js.map +1 -1
- package/utils/links.d.ts +14 -0
- package/utils/links.d.ts.map +1 -0
- package/utils/links.js +2 -0
- package/utils/links.js.map +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAttachmentUpload.d.ts","sourceRoot":"","sources":["../../../src/components/CommentComposer/useAttachmentUpload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAA4C,MAAM,OAAO,CAAC;AAG9E,OAAO,KAAK,EAEV,qBAAqB,EACtB,MAAM,8CAA8C,CAAC;
|
|
1
|
+
{"version":3,"file":"useAttachmentUpload.d.ts","sourceRoot":"","sources":["../../../src/components/CommentComposer/useAttachmentUpload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAA4C,MAAM,OAAO,CAAC;AAG9E,OAAO,KAAK,EAEV,qBAAqB,EACtB,MAAM,8CAA8C,CAAC;AAOtD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,KAAK,0BAA0B,GAAG;IAChC,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B,QAAQ,EAAE,CAAC,WAAW,EAAE,kBAAkB,EAAE,KAAK,IAAI,CAAC;IACtD,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mEAAmE;IACnE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAcF,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAkD1C,eAAO,MAAM,mBAAmB,kEAO7B,0BAA0B;;;;8BAwMjB,WAAW,CAAC,gBAAgB,CAAC;sBApD7B,IAAI,EAAE;0BA7BR,MAAM;2BA6FP,qBAAqB,CAAC,IAAI,CAAC;sBAW3B,qBAAqB,CAAC,IAAI,CAAC;qCAcnB,qBAAqB,CAAC,IAAI,CAAC,EAAE;;;;;;;CAkH7C,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import r from"@babel/runtime/helpers/toConsumableArray";import e from"@babel/runtime/helpers/asyncToGenerator";import n from"@babel/runtime/helpers/defineProperty";import t from"@babel/runtime/helpers/slicedToArray";import i from"@babel/runtime/regenerator";import{useState as
|
|
1
|
+
import r from"@babel/runtime/helpers/toConsumableArray";import e from"@babel/runtime/helpers/asyncToGenerator";import n from"@babel/runtime/helpers/defineProperty";import t from"@babel/runtime/helpers/slicedToArray";import i from"@babel/runtime/regenerator";import{useState as u,useRef as o,useCallback as l,useEffect as c}from"react";import a from"react-s3-uploader/s3upload";import{getAttachmentKind as f}from"../AttachmentPreview/getAttachmentKind.js";import{ACCEPTED_ATTACHMENT_TYPES as s}from"../AttachFileButton/AttachFileButton.js";import{getS3SignedUrl as d,getS3DownloadLink as p}from"../../clients/jsonApi/index.js";import{getUrlFileName as v}from"../../utils/links.js";function m(r,e){var n=Object.keys(r);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(r);e&&(t=t.filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.push.apply(n,t)}return n}function h(r){for(var e=1;e<arguments.length;e++){var t=null!=arguments[e]?arguments[e]:{};e%2?m(Object(t),!0).forEach((function(e){n(r,e,t[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(t)):m(Object(t)).forEach((function(e){Object.defineProperty(r,e,Object.getOwnPropertyDescriptor(t,e))}))}return r}var g=10,b=function(r){return r.type.startsWith("image/")?"image":r.type.startsWith("video/")?"video":"file"},U=function(r){return(r/1048576).toFixed(1)},w=function(r){return{id:r.url,name:r.name,file:null,previewUrl:"",isUploading:!1,error:null,uploaded:r}},y=0,j=function(){return"attachment-".concat(y+=1)},O=function(n){var m,g,y=n.value,O=n.onChange,k=n.onError,F=n.maxSizeBytes,x=n.maxFiles,L=void 0===x?10:x,P=n.accept,A=void 0===P?s:P,S=u([]),z=t(S,2),E=z[0],R=z[1],B=o(null),C=o(new Map),M=o(new Map),W=o([]),D=o(O),T=o(k);D.current=O,T.current=k;var I=o([]),Y=l((function(r){var e=r(W.current);W.current=e,R(e),I.current=function(r){return r.map((function(r){return r.uploaded})).filter(Boolean)}(e),D.current(I.current)}),[]),_=l((function(r,e){return Y((function(n){return n.map((function(n){return n.id===r?h(h({},n),e):n}))}))}),[Y]),G=l((function(r){var e,n;null===(e=C.current.get(r))||void 0===e||e.abortUpload(),C.current.delete(r),M.current.set(r,(null!==(n=M.current.get(r))&&void 0!==n?n:0)+1)}),[]),K=l((function(r){null!=r&&r.previewUrl&&URL.revokeObjectURL(r.previewUrl)}),[]),q=l((function(){var r,e,n;null===(r=T.current)||void 0===r||r.call(T,null!==(e=null===(n=W.current.find((function(r){return r.error})))||void 0===n?void 0:n.error)&&void 0!==e?e:null)}),[]);c((function(){return function(){C.current.forEach((function(r){return r.abortUpload()})),C.current.clear(),W.current.forEach((function(r){r.previewUrl&&URL.revokeObjectURL(r.previewUrl)}))}}),[]);var H=l((function(r,n){var t,u=(null!==(t=M.current.get(r))&&void 0!==t?t:0)+1;M.current.set(r,u);var o,l,c=function(){return M.current.get(r)===u},f=function(e){var n;c()&&(_(r,{isUploading:!1,error:e}),null===(n=T.current)||void 0===n||n.call(T,e))},s="",v=new a({files:[n],preprocess:function(r,e){return e(r)},onProgress:function(){},getSignedUrl:(l=e(i.mark((function r(e,n){var t;return i.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.prev=0,r.next=3,d(e.name,e.type);case 3:t=r.sent,s=t.file_name,n(h(h({},t),{},{signedUrl:t.signed_url})),r.next=11;break;case 8:r.prev=8,r.t0=r.catch(0),f((null===r.t0||void 0===r.t0?void 0:r.t0.message)||"Failed to upload the file");case 11:case"end":return r.stop()}}),r,null,[[0,8]])}))),function(r,e){return l.apply(this,arguments)}),onFinishS3Put:(o=e(i.mark((function e(){var t,u;return i.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,p(s);case 3:if(t=e.sent,u=t.url,c()){e.next=7;break}return e.abrupt("return");case 7:C.current.delete(r),_(r,{isUploading:!1,error:null,uploaded:{url:u,name:s,size:n.size}}),q(),e.next=15;break;case 12:e.prev=12,e.t0=e.catch(0),f((null===e.t0||void 0===e.t0?void 0:e.t0.message)||"Failed to upload the file");case 15:case"end":return e.stop()}}),e,null,[[0,12]])}))),function(){return o.apply(this,arguments)}),onError:function(r){return f(r||"Failed to upload the file")}});C.current.set(r,v)}),[_,q]),J=l((function(e){var n,t=v(e);t&&(W.current.length>=L?null===(n=T.current)||void 0===n||n.call(T,"You can attach up to ".concat(L," files.")):W.current.some((function(r){var n;return(null===(n=r.uploaded)||void 0===n?void 0:n.url)===e}))||Y((function(n){return[].concat(r(n),[{id:j(),name:t,file:null,previewUrl:e,isUploading:!1,error:null,uploaded:{url:e,name:t}}])})))}),[Y,L]),N=l((function(e){var n,t,i,u,o=e.filter((function(r){return function(r,e){return e.split(",").map((function(r){return r.trim().toLowerCase()})).filter(Boolean).some((function(e){if(e.startsWith("."))return r.name.toLowerCase().endsWith(e);if(e.endsWith("/*")){var n=r.type.toLowerCase();return n?n.startsWith(e.slice(0,-1)):f({name:r.name})===e.slice(0,-1)}return r.type.toLowerCase()===e}))}(r,A)})),l=o.length<e.length?1===e.length?"That file type is not supported.":"Some files were skipped — unsupported file type.":null,c="You can attach up to ".concat(L," files."),a=L-W.current.length;if(!o.length||a<=0){var s;null===(s=T.current)||void 0===s||s.call(T,o.length?c:l)}else{var d=o.slice(0,a),p=d.map((function(r){var e=b(r),n=!!F&&r.size>F;return{id:j(),name:r.name,file:r,previewUrl:"file"===e?"":URL.createObjectURL(r),isUploading:!n,error:n?"File is too large (".concat(U(r.size)," MB). Maximum size is ").concat(U(F)," MB."):null,uploaded:null}}));Y((function(e){return[].concat(r(e),r(p))}));var v=o.length>d.length?c:null;null===(n=T.current)||void 0===n||n.call(T,null!==(t=null!==(i=null===(u=W.current.find((function(r){return r.error})))||void 0===u?void 0:u.error)&&void 0!==i?i:l)&&void 0!==t?t:v),p.filter((function(r){return!r.error})).forEach((function(r){return H(r.id,r.file)}))}}),[Y,L,F,H,A]),Q=l((function(r){var e,n=Array.from(null!==(e=r.target.files)&&void 0!==e?e:[]);B.current&&(B.current.value=""),n.length&&N(n)}),[N]),V=l((function(){var r;return null===(r=B.current)||void 0===r?void 0:r.click()}),[]),X=l((function(r){var e=String(r);G(e),K(W.current.find((function(r){return r.id===e}))),Y((function(r){return r.filter((function(r){return r.id!==e}))})),q()}),[G,K,Y,q]),Z=l((function(r){var e=String(r),n=W.current.find((function(r){return r.id===e}));null!=n&&n.file&&(G(e),_(e,{isUploading:!0,error:null}),q(),H(e,n.file))}),[G,_,H,q]),$=l((function(e){return Y((function(n){var t=new Map(n.map((function(r){return[r.id,r]}))),i=e.map((function(r){return t.get(String(r))})).filter(Boolean),u=n.filter((function(r){return!e.some((function(e){return String(e)===r.id}))}));return[].concat(r(i),r(u))}))}),[Y]),rr=l((function(){var r;W.current.forEach((function(r){G(r.id),K(r)})),Y((function(){return[]})),null===(r=T.current)||void 0===r||r.call(T,null)}),[G,Y,K]);c((function(){var r,e,n;(e=I.current,n=y,e.length===n.length&&e.every((function(r,e){return r.url===n[e].url})))||(W.current.forEach((function(r){G(r.id),r.previewUrl&&URL.revokeObjectURL(r.previewUrl)})),W.current=y.map(w),I.current=y,R(W.current),null===(r=T.current)||void 0===r||r.call(T,null))}),[y,G]);var er=u({}),nr=t(er,2),tr=nr[0],ir=nr[1],ur=o(tr);ur.current=tr;var or=E.filter((function(r){return!r.file&&!r.previewUrl&&r.uploaded})).map((function(r){return r.uploaded.name})).join("|");return c((function(){var r=or.split("|").filter((function(r){return r&&!(r in ur.current)}));if(r.length){var e=!0;return Promise.all(r.map((function(r){return p(r,"inline").then((function(e){var n=e.url;return[r,n]})).catch((function(e){return console.error('Failed to sign stored attachment "'.concat(r,'"'),e),[r,""]}))}))).then((function(r){e&&ir((function(e){return h(h({},e),Object.fromEntries(r))}))})),function(){e=!1}}}),[or]),{items:E.reduce((function(r,e){var n;if(e.file)return r.push({id:e.id,name:e.name,src:e.previewUrl,kind:b(e.file),size:e.file.size,isUploading:e.isUploading,error:null!==(n=e.error)&&void 0!==n?n:void 0}),r;var t=e.uploaded,i=f(t),u=e.previewUrl||tr[t.name];return"file"===i||u?(r.push({id:e.id,name:t.name,src:u,kind:i,size:t.size}),r):r}),[]),fileInputRef:B,openFileDialog:V,handleFileSelect:Q,addFiles:N,addLinkedImage:J,removeAttachment:X,handleRetry:Z,reorderAttachments:$,clearAttachments:rr,isUploading:E.some((function(r){return r.isUploading})),error:null!==(m=null===(g=E.find((function(r){return r.error})))||void 0===g?void 0:g.error)&&void 0!==m?m:null,count:E.length,isFull:E.length>=L,maxFiles:L}};export{g as DEFAULT_MAX_ATTACHMENTS,O as useAttachmentUpload};
|
|
2
2
|
//# sourceMappingURL=useAttachmentUpload.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAttachmentUpload.js","sources":["../../../src/components/CommentComposer/useAttachmentUpload.ts"],"sourcesContent":["import { ChangeEvent, useCallback, useEffect, useRef, useState } from 'react';\nimport S3Upload from 'react-s3-uploader/s3upload';\n\nimport type {\n AttachmentKind,\n AttachmentPreviewItem,\n} from '../AttachmentPreview/AttachmentPreview.types';\nimport { getAttachmentKind } from '../AttachmentPreview/getAttachmentKind';\nimport { ACCEPTED_ATTACHMENT_TYPES } from '../AttachFileButton';\n\nimport { getS3SignedUrl, getS3DownloadLink } from '~/clients/jsonApi';\n\nexport type UploadedAttachment = {\n url: string;\n name: string;\n size?: number;\n};\n\ntype UseAttachmentUploadOptions = {\n value: UploadedAttachment[];\n onChange: (attachments: UploadedAttachment[]) => void;\n onError?: (message: string | null) => void;\n maxSizeBytes?: number;\n maxFiles?: number;\n /** Mirrors the file input's `accept`; also gates drag-and-drop. */\n accept?: string;\n};\n\n/** A picked or already-stored file, in the order the user arranged it. */\ntype Entry = {\n id: string;\n name: string;\n /** Set while the file is local; cleared entries come from `value`. */\n file: File | null;\n previewUrl: string;\n isUploading: boolean;\n error: string | null;\n uploaded: UploadedAttachment | null;\n};\n\nexport const DEFAULT_MAX_ATTACHMENTS = 10;\n\n/** Same rules the file input enforces via `accept`, so drag-and-drop can't smuggle a type past it. */\nconst isAcceptedType = (file: File, accept: string) =>\n accept\n .split(',')\n .map(rule => rule.trim().toLowerCase())\n .filter(Boolean)\n .some(rule => {\n if (rule.startsWith('.')) return file.name.toLowerCase().endsWith(rule);\n if (rule.endsWith('/*')) {\n const type = file.type.toLowerCase();\n if (type) return type.startsWith(rule.slice(0, -1));\n\n return getAttachmentKind({ name: file.name }) === rule.slice(0, -1);\n }\n\n return file.type.toLowerCase() === rule;\n });\n\nconst getFileKind = (file: File): AttachmentKind => {\n if (file.type.startsWith('image/')) return 'image';\n if (file.type.startsWith('video/')) return 'video';\n return 'file';\n};\n\nconst formatMb = (bytes: number) => (bytes / (1024 * 1024)).toFixed(1);\n\nconst getUploaded = (entries: Entry[]) =>\n entries.map(entry => entry.uploaded).filter(Boolean) as UploadedAttachment[];\n\nconst isSameList = (a: UploadedAttachment[], b: UploadedAttachment[]) =>\n a.length === b.length && a.every((item, index) => item.url === b[index].url);\n\nconst toStoredEntry = (attachment: UploadedAttachment): Entry => ({\n id: attachment.url,\n name: attachment.name,\n file: null,\n previewUrl: '',\n isUploading: false,\n error: null,\n uploaded: attachment,\n});\n\nlet entrySeq = 0;\nconst nextEntryId = () => {\n entrySeq += 1;\n return `attachment-${entrySeq}`;\n};\n\nexport const useAttachmentUpload = ({\n value,\n onChange,\n onError,\n maxSizeBytes,\n maxFiles = DEFAULT_MAX_ATTACHMENTS,\n accept = ACCEPTED_ATTACHMENT_TYPES,\n}: UseAttachmentUploadOptions) => {\n const [entries, setEntries] = useState<Entry[]>([]);\n\n const fileInputRef = useRef<HTMLInputElement>(null);\n const uploadersRef = useRef(new Map<string, S3Upload>());\n // Bumped per attempt so a superseded upload can't write state for a restarted entry.\n const sessionsRef = useRef(new Map<string, number>());\n // Mutations are driven from async upload callbacks, so the latest list lives in a ref.\n const entriesRef = useRef<Entry[]>([]);\n const onChangeRef = useRef(onChange);\n const onErrorRef = useRef(onError);\n\n onChangeRef.current = onChange;\n onErrorRef.current = onError;\n\n // What we last handed the parent. A `value` that still matches it is our own change echoing\n // back; anything else is a parent-driven reset we must adopt.\n const emittedRef = useRef<UploadedAttachment[]>([]);\n\n const commit = useCallback((updater: (prev: Entry[]) => Entry[]) => {\n const next = updater(entriesRef.current);\n entriesRef.current = next;\n setEntries(next);\n emittedRef.current = getUploaded(next);\n onChangeRef.current(emittedRef.current);\n }, []);\n\n const patchEntry = useCallback(\n (id: string, patch: Partial<Entry>) =>\n commit(prev => prev.map(entry => (entry.id === id ? { ...entry, ...patch } : entry))),\n [commit]\n );\n\n const abortUpload = useCallback((id: string) => {\n uploadersRef.current.get(id)?.abortUpload();\n uploadersRef.current.delete(id);\n // Bump, never delete: deleting would let the next attempt reuse session 1, so a callback\n // still in flight from the aborted attempt would pass `isCurrent` and clobber it.\n sessionsRef.current.set(id, (sessionsRef.current.get(id) ?? 0) + 1);\n }, []);\n\n const releasePreview = useCallback((entry?: Entry) => {\n if (entry?.previewUrl) URL.revokeObjectURL(entry.previewUrl);\n }, []);\n\n // The banner is shared by every tile, so recompute it rather than clear it — one file\n // succeeding must not hide a sibling that is still failing.\n const syncError = useCallback(() => {\n onErrorRef.current?.(entriesRef.current.find(entry => entry.error)?.error ?? null);\n }, []);\n\n useEffect(\n () => () => {\n uploadersRef.current.forEach(uploader => uploader.abortUpload());\n uploadersRef.current.clear();\n entriesRef.current.forEach(entry => {\n if (entry.previewUrl) URL.revokeObjectURL(entry.previewUrl);\n });\n },\n []\n );\n\n const startUpload = useCallback(\n (id: string, file: File) => {\n const session = (sessionsRef.current.get(id) ?? 0) + 1;\n sessionsRef.current.set(id, session);\n // A superseded upload must not write state for an entry that is gone or restarted.\n const isCurrent = () => sessionsRef.current.get(id) === session;\n\n const fail = (message: string) => {\n if (!isCurrent()) return;\n patchEntry(id, { isUploading: false, error: message });\n onErrorRef.current?.(message);\n };\n\n let storedKey = '';\n\n const uploader = new S3Upload({\n files: [file],\n preprocess: (target: File, next: (file: File) => void) => next(target),\n onProgress: () => {},\n getSignedUrl: async (\n target: File,\n callback: (data: { signedUrl: string; [key: string]: unknown }) => void\n ) => {\n try {\n const data = await getS3SignedUrl(target.name, target.type);\n storedKey = data.file_name;\n callback({ ...data, signedUrl: data.signed_url });\n } catch (e) {\n fail((e as Error)?.message || 'Failed to upload the file');\n }\n },\n onFinishS3Put: async () => {\n try {\n const { url } = await getS3DownloadLink(storedKey);\n if (!isCurrent()) return;\n\n uploadersRef.current.delete(id);\n patchEntry(id, {\n isUploading: false,\n error: null,\n uploaded: { url, name: storedKey, size: file.size },\n });\n syncError();\n } catch (e) {\n fail((e as Error)?.message || 'Failed to upload the file');\n }\n },\n onError: (message: string) => fail(message || 'Failed to upload the file'),\n });\n\n uploadersRef.current.set(id, uploader);\n },\n [patchEntry, syncError]\n );\n\n const addFiles = useCallback(\n (files: File[]) => {\n const supported = files.filter(file => isAcceptedType(file, accept));\n const skipped = supported.length < files.length;\n // One banner, one message: report the most actionable reason once, at the end. Reporting\n // as we go would let a later call overwrite an earlier warning on a mixed drop.\n const unsupported = skipped\n ? (files.length === 1 && 'That file type is not supported.') ||\n 'Some files were skipped — unsupported file type.'\n : null;\n const tooMany = `You can attach up to ${maxFiles} files.`;\n\n const room = maxFiles - entriesRef.current.length;\n if (!supported.length || room <= 0) {\n onErrorRef.current?.(supported.length ? tooMany : unsupported);\n return;\n }\n\n const accepted = supported.slice(0, room);\n const added: Entry[] = accepted.map(file => {\n const kind = getFileKind(file);\n const isTooLarge = !!maxSizeBytes && file.size > maxSizeBytes;\n\n return {\n id: nextEntryId(),\n name: file.name,\n file,\n previewUrl: kind === 'file' ? '' : URL.createObjectURL(file),\n isUploading: !isTooLarge,\n error: isTooLarge\n ? `File is too large (${formatMb(file.size)} MB). Maximum size is ${formatMb(\n maxSizeBytes as number\n )} MB.`\n : null,\n uploaded: null,\n };\n });\n\n commit(prev => [...prev, ...added]);\n\n const overflow = supported.length > accepted.length ? tooMany : null;\n onErrorRef.current?.(\n entriesRef.current.find(entry => entry.error)?.error ?? unsupported ?? overflow\n );\n\n added\n .filter(entry => !entry.error)\n .forEach(entry => startUpload(entry.id, entry.file as File));\n },\n [commit, maxFiles, maxSizeBytes, startUpload, accept]\n );\n\n const handleFileSelect = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n const files = Array.from(event.target.files ?? []);\n // Reset the input so re-picking the same file still fires a change event.\n if (fileInputRef.current) fileInputRef.current.value = '';\n if (files.length) addFiles(files);\n },\n [addFiles]\n );\n\n const openFileDialog = useCallback(() => fileInputRef.current?.click(), []);\n\n const removeAttachment = useCallback(\n (id: AttachmentPreviewItem['id']) => {\n const key = String(id);\n abortUpload(key);\n releasePreview(entriesRef.current.find(entry => entry.id === key));\n commit(prev => prev.filter(entry => entry.id !== key));\n syncError();\n },\n [abortUpload, releasePreview, commit, syncError]\n );\n\n const handleRetry = useCallback(\n (id: AttachmentPreviewItem['id']) => {\n const key = String(id);\n const entry = entriesRef.current.find(item => item.id === key);\n if (!entry?.file) return;\n\n abortUpload(key);\n patchEntry(key, { isUploading: true, error: null });\n syncError();\n startUpload(key, entry.file);\n },\n [abortUpload, patchEntry, startUpload, syncError]\n );\n\n const reorderAttachments = useCallback(\n (orderedIds: AttachmentPreviewItem['id'][]) =>\n commit(prev => {\n const byId = new Map(prev.map(entry => [entry.id, entry]));\n const reordered = orderedIds.map(id => byId.get(String(id))).filter(Boolean) as Entry[];\n // Unlisted ids (a race with a removal) keep their place at the end.\n const missing = prev.filter(entry => !orderedIds.some(id => String(id) === entry.id));\n return [...reordered, ...missing];\n }),\n [commit]\n );\n\n const clearAttachments = useCallback(() => {\n entriesRef.current.forEach(entry => {\n abortUpload(entry.id);\n releasePreview(entry);\n });\n commit(() => []);\n onErrorRef.current?.(null);\n }, [abortUpload, commit, releasePreview]);\n\n // Adopt a value we didn't produce — an edit form's initial attachments, or a parent-side reset.\n // Compared against what we emitted, not against the current entries: a failed-only or\n // mid-upload list emits `[]` too, and treating that as \"in sync\" would strand those tiles\n // on screen and let a late upload write itself back into freshly reset parent state.\n useEffect(() => {\n if (isSameList(emittedRef.current, value)) return;\n\n entriesRef.current.forEach(entry => {\n abortUpload(entry.id);\n if (entry.previewUrl) URL.revokeObjectURL(entry.previewUrl);\n });\n entriesRef.current = value.map(toStoredEntry);\n emittedRef.current = value;\n setEntries(entriesRef.current);\n onErrorRef.current?.(null);\n }, [value, abortUpload]);\n\n // A stored url has expired by now, so re-sign it for the preview.\n const [storedSrcs, setStoredSrcs] = useState<Record<string, string>>({});\n const storedSrcsRef = useRef(storedSrcs);\n storedSrcsRef.current = storedSrcs;\n\n const storedNames = entries\n .filter(entry => !entry.file && entry.uploaded)\n .map(entry => (entry.uploaded as UploadedAttachment).name)\n .join('|');\n\n useEffect(() => {\n const pending = storedNames.split('|').filter(name => name && !(name in storedSrcsRef.current));\n if (!pending.length) return undefined;\n\n let isActive = true;\n Promise.all(\n pending.map(name =>\n getS3DownloadLink(name, 'inline')\n .then(({ url }: { url: string }) => [name, url] as const)\n .catch(error => {\n console.error(`Failed to sign stored attachment \"${name}\"`, error);\n\n return [name, ''] as const;\n })\n )\n ).then(resolved => {\n if (isActive) setStoredSrcs(prev => ({ ...prev, ...Object.fromEntries(resolved) }));\n });\n\n return () => {\n isActive = false;\n };\n }, [storedNames]);\n\n const items = entries.reduce<AttachmentPreviewItem[]>((acc, entry) => {\n if (entry.file) {\n acc.push({\n id: entry.id,\n name: entry.name,\n src: entry.previewUrl,\n kind: getFileKind(entry.file),\n isUploading: entry.isUploading,\n error: entry.error ?? undefined,\n });\n return acc;\n }\n\n const stored = entry.uploaded as UploadedAttachment;\n const kind = getAttachmentKind(stored);\n const src = storedSrcs[stored.name];\n // A thumbnail without its signed url would paint as a broken image, so hold it back.\n if (kind !== 'file' && !src) return acc;\n\n acc.push({ id: entry.id, name: stored.name, src, kind });\n return acc;\n }, []);\n\n return {\n items,\n fileInputRef,\n openFileDialog,\n handleFileSelect,\n addFiles,\n removeAttachment,\n handleRetry,\n reorderAttachments,\n clearAttachments,\n isUploading: entries.some(entry => entry.isUploading),\n error: entries.find(entry => entry.error)?.error ?? null,\n count: entries.length,\n isFull: entries.length >= maxFiles,\n maxFiles,\n };\n};\n"],"names":["DEFAULT_MAX_ATTACHMENTS","getFileKind","file","type","startsWith","formatMb","bytes","toFixed","toStoredEntry","attachment","id","url","name","previewUrl","isUploading","error","uploaded","entrySeq","useAttachmentUpload","_ref","_entries$find$error","_entries$find","value","onChange","onError","maxSizeBytes","_ref$maxFiles","maxFiles","_ref$accept","accept","ACCEPTED_ATTACHMENT_TYPES","useState","_useState2","_slicedToArray","_useState","entries","setEntries","fileInputRef","useRef","uploadersRef","Map","sessionsRef","entriesRef","onChangeRef","onErrorRef","current","emittedRef","commit","useCallback","updater","next","map","entry","filter","Boolean","getUploaded","patchEntry","patch","prev","abortUpload","_uploadersRef$current","_sessionsRef$current$","get","delete","set","releasePreview","URL","revokeObjectURL","syncError","_onErrorRef$current","_entriesRef$current$f","_entriesRef$current$f2","find","useEffect","forEach","uploader","clear","startUpload","_sessionsRef$current$2","session","_onFinishS3Put","_getSignedUrl","isCurrent","fail","message","_onErrorRef$current2","storedKey","S3Upload","files","preprocess","target","onProgress","getSignedUrl","_asyncToGenerator","_regeneratorRuntime","mark","_callee","callback","_data","wrap","_context","getS3SignedUrl","data","sent","file_name","signedUrl","signed_url","t0","stop","_x","_x2","apply","this","arguments","onFinishS3Put","_callee2","_yield$getS3DownloadL","_context2","getS3DownloadLink","abrupt","size","addFiles","_onErrorRef$current4","_ref2","_entriesRef$current$f3","_entriesRef$current$f4","supported","split","rule","trim","toLowerCase","some","endsWith","slice","getAttachmentKind","isAcceptedType","unsupported","length","tooMany","room","_onErrorRef$current3","accepted","added","kind","isTooLarge","concat","createObjectURL","overflow","handleFileSelect","event","_event$target$files","Array","from","openFileDialog","_fileInputRef$current","click","removeAttachment","key","String","handleRetry","item","reorderAttachments","orderedIds","byId","reordered","missing","clearAttachments","_onErrorRef$current5","_onErrorRef$current6","a","b","every","index","_useState3","_useState4","storedSrcs","setStoredSrcs","storedSrcsRef","storedNames","join","pending","isActive","Promise","all","then","_ref3","catch","console","resolved","_objectSpread","Object","fromEntries","items","reduce","acc","_entry$error","push","src","undefined","stored","count","isFull"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useAttachmentUpload.js","sources":["../../../src/components/CommentComposer/useAttachmentUpload.ts"],"sourcesContent":["import { ChangeEvent, useCallback, useEffect, useRef, useState } from 'react';\nimport S3Upload from 'react-s3-uploader/s3upload';\n\nimport type {\n AttachmentKind,\n AttachmentPreviewItem,\n} from '../AttachmentPreview/AttachmentPreview.types';\nimport { getAttachmentKind } from '../AttachmentPreview/getAttachmentKind';\nimport { ACCEPTED_ATTACHMENT_TYPES } from '../AttachFileButton';\n\nimport { getS3SignedUrl, getS3DownloadLink } from '~/clients/jsonApi';\nimport { getUrlFileName } from '~/utils/links';\n\nexport type UploadedAttachment = {\n url: string;\n name: string;\n size?: number;\n};\n\ntype UseAttachmentUploadOptions = {\n value: UploadedAttachment[];\n onChange: (attachments: UploadedAttachment[]) => void;\n onError?: (message: string | null) => void;\n maxSizeBytes?: number;\n maxFiles?: number;\n /** Mirrors the file input's `accept`; also gates drag-and-drop. */\n accept?: string;\n};\n\n/** A picked or already-stored file, in the order the user arranged it. */\ntype Entry = {\n id: string;\n name: string;\n /** Set while the file is local; cleared entries come from `value`. */\n file: File | null;\n previewUrl: string;\n isUploading: boolean;\n error: string | null;\n uploaded: UploadedAttachment | null;\n};\n\nexport const DEFAULT_MAX_ATTACHMENTS = 10;\n\n/** Same rules the file input enforces via `accept`, so drag-and-drop can't smuggle a type past it. */\nconst isAcceptedType = (file: File, accept: string) =>\n accept\n .split(',')\n .map(rule => rule.trim().toLowerCase())\n .filter(Boolean)\n .some(rule => {\n if (rule.startsWith('.')) return file.name.toLowerCase().endsWith(rule);\n if (rule.endsWith('/*')) {\n const type = file.type.toLowerCase();\n if (type) return type.startsWith(rule.slice(0, -1));\n\n return getAttachmentKind({ name: file.name }) === rule.slice(0, -1);\n }\n\n return file.type.toLowerCase() === rule;\n });\n\nconst getFileKind = (file: File): AttachmentKind => {\n if (file.type.startsWith('image/')) return 'image';\n if (file.type.startsWith('video/')) return 'video';\n return 'file';\n};\n\nconst formatMb = (bytes: number) => (bytes / (1024 * 1024)).toFixed(1);\n\nconst getUploaded = (entries: Entry[]) =>\n entries.map(entry => entry.uploaded).filter(Boolean) as UploadedAttachment[];\n\nconst isSameList = (a: UploadedAttachment[], b: UploadedAttachment[]) =>\n a.length === b.length && a.every((item, index) => item.url === b[index].url);\n\nconst toStoredEntry = (attachment: UploadedAttachment): Entry => ({\n id: attachment.url,\n name: attachment.name,\n file: null,\n previewUrl: '',\n isUploading: false,\n error: null,\n uploaded: attachment,\n});\n\nlet entrySeq = 0;\nconst nextEntryId = () => {\n entrySeq += 1;\n return `attachment-${entrySeq}`;\n};\n\nexport const useAttachmentUpload = ({\n value,\n onChange,\n onError,\n maxSizeBytes,\n maxFiles = DEFAULT_MAX_ATTACHMENTS,\n accept = ACCEPTED_ATTACHMENT_TYPES,\n}: UseAttachmentUploadOptions) => {\n const [entries, setEntries] = useState<Entry[]>([]);\n\n const fileInputRef = useRef<HTMLInputElement>(null);\n const uploadersRef = useRef(new Map<string, S3Upload>());\n // Bumped per attempt so a superseded upload can't write state for a restarted entry.\n const sessionsRef = useRef(new Map<string, number>());\n // Mutations are driven from async upload callbacks, so the latest list lives in a ref.\n const entriesRef = useRef<Entry[]>([]);\n const onChangeRef = useRef(onChange);\n const onErrorRef = useRef(onError);\n\n onChangeRef.current = onChange;\n onErrorRef.current = onError;\n\n // What we last handed the parent. A `value` that still matches it is our own change echoing\n // back; anything else is a parent-driven reset we must adopt.\n const emittedRef = useRef<UploadedAttachment[]>([]);\n\n const commit = useCallback((updater: (prev: Entry[]) => Entry[]) => {\n const next = updater(entriesRef.current);\n entriesRef.current = next;\n setEntries(next);\n emittedRef.current = getUploaded(next);\n onChangeRef.current(emittedRef.current);\n }, []);\n\n const patchEntry = useCallback(\n (id: string, patch: Partial<Entry>) =>\n commit(prev => prev.map(entry => (entry.id === id ? { ...entry, ...patch } : entry))),\n [commit]\n );\n\n const abortUpload = useCallback((id: string) => {\n uploadersRef.current.get(id)?.abortUpload();\n uploadersRef.current.delete(id);\n // Bump, never delete: deleting would let the next attempt reuse session 1, so a callback\n // still in flight from the aborted attempt would pass `isCurrent` and clobber it.\n sessionsRef.current.set(id, (sessionsRef.current.get(id) ?? 0) + 1);\n }, []);\n\n const releasePreview = useCallback((entry?: Entry) => {\n if (entry?.previewUrl) URL.revokeObjectURL(entry.previewUrl);\n }, []);\n\n // The banner is shared by every tile, so recompute it rather than clear it — one file\n // succeeding must not hide a sibling that is still failing.\n const syncError = useCallback(() => {\n onErrorRef.current?.(entriesRef.current.find(entry => entry.error)?.error ?? null);\n }, []);\n\n useEffect(\n () => () => {\n uploadersRef.current.forEach(uploader => uploader.abortUpload());\n uploadersRef.current.clear();\n entriesRef.current.forEach(entry => {\n if (entry.previewUrl) URL.revokeObjectURL(entry.previewUrl);\n });\n },\n []\n );\n\n const startUpload = useCallback(\n (id: string, file: File) => {\n const session = (sessionsRef.current.get(id) ?? 0) + 1;\n sessionsRef.current.set(id, session);\n // A superseded upload must not write state for an entry that is gone or restarted.\n const isCurrent = () => sessionsRef.current.get(id) === session;\n\n const fail = (message: string) => {\n if (!isCurrent()) return;\n patchEntry(id, { isUploading: false, error: message });\n onErrorRef.current?.(message);\n };\n\n let storedKey = '';\n\n const uploader = new S3Upload({\n files: [file],\n preprocess: (target: File, next: (file: File) => void) => next(target),\n onProgress: () => {},\n getSignedUrl: async (\n target: File,\n callback: (data: { signedUrl: string; [key: string]: unknown }) => void\n ) => {\n try {\n const data = await getS3SignedUrl(target.name, target.type);\n storedKey = data.file_name;\n callback({ ...data, signedUrl: data.signed_url });\n } catch (e) {\n fail((e as Error)?.message || 'Failed to upload the file');\n }\n },\n onFinishS3Put: async () => {\n try {\n const { url } = await getS3DownloadLink(storedKey);\n if (!isCurrent()) return;\n\n uploadersRef.current.delete(id);\n patchEntry(id, {\n isUploading: false,\n error: null,\n uploaded: { url, name: storedKey, size: file.size },\n });\n syncError();\n } catch (e) {\n fail((e as Error)?.message || 'Failed to upload the file');\n }\n },\n onError: (message: string) => fail(message || 'Failed to upload the file'),\n });\n\n uploadersRef.current.set(id, uploader);\n },\n [patchEntry, syncError]\n );\n\n /** Nothing is uploaded: a comment attachment is a url, so the link itself is the attachment. */\n const addLinkedImage = useCallback(\n (url: string) => {\n const name = getUrlFileName(url);\n\n if (!name) return;\n if (entriesRef.current.length >= maxFiles) {\n onErrorRef.current?.(`You can attach up to ${maxFiles} files.`);\n\n return;\n }\n\n if (entriesRef.current.some(entry => entry.uploaded?.url === url)) return;\n\n commit(prev => [\n ...prev,\n {\n id: nextEntryId(),\n name,\n file: null,\n previewUrl: url,\n isUploading: false,\n error: null,\n uploaded: { url, name },\n },\n ]);\n },\n [commit, maxFiles]\n );\n\n const addFiles = useCallback(\n (files: File[]) => {\n const supported = files.filter(file => isAcceptedType(file, accept));\n const skipped = supported.length < files.length;\n // One banner, one message: report the most actionable reason once, at the end. Reporting\n // as we go would let a later call overwrite an earlier warning on a mixed drop.\n const unsupported = skipped\n ? (files.length === 1 && 'That file type is not supported.') ||\n 'Some files were skipped — unsupported file type.'\n : null;\n const tooMany = `You can attach up to ${maxFiles} files.`;\n\n const room = maxFiles - entriesRef.current.length;\n if (!supported.length || room <= 0) {\n onErrorRef.current?.(supported.length ? tooMany : unsupported);\n return;\n }\n\n const accepted = supported.slice(0, room);\n const added: Entry[] = accepted.map(file => {\n const kind = getFileKind(file);\n const isTooLarge = !!maxSizeBytes && file.size > maxSizeBytes;\n\n return {\n id: nextEntryId(),\n name: file.name,\n file,\n previewUrl: kind === 'file' ? '' : URL.createObjectURL(file),\n isUploading: !isTooLarge,\n error: isTooLarge\n ? `File is too large (${formatMb(file.size)} MB). Maximum size is ${formatMb(\n maxSizeBytes as number\n )} MB.`\n : null,\n uploaded: null,\n };\n });\n\n commit(prev => [...prev, ...added]);\n\n const overflow = supported.length > accepted.length ? tooMany : null;\n onErrorRef.current?.(\n entriesRef.current.find(entry => entry.error)?.error ?? unsupported ?? overflow\n );\n\n added\n .filter(entry => !entry.error)\n .forEach(entry => startUpload(entry.id, entry.file as File));\n },\n [commit, maxFiles, maxSizeBytes, startUpload, accept]\n );\n\n const handleFileSelect = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n const files = Array.from(event.target.files ?? []);\n // Reset the input so re-picking the same file still fires a change event.\n if (fileInputRef.current) fileInputRef.current.value = '';\n if (files.length) addFiles(files);\n },\n [addFiles]\n );\n\n const openFileDialog = useCallback(() => fileInputRef.current?.click(), []);\n\n const removeAttachment = useCallback(\n (id: AttachmentPreviewItem['id']) => {\n const key = String(id);\n abortUpload(key);\n releasePreview(entriesRef.current.find(entry => entry.id === key));\n commit(prev => prev.filter(entry => entry.id !== key));\n syncError();\n },\n [abortUpload, releasePreview, commit, syncError]\n );\n\n const handleRetry = useCallback(\n (id: AttachmentPreviewItem['id']) => {\n const key = String(id);\n const entry = entriesRef.current.find(item => item.id === key);\n if (!entry?.file) return;\n\n abortUpload(key);\n patchEntry(key, { isUploading: true, error: null });\n syncError();\n startUpload(key, entry.file);\n },\n [abortUpload, patchEntry, startUpload, syncError]\n );\n\n const reorderAttachments = useCallback(\n (orderedIds: AttachmentPreviewItem['id'][]) =>\n commit(prev => {\n const byId = new Map(prev.map(entry => [entry.id, entry]));\n const reordered = orderedIds.map(id => byId.get(String(id))).filter(Boolean) as Entry[];\n // Unlisted ids (a race with a removal) keep their place at the end.\n const missing = prev.filter(entry => !orderedIds.some(id => String(id) === entry.id));\n return [...reordered, ...missing];\n }),\n [commit]\n );\n\n const clearAttachments = useCallback(() => {\n entriesRef.current.forEach(entry => {\n abortUpload(entry.id);\n releasePreview(entry);\n });\n commit(() => []);\n onErrorRef.current?.(null);\n }, [abortUpload, commit, releasePreview]);\n\n // Adopt a value we didn't produce — an edit form's initial attachments, or a parent-side reset.\n // Compared against what we emitted, not against the current entries: a failed-only or\n // mid-upload list emits `[]` too, and treating that as \"in sync\" would strand those tiles\n // on screen and let a late upload write itself back into freshly reset parent state.\n useEffect(() => {\n if (isSameList(emittedRef.current, value)) return;\n\n entriesRef.current.forEach(entry => {\n abortUpload(entry.id);\n if (entry.previewUrl) URL.revokeObjectURL(entry.previewUrl);\n });\n entriesRef.current = value.map(toStoredEntry);\n emittedRef.current = value;\n setEntries(entriesRef.current);\n onErrorRef.current?.(null);\n }, [value, abortUpload]);\n\n // A stored url has expired by now, so re-sign it for the preview.\n const [storedSrcs, setStoredSrcs] = useState<Record<string, string>>({});\n const storedSrcsRef = useRef(storedSrcs);\n storedSrcsRef.current = storedSrcs;\n\n const storedNames = entries\n // A linked image carries its own url, so there is no key of ours to sign.\n .filter(entry => !entry.file && !entry.previewUrl && entry.uploaded)\n .map(entry => (entry.uploaded as UploadedAttachment).name)\n .join('|');\n\n useEffect(() => {\n const pending = storedNames.split('|').filter(name => name && !(name in storedSrcsRef.current));\n if (!pending.length) return undefined;\n\n let isActive = true;\n Promise.all(\n pending.map(name =>\n getS3DownloadLink(name, 'inline')\n .then(({ url }: { url: string }) => [name, url] as const)\n .catch(error => {\n console.error(`Failed to sign stored attachment \"${name}\"`, error);\n\n return [name, ''] as const;\n })\n )\n ).then(resolved => {\n if (isActive) setStoredSrcs(prev => ({ ...prev, ...Object.fromEntries(resolved) }));\n });\n\n return () => {\n isActive = false;\n };\n }, [storedNames]);\n\n const items = entries.reduce<AttachmentPreviewItem[]>((acc, entry) => {\n if (entry.file) {\n acc.push({\n id: entry.id,\n name: entry.name,\n src: entry.previewUrl,\n kind: getFileKind(entry.file),\n size: entry.file.size,\n isUploading: entry.isUploading,\n error: entry.error ?? undefined,\n });\n return acc;\n }\n\n const stored = entry.uploaded as UploadedAttachment;\n const kind = getAttachmentKind(stored);\n // A linked image is already a url; only one of ours has an S3 key worth signing.\n const src = entry.previewUrl || storedSrcs[stored.name];\n // A thumbnail without its signed url would paint as a broken image, so hold it back.\n if (kind !== 'file' && !src) return acc;\n\n acc.push({ id: entry.id, name: stored.name, src, kind, size: stored.size });\n return acc;\n }, []);\n\n return {\n items,\n fileInputRef,\n openFileDialog,\n handleFileSelect,\n addFiles,\n addLinkedImage,\n removeAttachment,\n handleRetry,\n reorderAttachments,\n clearAttachments,\n isUploading: entries.some(entry => entry.isUploading),\n error: entries.find(entry => entry.error)?.error ?? null,\n count: entries.length,\n isFull: entries.length >= maxFiles,\n maxFiles,\n };\n};\n"],"names":["DEFAULT_MAX_ATTACHMENTS","getFileKind","file","type","startsWith","formatMb","bytes","toFixed","toStoredEntry","attachment","id","url","name","previewUrl","isUploading","error","uploaded","entrySeq","nextEntryId","concat","useAttachmentUpload","_ref","_entries$find$error","_entries$find","value","onChange","onError","maxSizeBytes","_ref$maxFiles","maxFiles","_ref$accept","accept","ACCEPTED_ATTACHMENT_TYPES","useState","_useState2","_slicedToArray","_useState","entries","setEntries","fileInputRef","useRef","uploadersRef","Map","sessionsRef","entriesRef","onChangeRef","onErrorRef","current","emittedRef","commit","useCallback","updater","next","map","entry","filter","Boolean","getUploaded","patchEntry","patch","prev","abortUpload","_uploadersRef$current","_sessionsRef$current$","get","delete","set","releasePreview","URL","revokeObjectURL","syncError","_onErrorRef$current","_entriesRef$current$f","_entriesRef$current$f2","find","useEffect","forEach","uploader","clear","startUpload","_sessionsRef$current$2","session","_onFinishS3Put","_getSignedUrl","isCurrent","fail","message","_onErrorRef$current2","storedKey","S3Upload","files","preprocess","target","onProgress","getSignedUrl","_asyncToGenerator","_regeneratorRuntime","mark","_callee","callback","_data","wrap","_context","getS3SignedUrl","data","sent","file_name","signedUrl","signed_url","t0","stop","_x","_x2","apply","this","arguments","onFinishS3Put","_callee2","_yield$getS3DownloadL","_context2","getS3DownloadLink","abrupt","size","addLinkedImage","_onErrorRef$current3","getUrlFileName","length","some","_entry$uploaded","_toConsumableArray","addFiles","_onErrorRef$current5","_ref2","_entriesRef$current$f3","_entriesRef$current$f4","supported","split","rule","trim","toLowerCase","endsWith","slice","getAttachmentKind","isAcceptedType","unsupported","tooMany","room","_onErrorRef$current4","accepted","added","kind","isTooLarge","createObjectURL","overflow","handleFileSelect","event","_event$target$files","Array","from","openFileDialog","_fileInputRef$current","click","removeAttachment","key","String","handleRetry","item","reorderAttachments","orderedIds","byId","reordered","missing","clearAttachments","_onErrorRef$current6","_onErrorRef$current7","a","b","every","index","_useState3","_useState4","storedSrcs","setStoredSrcs","storedSrcsRef","storedNames","join","pending","isActive","Promise","all","then","_ref3","catch","console","resolved","_objectSpread","Object","fromEntries","items","reduce","acc","_entry$error","push","src","undefined","stored","count","isFull"],"mappings":"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"}
|
|
@@ -26,6 +26,8 @@ export type CommentInputProps = {
|
|
|
26
26
|
onAttachmentReorder?: (orderedIds: AttachmentPreviewItem['id'][]) => void;
|
|
27
27
|
/** Enables dropping files from the desktop onto the composer. */
|
|
28
28
|
onFilesDrop?: (files: File[]) => void;
|
|
29
|
+
/** Given a pasted link that points at an image. */
|
|
30
|
+
onImageLinkPaste?: (url: string) => void;
|
|
29
31
|
dropLabel?: string;
|
|
30
32
|
/** Extra content in the attachment area, e.g. an upload-error banner. */
|
|
31
33
|
attachmentSlot?: ReactNode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommentInputNext.d.ts","sourceRoot":"","sources":["../../../src/components/CommentInputNext/CommentInputNext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAGL,SAAS,EAMV,MAAM,OAAO,CAAC;AAOf,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAC;
|
|
1
|
+
{"version":3,"file":"CommentInputNext.d.ts","sourceRoot":"","sources":["../../../src/components/CommentInputNext/CommentInputNext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAGL,SAAS,EAMV,MAAM,OAAO,CAAC;AAOf,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAC;AAOrF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,mEAAmE;IACnE,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,mFAAmF;IACnF,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,WAAW,CAAC,EAAE,qBAAqB,EAAE,CAAC;IACtC,kBAAkB,CAAC,EAAE,CAAC,EAAE,EAAE,qBAAqB,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IAC/D,iBAAiB,CAAC,EAAE,CAAC,EAAE,EAAE,qBAAqB,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IAC9D,uDAAuD;IACvD,mBAAmB,CAAC,EAAE,CAAC,UAAU,EAAE,qBAAqB,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC;IAC1E,iEAAiE;IACjE,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;IACtC,mDAAmD;IACnD,gBAAgB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAMF,eAAO,MAAM,YAAY,8GAyMxB,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import o from"@babel/runtime/helpers/defineProperty";import s from"@babel/runtime/helpers/slicedToArray";import{forwardRef as i,useState as
|
|
1
|
+
import o from"@babel/runtime/helpers/defineProperty";import s from"@babel/runtime/helpers/slicedToArray";import{forwardRef as i,useState as n,useRef as c,useCallback as t,useLayoutEffect as e}from"react";import r from"classnames";import{ButtonIcon as m}from"../../componentsV2/ButtonIcon/ButtonIcon.js";import{Tooltip as a}from"../../componentsV2/Tooltip/Tooltip.js";import{ArrowUpIcon as l}from"../../icons/iconParkIcons.js";import"../../icons/customIcons/icons/AddMessage.js";import"../../icons/customIcons/icons/DragOne.js";import"../../icons/customIcons/icons/Attention.js";import"../../icons/customIcons/icons/Collapse.js";import"../../icons/customIcons/icons/Dashboard.js";import"../../icons/customIcons/icons/Expand.js";import"../../icons/customIcons/icons/FolderClosed.js";import"../../icons/customIcons/icons/FolderClosedFilled.js";import"../../icons/customIcons/icons/FolderOpened.js";import"../../icons/customIcons/icons/GreaterOrEqual.js";import"../../icons/customIcons/icons/LessOrEqual.js";import"../../icons/customIcons/icons/Search.js";import"../../icons/customIcons/icons/SearchOne.js";import"../../icons/customIcons/icons/Wellhub.js";import"../../icons/customIcons/icons/MultiRuler.js";import"../../icons/customIcons/icons/Checkbox.js";import"../../icons/customIcons/icons/CheckboxChecked.js";import"../../icons/customIcons/icons/CheckboxIndeterminate.js";import"../../icons/customIcons/icons/Radio.js";import"../../icons/customIcons/icons/RadioChecked.js";import"../../icons/customIcons/icons/SimulFrac.js";import"../../icons/customIcons/icons/ZipperFrac.js";import"../../icons/customIcons/icons/CautionFilled.js";import"../../icons/customIcons/icons/MoreApp.js";import"../../icons/customIcons/icons/Pad.js";import"../../icons/customIcons/icons/DrilloutUnit.js";import"../../icons/customIcons/icons/FracFleet.js";import"../../icons/customIcons/icons/Global.js";import"../../icons/customIcons/icons/Program.js";import"../../icons/customIcons/icons/Rig.js";import"../../icons/customIcons/icons/Well.js";import"../../icons/customIcons/icons/Gap.js";import"../../icons/customIcons/icons/Pin.js";import"../../icons/customIcons/icons/CloseOneFilled.js";import"../../icons/customIcons/icons/AttentionFilled.js";import"../../icons/customIcons/icons/CheckOneFilled.js";import"../../icons/customIcons/icons/Archive.js";import"../../icons/customIcons/icons/ArchiveCancel.js";import"../../icons/customIcons/icons/Unarchive.js";import"../../icons/customIcons/icons/Archived.js";import"../../icons/customIcons/icons/InterventionUnit.js";import"../../icons/customIcons/icons/CloudDelete.js";import"../../icons/customIcons/icons/Lasso.js";import"../../icons/customIcons/icons/Radius.js";import"../../icons/customIcons/icons/ErrorOps.js";import"../../icons/customIcons/icons/DataTypeOps.js";import"../../icons/customIcons/icons/FalsePositiveOps.js";import"../../icons/customIcons/icons/CalibrationOps.js";import"../../icons/customIcons/icons/CriticalOps.js";import"../../icons/customIcons/icons/Company.js";import"../../icons/customIcons/icons/ArchiveOne.js";import"../../icons/customIcons/icons/ParseBotFusion.js";import"../../icons/customIcons/icons/Connect.js";import"../../icons/customIcons/icons/PuzzleOne.js";import"../../icons/customIcons/icons/Feed.js";import"../../icons/customIcons/icons/Prompt.js";import"../../icons/customIcons/icons/Companies.js";import"../../icons/customIcons/icons/ClipboardAi.js";import"../../icons/customIcons/icons/Key.js";import"../../icons/customIcons/icons/AtSignCrossed.js";import"../../icons/customIcons/icons/MappingManual.js";import"../../icons/customIcons/icons/Mapping.js";import"../../icons/customIcons/icons/Metrics.js";import"../../icons/customIcons/icons/Drops.js";import"../../icons/customIcons/icons/ClipboardSearch.js";import"../../icons/customIcons/icons/Template.js";import"../../icons/customIcons/icons/ClipboardMetrics.js";import"../../icons/customIcons/icons/ClipboardBuilder.js";import"../../icons/customIcons/icons/UnitConversion.js";import"../../icons/customIcons/icons/NPT.js";import"../../icons/customIcons/icons/GuidedFrac.js";import{AttachmentPreview as p}from"../AttachmentPreview/AttachmentPreview.js";import"../../componentsV2/FileIcon/FileIcon.js";import"@material-ui/core";import{jsxs as u,jsx as d,Fragment as j}from"react/jsx-runtime";import"../../componentsV2/Menu/Menu.js";import"@babel/runtime/helpers/asyncToGenerator";import"@babel/runtime/regenerator";import"../../clients/jsonApi/index.js";import"../../utils/main.js";import"../AttachmentPreview/AttachmentImage.js";import"../AttachmentPreview/AttachmentPreview.scss.js";import"file-extension";import"image-extensions";import"video-extensions";import{useFileDrop as I}from"./useFileDrop.js";import{useFilePaste as h}from"./useFilePaste.js";import v from"./CommentInputNext.scss.js";function f(o,s){var i=Object.keys(o);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(o);s&&(n=n.filter((function(s){return Object.getOwnPropertyDescriptor(o,s).enumerable}))),i.push.apply(i,n)}return i}function b(s){for(var i=1;i<arguments.length;i++){var n=null!=arguments[i]?arguments[i]:{};i%2?f(Object(n),!0).forEach((function(i){o(s,i,n[i])})):Object.getOwnPropertyDescriptors?Object.defineProperties(s,Object.getOwnPropertyDescriptors(n)):f(Object(n)).forEach((function(o){Object.defineProperty(s,o,Object.getOwnPropertyDescriptor(n,o))}))}return s}var g=i((function(o,i){var f=o.placeholder,g=void 0===f?"Add a comment":f,O=o.value,y=o.onChange,C=o.onSubmit,P=o.onCancel,F=o.disabled,A=o.autoFocus,N=o.minRows,w=void 0===N?1:N,D=o.maxRows,x=o.field,R=o.canSubmit,k=o.bare,M=o.leading,S=o.trailing,E=o.sendTooltip,T=void 0===E?"Send":E,B=o.attachments,G=o.onAttachmentRemove,L=o.onAttachmentRetry,H=o.onAttachmentReorder,U=o.onFilesDrop,V=o.onImageLinkPaste,z=o.dropLabel,K=void 0===z?"Drop files here":z,q=o.attachmentSlot,W=o.toolbar,Y=o.footer,Z=o.embedded,J=o.className,Q=o.testId,X=I(F?void 0:U),$=X.isDragging,_=X.dropHandlers,oo=h(F?{}:{onFiles:U,onImageLink:V}).pasteHandlers,so=$&&d("div",{className:v.dropOverlay,children:K}),io=void 0!==O,no=n(""),co=s(no,2),to=co[0],eo=co[1],ro=io?O:to,mo=null!=D?D:k?12:8,ao=c(null),lo=t((function(o){if(ao.current=o,o){var s=o;s.style.height="auto";var i=20*mo;s.style.height="".concat(Math.min(s.scrollHeight,i),"px"),s.style.overflowY=s.scrollHeight>i?"auto":"hidden"}}),[mo]);e((function(){x||lo(ao.current)}),[ro,x,lo]);var po=(null!=R?R:!!ro.trim())&&!F,uo=function(){po&&(null==C||C(ro.trim()),io||x||eo(""))},jo=null!=x?x:d("textarea",{ref:lo,className:v.input,rows:w,placeholder:g,value:ro,disabled:F,autoFocus:A,onChange:function(o){var s;s=o.target.value,io||eo(s),null==y||y(s),lo(o.target)},onKeyDown:function(o){if("Escape"===o.key&&P)return o.preventDefault(),void P();"Enter"!==o.key||o.shiftKey||(o.preventDefault(),uo())}}),Io=null!=S?S:d(a,{title:T,children:d("span",{className:v.send,children:d(m,{size:k?"xs":"small",type:"primary",disabled:!po,onClick:uo,testId:"comment-input-send",children:d(l,{})})})}),ho=((null==B?void 0:B.length)||q)&&u("div",{className:v.attachment,children:[null!=B&&B.length?d(p,{items:B,onRemove:G,onRetry:L,onReorder:H}):null,q]});return u("div",k?b(b(b({ref:i,"data-testid":Q,className:r(v.rootBare,J)},_),oo),{},{children:[so,u("div",{className:v.fieldRow,children:[M&&d("div",{className:v.leading,children:M}),u("div",{className:r(v.field,!!ho&&v.fieldExpanded,F&&v.fieldDisabled),children:[u("div",{className:v.fieldMain,children:[jo,ho]}),W&&d("div",{className:v.bareToolbar,children:W}),Io]})]})]}):b(b(b({ref:i,"data-testid":Q,className:r(v.root,Z&&v.rootEmbedded,J)},_),oo),{},{children:[so,u("div",{className:v.inputPanel,children:[jo,ho,u("div",{className:v.toolbarRow,children:[d("div",{className:v.toolbar,children:W}),Io]})]}),Y&&u(j,{children:[d("div",{className:v.divider}),d("div",{className:v.metaShare,children:Y})]})]}))}));export{g as CommentInput};
|
|
2
2
|
//# sourceMappingURL=CommentInputNext.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommentInputNext.js","sources":["../../../src/components/CommentInputNext/CommentInputNext.tsx"],"sourcesContent":["import {\n forwardRef,\n KeyboardEvent,\n ReactNode,\n useState,\n useCallback,\n useRef,\n useLayoutEffect,\n ChangeEvent,\n} from 'react';\nimport classNames from 'classnames';\n\nimport { ButtonIcon } from '../../componentsV2/ButtonIcon';\nimport { Tooltip } from '../../componentsV2/Tooltip';\nimport { ArrowUpIcon } from '../../icons';\nimport { AttachmentPreview } from '../AttachmentPreview';\nimport { AttachmentPreviewItem } from '../AttachmentPreview/AttachmentPreview.types';\n\nimport { useFileDrop } from './useFileDrop';\n\nimport styles from './CommentInputNext.scss';\n\nexport type CommentInputProps = {\n placeholder?: string;\n value?: string;\n onChange?: (value: string) => void;\n onSubmit?: (value: string) => void;\n onCancel?: () => void;\n disabled?: boolean;\n autoFocus?: boolean;\n minRows?: number;\n maxRows?: number;\n\n /** Editable control rendered in place of the built-in textarea. */\n field?: ReactNode;\n canSubmit?: boolean;\n /** Drop the outer surface so the field sits flush, for the in-card reply input. */\n bare?: boolean;\n\n leading?: ReactNode;\n /** Replaces the default send button. */\n trailing?: ReactNode;\n sendTooltip?: string;\n\n attachments?: AttachmentPreviewItem[];\n onAttachmentRemove?: (id: AttachmentPreviewItem['id']) => void;\n onAttachmentRetry?: (id: AttachmentPreviewItem['id']) => void;\n /** Enables drag-to-reorder on the attachment strip. */\n onAttachmentReorder?: (orderedIds: AttachmentPreviewItem['id'][]) => void;\n /** Enables dropping files from the desktop onto the composer. */\n onFilesDrop?: (files: File[]) => void;\n dropLabel?: string;\n /** Extra content in the attachment area, e.g. an upload-error banner. */\n attachmentSlot?: ReactNode;\n toolbar?: ReactNode;\n footer?: ReactNode;\n /** Render flush inside a host surface: no background, full-width divider. */\n embedded?: boolean;\n\n className?: string;\n testId?: string;\n};\n\nconst LINE_HEIGHT_PX = 20;\nconst DEFAULT_MAX_ROWS = 8;\nconst BARE_MAX_ROWS = 12;\n\nexport const CommentInput = forwardRef<HTMLDivElement, CommentInputProps>(\n (\n {\n placeholder = 'Add a comment',\n value,\n onChange,\n onSubmit,\n onCancel,\n disabled,\n autoFocus,\n minRows = 1,\n maxRows,\n field,\n canSubmit,\n bare,\n leading,\n trailing,\n sendTooltip = 'Send',\n attachments,\n onAttachmentRemove,\n onAttachmentRetry,\n onAttachmentReorder,\n onFilesDrop,\n dropLabel = 'Drop files here',\n attachmentSlot,\n toolbar,\n footer,\n embedded,\n className,\n testId,\n },\n ref\n ) => {\n const { isDragging, dropHandlers } = useFileDrop(disabled ? undefined : onFilesDrop);\n const dropOverlay = isDragging && <div className={styles.dropOverlay}>{dropLabel}</div>;\n\n const isControlled = value !== undefined;\n const [internalValue, setInternalValue] = useState('');\n const text = isControlled ? value : internalValue;\n\n // The bare reply field has no toolbar row, so text may fill the whole box.\n const rowsCap = maxRows ?? (bare ? BARE_MAX_ROWS : DEFAULT_MAX_ROWS);\n\n const textareaRef = useRef<HTMLTextAreaElement | null>(null);\n const resize = useCallback(\n (el: HTMLTextAreaElement | null) => {\n textareaRef.current = el;\n if (!el) return;\n const node = el;\n node.style.height = 'auto';\n const maxHeight = rowsCap * LINE_HEIGHT_PX;\n node.style.height = `${Math.min(node.scrollHeight, maxHeight)}px`;\n node.style.overflowY = node.scrollHeight > maxHeight ? 'auto' : 'hidden';\n },\n [rowsCap]\n );\n\n // The ref callback won't fire for a prop-driven value change.\n useLayoutEffect(() => {\n if (!field) resize(textareaRef.current);\n }, [text, field, resize]);\n\n const setText = (next: string) => {\n if (!isControlled) setInternalValue(next);\n onChange?.(next);\n };\n\n const handleChange = (event: ChangeEvent<HTMLTextAreaElement>) => {\n setText(event.target.value);\n resize(event.target);\n };\n\n const canSend = (canSubmit ?? !!text.trim()) && !disabled;\n\n const submit = () => {\n if (!canSend) return;\n onSubmit?.(text.trim());\n if (!isControlled && !field) setInternalValue('');\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLTextAreaElement>) => {\n if (event.key === 'Escape' && onCancel) {\n event.preventDefault();\n onCancel();\n return;\n }\n\n if (event.key === 'Enter' && !event.shiftKey) {\n event.preventDefault();\n submit();\n }\n };\n\n const editor = field ?? (\n <textarea\n ref={resize}\n className={styles.input}\n rows={minRows}\n placeholder={placeholder}\n value={text}\n disabled={disabled}\n // eslint-disable-next-line jsx-a11y/no-autofocus\n autoFocus={autoFocus}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n />\n );\n\n const sendButton = trailing ?? (\n // A disabled button fires no events, so the tooltip needs its own target.\n <Tooltip title={sendTooltip}>\n <span className={styles.send}>\n <ButtonIcon\n size={bare ? 'xs' : 'small'}\n type=\"primary\"\n disabled={!canSend}\n onClick={submit}\n testId=\"comment-input-send\"\n >\n <ArrowUpIcon />\n </ButtonIcon>\n </span>\n </Tooltip>\n );\n\n const attachmentArea = (attachments?.length || attachmentSlot) && (\n <div className={styles.attachment}>\n {attachments?.length ? (\n <AttachmentPreview\n items={attachments}\n onRemove={onAttachmentRemove}\n onRetry={onAttachmentRetry}\n onReorder={onAttachmentReorder}\n />\n ) : null}\n {attachmentSlot}\n </div>\n );\n\n if (bare) {\n return (\n <div\n ref={ref}\n data-testid={testId}\n className={classNames(styles.rootBare, className)}\n {...dropHandlers}\n >\n {dropOverlay}\n <div className={styles.fieldRow}>\n {leading && <div className={styles.leading}>{leading}</div>}\n <div\n className={classNames(\n styles.field,\n !!attachmentArea && styles.fieldExpanded,\n disabled && styles.fieldDisabled\n )}\n >\n <div className={styles.fieldMain}>\n {editor}\n {attachmentArea}\n </div>\n {toolbar && <div className={styles.bareToolbar}>{toolbar}</div>}\n {sendButton}\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n data-testid={testId}\n className={classNames(styles.root, embedded && styles.rootEmbedded, className)}\n {...dropHandlers}\n >\n {dropOverlay}\n <div className={styles.inputPanel}>\n {editor}\n {attachmentArea}\n <div className={styles.toolbarRow}>\n <div className={styles.toolbar}>{toolbar}</div>\n {sendButton}\n </div>\n </div>\n\n {footer && (\n <>\n <div className={styles.divider} />\n <div className={styles.metaShare}>{footer}</div>\n </>\n )}\n </div>\n );\n }\n);\n"],"names":["CommentInput","forwardRef","_ref","ref","_ref$placeholder","placeholder","value","onChange","onSubmit","onCancel","disabled","autoFocus","_ref$minRows","minRows","maxRows","field","canSubmit","bare","leading","trailing","_ref$sendTooltip","sendTooltip","attachments","onAttachmentRemove","onAttachmentRetry","onAttachmentReorder","onFilesDrop","_ref$dropLabel","dropLabel","attachmentSlot","toolbar","footer","embedded","className","testId","_useFileDrop","useFileDrop","undefined","isDragging","dropHandlers","dropOverlay","_jsx","styles","children","isControlled","useState","_useState2","_slicedToArray","_useState","internalValue","setInternalValue","text","rowsCap","textareaRef","useRef","resize","useCallback","el","current","node","style","height","maxHeight","Math","min","scrollHeight","overflowY","useLayoutEffect","canSend","trim","submit","editor","input","rows","event","next","target","onKeyDown","key","preventDefault","shiftKey","sendButton","Tooltip","title","send","ButtonIcon","size","type","onClick","ArrowUpIcon","attachmentArea","length","_jsxs","attachment","AttachmentPreview","items","onRemove","onRetry","onReorder","_objectSpread","classNames","rootBare","fieldRow","fieldExpanded","fieldDisabled","fieldMain","bareToolbar","root","rootEmbedded","inputPanel","toolbarRow","_Fragment","divider","metaShare"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CommentInputNext.js","sources":["../../../src/components/CommentInputNext/CommentInputNext.tsx"],"sourcesContent":["import {\n forwardRef,\n KeyboardEvent,\n ReactNode,\n useState,\n useCallback,\n useRef,\n useLayoutEffect,\n ChangeEvent,\n} from 'react';\nimport classNames from 'classnames';\n\nimport { ButtonIcon } from '../../componentsV2/ButtonIcon';\nimport { Tooltip } from '../../componentsV2/Tooltip';\nimport { ArrowUpIcon } from '../../icons';\nimport { AttachmentPreview } from '../AttachmentPreview';\nimport { AttachmentPreviewItem } from '../AttachmentPreview/AttachmentPreview.types';\n\nimport { useFileDrop } from './useFileDrop';\nimport { useFilePaste } from './useFilePaste';\n\nimport styles from './CommentInputNext.scss';\n\nexport type CommentInputProps = {\n placeholder?: string;\n value?: string;\n onChange?: (value: string) => void;\n onSubmit?: (value: string) => void;\n onCancel?: () => void;\n disabled?: boolean;\n autoFocus?: boolean;\n minRows?: number;\n maxRows?: number;\n\n /** Editable control rendered in place of the built-in textarea. */\n field?: ReactNode;\n canSubmit?: boolean;\n /** Drop the outer surface so the field sits flush, for the in-card reply input. */\n bare?: boolean;\n\n leading?: ReactNode;\n /** Replaces the default send button. */\n trailing?: ReactNode;\n sendTooltip?: string;\n\n attachments?: AttachmentPreviewItem[];\n onAttachmentRemove?: (id: AttachmentPreviewItem['id']) => void;\n onAttachmentRetry?: (id: AttachmentPreviewItem['id']) => void;\n /** Enables drag-to-reorder on the attachment strip. */\n onAttachmentReorder?: (orderedIds: AttachmentPreviewItem['id'][]) => void;\n /** Enables dropping files from the desktop onto the composer. */\n onFilesDrop?: (files: File[]) => void;\n /** Given a pasted link that points at an image. */\n onImageLinkPaste?: (url: string) => void;\n dropLabel?: string;\n /** Extra content in the attachment area, e.g. an upload-error banner. */\n attachmentSlot?: ReactNode;\n toolbar?: ReactNode;\n footer?: ReactNode;\n /** Render flush inside a host surface: no background, full-width divider. */\n embedded?: boolean;\n\n className?: string;\n testId?: string;\n};\n\nconst LINE_HEIGHT_PX = 20;\nconst DEFAULT_MAX_ROWS = 8;\nconst BARE_MAX_ROWS = 12;\n\nexport const CommentInput = forwardRef<HTMLDivElement, CommentInputProps>(\n (\n {\n placeholder = 'Add a comment',\n value,\n onChange,\n onSubmit,\n onCancel,\n disabled,\n autoFocus,\n minRows = 1,\n maxRows,\n field,\n canSubmit,\n bare,\n leading,\n trailing,\n sendTooltip = 'Send',\n attachments,\n onAttachmentRemove,\n onAttachmentRetry,\n onAttachmentReorder,\n onFilesDrop,\n onImageLinkPaste,\n dropLabel = 'Drop files here',\n attachmentSlot,\n toolbar,\n footer,\n embedded,\n className,\n testId,\n },\n ref\n ) => {\n const { isDragging, dropHandlers } = useFileDrop(disabled ? undefined : onFilesDrop);\n const { pasteHandlers } = useFilePaste(\n disabled ? {} : { onFiles: onFilesDrop, onImageLink: onImageLinkPaste }\n );\n const dropOverlay = isDragging && <div className={styles.dropOverlay}>{dropLabel}</div>;\n\n const isControlled = value !== undefined;\n const [internalValue, setInternalValue] = useState('');\n const text = isControlled ? value : internalValue;\n\n // The bare reply field has no toolbar row, so text may fill the whole box.\n const rowsCap = maxRows ?? (bare ? BARE_MAX_ROWS : DEFAULT_MAX_ROWS);\n\n const textareaRef = useRef<HTMLTextAreaElement | null>(null);\n const resize = useCallback(\n (el: HTMLTextAreaElement | null) => {\n textareaRef.current = el;\n if (!el) return;\n const node = el;\n node.style.height = 'auto';\n const maxHeight = rowsCap * LINE_HEIGHT_PX;\n node.style.height = `${Math.min(node.scrollHeight, maxHeight)}px`;\n node.style.overflowY = node.scrollHeight > maxHeight ? 'auto' : 'hidden';\n },\n [rowsCap]\n );\n\n // The ref callback won't fire for a prop-driven value change.\n useLayoutEffect(() => {\n if (!field) resize(textareaRef.current);\n }, [text, field, resize]);\n\n const setText = (next: string) => {\n if (!isControlled) setInternalValue(next);\n onChange?.(next);\n };\n\n const handleChange = (event: ChangeEvent<HTMLTextAreaElement>) => {\n setText(event.target.value);\n resize(event.target);\n };\n\n const canSend = (canSubmit ?? !!text.trim()) && !disabled;\n\n const submit = () => {\n if (!canSend) return;\n onSubmit?.(text.trim());\n if (!isControlled && !field) setInternalValue('');\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLTextAreaElement>) => {\n if (event.key === 'Escape' && onCancel) {\n event.preventDefault();\n onCancel();\n return;\n }\n\n if (event.key === 'Enter' && !event.shiftKey) {\n event.preventDefault();\n submit();\n }\n };\n\n const editor = field ?? (\n <textarea\n ref={resize}\n className={styles.input}\n rows={minRows}\n placeholder={placeholder}\n value={text}\n disabled={disabled}\n // eslint-disable-next-line jsx-a11y/no-autofocus\n autoFocus={autoFocus}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n />\n );\n\n const sendButton = trailing ?? (\n // A disabled button fires no events, so the tooltip needs its own target.\n <Tooltip title={sendTooltip}>\n <span className={styles.send}>\n <ButtonIcon\n size={bare ? 'xs' : 'small'}\n type=\"primary\"\n disabled={!canSend}\n onClick={submit}\n testId=\"comment-input-send\"\n >\n <ArrowUpIcon />\n </ButtonIcon>\n </span>\n </Tooltip>\n );\n\n const attachmentArea = (attachments?.length || attachmentSlot) && (\n <div className={styles.attachment}>\n {attachments?.length ? (\n <AttachmentPreview\n items={attachments}\n onRemove={onAttachmentRemove}\n onRetry={onAttachmentRetry}\n onReorder={onAttachmentReorder}\n />\n ) : null}\n {attachmentSlot}\n </div>\n );\n\n if (bare) {\n return (\n <div\n ref={ref}\n data-testid={testId}\n className={classNames(styles.rootBare, className)}\n {...dropHandlers}\n {...pasteHandlers}\n >\n {dropOverlay}\n <div className={styles.fieldRow}>\n {leading && <div className={styles.leading}>{leading}</div>}\n <div\n className={classNames(\n styles.field,\n !!attachmentArea && styles.fieldExpanded,\n disabled && styles.fieldDisabled\n )}\n >\n <div className={styles.fieldMain}>\n {editor}\n {attachmentArea}\n </div>\n {toolbar && <div className={styles.bareToolbar}>{toolbar}</div>}\n {sendButton}\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n data-testid={testId}\n className={classNames(styles.root, embedded && styles.rootEmbedded, className)}\n {...dropHandlers}\n {...pasteHandlers}\n >\n {dropOverlay}\n <div className={styles.inputPanel}>\n {editor}\n {attachmentArea}\n <div className={styles.toolbarRow}>\n <div className={styles.toolbar}>{toolbar}</div>\n {sendButton}\n </div>\n </div>\n\n {footer && (\n <>\n <div className={styles.divider} />\n <div className={styles.metaShare}>{footer}</div>\n </>\n )}\n </div>\n );\n }\n);\n"],"names":["CommentInput","forwardRef","_ref","ref","_ref$placeholder","placeholder","value","onChange","onSubmit","onCancel","disabled","autoFocus","_ref$minRows","minRows","maxRows","field","canSubmit","bare","leading","trailing","_ref$sendTooltip","sendTooltip","attachments","onAttachmentRemove","onAttachmentRetry","onAttachmentReorder","onFilesDrop","onImageLinkPaste","_ref$dropLabel","dropLabel","attachmentSlot","toolbar","footer","embedded","className","testId","_useFileDrop","useFileDrop","undefined","isDragging","dropHandlers","pasteHandlers","useFilePaste","onFiles","onImageLink","dropOverlay","_jsx","styles","children","isControlled","useState","_useState2","_slicedToArray","_useState","internalValue","setInternalValue","text","rowsCap","textareaRef","useRef","resize","useCallback","el","current","node","style","height","maxHeight","Math","min","scrollHeight","overflowY","useLayoutEffect","canSend","trim","submit","editor","input","rows","event","next","target","onKeyDown","key","preventDefault","shiftKey","sendButton","Tooltip","title","send","ButtonIcon","size","type","onClick","ArrowUpIcon","attachmentArea","length","_jsxs","attachment","AttachmentPreview","items","onRemove","onRetry","onReorder","_objectSpread","classNames","rootBare","fieldRow","fieldExpanded","fieldDisabled","fieldMain","bareToolbar","root","rootEmbedded","inputPanel","toolbarRow","_Fragment","divider","metaShare"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFilePaste.test.d.ts","sourceRoot":"","sources":["../../../../src/components/CommentInputNext/__tests__/useFilePaste.test.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ClipboardEvent } from 'react';
|
|
2
|
+
type PasteHandlers = {
|
|
3
|
+
onPaste: (event: ClipboardEvent) => void;
|
|
4
|
+
};
|
|
5
|
+
type UseFilePasteOptions = {
|
|
6
|
+
onFiles?: (files: File[]) => void;
|
|
7
|
+
/** Given a pasted link that points at an image. The link still lands in the text. */
|
|
8
|
+
onImageLink?: (url: string) => void;
|
|
9
|
+
};
|
|
10
|
+
/** A pasted screenshot has no name of its own, so the kind comes off the clipboard item. */
|
|
11
|
+
export declare const getPastedFiles: (clipboardData: DataTransfer | null) => File[];
|
|
12
|
+
/** Returns no handler when there is nothing to hand a paste to, so it never intercepts one. */
|
|
13
|
+
export declare const useFilePaste: ({ onFiles, onImageLink }: UseFilePasteOptions) => {
|
|
14
|
+
pasteHandlers: PasteHandlers | undefined;
|
|
15
|
+
};
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=useFilePaste.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFilePaste.d.ts","sourceRoot":"","sources":["../../../src/components/CommentInputNext/useFilePaste.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAwB,MAAM,OAAO,CAAC;AAI7D,KAAK,aAAa,GAAG;IACnB,OAAO,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;CAC1C,CAAC;AAEF,KAAK,mBAAmB,GAAG;IACzB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;IAClC,qFAAqF;IACrF,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC,CAAC;AAEF,4FAA4F;AAC5F,eAAO,MAAM,cAAc,kBAAmB,YAAY,GAAG,IAAI,KAAG,IAAI,EAI7B,CAAC;AAE5C,+FAA+F;AAC/F,eAAO,MAAM,YAAY,6BAA8B,mBAAmB;;CA0BzE,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{useCallback as n,useMemo as r}from"react";import{readPastedLink as t,getIsImageUrl as i}from"../../utils/links.js";var e=function(n){var r;return Array.from(null!==(r=null==n?void 0:n.items)&&void 0!==r?r:[]).filter((function(n){return"file"===n.kind})).map((function(n){return n.getAsFile()})).filter((function(n){return!!n}))},l=function(l){var o=l.onFiles,a=l.onImageLink,u=n((function(n){var r,l,u=e(n.clipboardData);if(u.length)return n.preventDefault(),void(null==o||o(u));var f=t(null!==(r=null===(l=n.clipboardData)||void 0===l?void 0:l.getData("text/plain"))&&void 0!==r?r:"");f&&i(f)&&(null==a||a(f))}),[o,a]);return{pasteHandlers:r((function(){return o||a?{onPaste:u}:void 0}),[o,a,u])}};export{e as getPastedFiles,l as useFilePaste};
|
|
2
|
+
//# sourceMappingURL=useFilePaste.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFilePaste.js","sources":["../../../src/components/CommentInputNext/useFilePaste.ts"],"sourcesContent":["import { ClipboardEvent, useCallback, useMemo } from 'react';\n\nimport { getIsImageUrl, readPastedLink } from '~/utils/links';\n\ntype PasteHandlers = {\n onPaste: (event: ClipboardEvent) => void;\n};\n\ntype UseFilePasteOptions = {\n onFiles?: (files: File[]) => void;\n /** Given a pasted link that points at an image. The link still lands in the text. */\n onImageLink?: (url: string) => void;\n};\n\n/** A pasted screenshot has no name of its own, so the kind comes off the clipboard item. */\nexport const getPastedFiles = (clipboardData: DataTransfer | null): File[] =>\n Array.from(clipboardData?.items ?? [])\n .filter(item => item.kind === 'file')\n .map(item => item.getAsFile())\n .filter((file): file is File => !!file);\n\n/** Returns no handler when there is nothing to hand a paste to, so it never intercepts one. */\nexport const useFilePaste = ({ onFiles, onImageLink }: UseFilePasteOptions) => {\n const onPaste = useCallback(\n (event: ClipboardEvent) => {\n const files = getPastedFiles(event.clipboardData);\n\n if (files.length) {\n // Text pasted alongside is the source app's markup for the file, not a message.\n event.preventDefault();\n onFiles?.(files);\n\n return;\n }\n\n const url = readPastedLink(event.clipboardData?.getData('text/plain') ?? '');\n\n if (url && getIsImageUrl(url)) onImageLink?.(url);\n },\n [onFiles, onImageLink]\n );\n\n const pasteHandlers: PasteHandlers | undefined = useMemo(\n () => (onFiles || onImageLink ? { onPaste } : undefined),\n [onFiles, onImageLink, onPaste]\n );\n\n return { pasteHandlers };\n};\n"],"names":["getPastedFiles","clipboardData","_clipboardData$items","Array","from","items","filter","item","kind","map","getAsFile","file","useFilePaste","_ref","onFiles","onImageLink","onPaste","useCallback","event","_event$clipboardData$","_event$clipboardData","files","length","preventDefault","url","readPastedLink","getData","getIsImageUrl","pasteHandlers","useMemo","undefined"],"mappings":"8HAeaA,EAAiB,SAACC,GAAkC,IAAAC,EAAA,OAC/DC,MAAMC,eAAKH,aAAAA,EAAAA,EAAeI,qBAAS,IAChCC,QAAO,SAAAC,GAAI,MAAkB,SAAdA,EAAKC,IAAe,IACnCC,KAAI,SAAAF,GAAI,OAAIA,EAAKG,WAAW,IAC5BJ,QAAO,SAACK,GAAI,QAAqBA,IAAK,EAG9BC,EAAe,SAAmDC,GAAA,IAAhDC,IAAAA,QAASC,IAAAA,YAChCC,EAAUC,GACd,SAACC,GAA0B,IAAAC,EAAAC,EACnBC,EAAQrB,EAAekB,EAAMjB,eAEnC,GAAIoB,EAAMC,OAKR,OAHAJ,EAAMK,sBACNT,SAAAA,EAAUO,IAKZ,IAAMG,EAAMC,EAAyD,QAA3CN,EAAC,QAADC,EAACF,EAAMjB,qBAAN,IAAAmB,OAAA,EAAAA,EAAqBM,QAAQ,qBAAa,IAAAP,EAAAA,EAAI,IAErEK,GAAOG,EAAcH,KAAMT,SAAAA,EAAcS,GAC/C,GACA,CAACV,EAASC,IAQZ,MAAO,CAAEa,cALwCC,GAC/C,WAAA,OAAOf,GAAWC,EAAc,CAAEC,QAAAA,QAAYc,CAAU,GACxD,CAAChB,EAASC,EAAaC,IAI3B"}
|
|
@@ -2,7 +2,7 @@ import PropTypes from 'prop-types';
|
|
|
2
2
|
declare function AppsDataProvider({ children, dashboardAssetId, apps, dashboardMeta }: {
|
|
3
3
|
apps: any;
|
|
4
4
|
children: any;
|
|
5
|
-
dashboardAssetId
|
|
5
|
+
dashboardAssetId: any;
|
|
6
6
|
dashboardMeta: any;
|
|
7
7
|
}): import("react").JSX.Element;
|
|
8
8
|
declare namespace AppsDataProvider {
|
|
@@ -14,6 +14,10 @@ declare namespace AppsDataProvider {
|
|
|
14
14
|
isChiplessDashboard: PropTypes.Requireable<boolean>;
|
|
15
15
|
}>>;
|
|
16
16
|
};
|
|
17
|
+
var defaultProps: {
|
|
18
|
+
dashboardAssetId: null;
|
|
19
|
+
dashboardMeta: undefined;
|
|
20
|
+
};
|
|
17
21
|
}
|
|
18
22
|
export default AppsDataProvider;
|
|
19
23
|
//# sourceMappingURL=AppsDataProvider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppsDataProvider.d.ts","sourceRoot":"","sources":["../../../../src/components/DevCenter/AppsDataProvider/AppsDataProvider.js"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,YAAY,CAAC;AAMnC,iBAAS,gBAAgB,CAAC,EAAE,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"AppsDataProvider.d.ts","sourceRoot":"","sources":["../../../../src/components/DevCenter/AppsDataProvider/AppsDataProvider.js"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,YAAY,CAAC;AAMnC,iBAAS,gBAAgB,CAAC,EAAE,QAAQ,EAAE,gBAAgB,EAAE,IAAI,EAAE,aAAa,EAAE;;;;;CAAA,+BAI5E;kBAJQ,gBAAgB;;;;;;;;;;;;;;eAoBV,gBAAgB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import
|
|
1
|
+
import s from"prop-types";import a from"../AppContext.js";import r from"./effects/useAppsData.js";import{jsx as e}from"react/jsx-runtime";function d(s){var d=s.children,o=s.dashboardAssetId,p=s.apps,t=s.dashboardMeta,i=r({apps:p,dashboardAssetId:o,dashboardMeta:t});return e(a.Provider,{value:i,children:d})}d.propTypes={children:s.node.isRequired,dashboardAssetId:s.string,apps:s.arrayOf(s.shape({})).isRequired,dashboardMeta:s.shape({isChiplessDashboard:s.bool})},d.defaultProps={dashboardAssetId:null,dashboardMeta:void 0};export{d as default};
|
|
2
2
|
//# sourceMappingURL=AppsDataProvider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppsDataProvider.js","sources":["../../../../src/components/DevCenter/AppsDataProvider/AppsDataProvider.js"],"sourcesContent":["import PropTypes from 'prop-types';\n\nimport AppContext from '../AppContext';\n\nimport { useAppsData } from './effects';\n\nfunction AppsDataProvider({ children, dashboardAssetId
|
|
1
|
+
{"version":3,"file":"AppsDataProvider.js","sources":["../../../../src/components/DevCenter/AppsDataProvider/AppsDataProvider.js"],"sourcesContent":["import PropTypes from 'prop-types';\n\nimport AppContext from '../AppContext';\n\nimport { useAppsData } from './effects';\n\nfunction AppsDataProvider({ children, dashboardAssetId, apps, dashboardMeta }) {\n const appsData = useAppsData({ apps, dashboardAssetId, dashboardMeta });\n\n return <AppContext.Provider value={appsData}>{children}</AppContext.Provider>;\n}\n\nAppsDataProvider.propTypes = {\n children: PropTypes.node.isRequired,\n dashboardAssetId: PropTypes.string,\n apps: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\n dashboardMeta: PropTypes.shape({\n isChiplessDashboard: PropTypes.bool,\n }),\n};\n\nAppsDataProvider.defaultProps = {\n dashboardAssetId: null,\n dashboardMeta: undefined,\n};\n\nexport default AppsDataProvider;\n"],"names":["AppsDataProvider","_ref","children","dashboardAssetId","apps","dashboardMeta","appsData","useAppsData","_jsx","AppContext","Provider","value","propTypes","PropTypes","node","isRequired","string","arrayOf","shape","isChiplessDashboard","bool","defaultProps","undefined"],"mappings":"0IAMA,SAASA,EAAsEC,GAAA,IAAnDC,IAAAA,SAAUC,IAAAA,iBAAkBC,IAAAA,KAAMC,IAAAA,cACtDC,EAAWC,EAAY,CAAEH,KAAAA,EAAMD,iBAAAA,EAAkBE,cAAAA,IAEvD,OAAOG,EAACC,EAAWC,SAAQ,CAACC,MAAOL,EAASJ,SAAEA,GAChD,CAEAF,EAAiBY,UAAY,CAC3BV,SAAUW,EAAUC,KAAKC,WACzBZ,iBAAkBU,EAAUG,OAC5BZ,KAAMS,EAAUI,QAAQJ,EAAUK,MAAM,CAAA,IAAKH,WAC7CV,cAAeQ,EAAUK,MAAM,CAC7BC,oBAAqBN,EAAUO,QAInCpB,EAAiBqB,aAAe,CAC9BlB,iBAAkB,KAClBE,mBAAeiB"}
|
|
@@ -1,18 +1,23 @@
|
|
|
1
|
-
declare function DevCenterAppContainer({ CLIAppComponent, CLIAppSettings, app, appId, className, coordinates, currentDashboardAppsLastAnnotations, currentUser, devCenterRouter, disableAppAssetSelection, isActionsDisabled, isNonIsolatedApp, isSettingsDialogHidden, layoutEnvironment, onAppContainerClick, onAppRemove, onReportBugClick, onCloneDashboard, onHelpCenterClick, onIsMaximizedChange, onSettingChange, onSettingsChange, openIntercom, setIsFullscreenModalMode, timestamp, updateCurrentDashboardAppLastAnnotation, dashboardMeta, reloadApp, chatActions, }: {
|
|
1
|
+
declare function DevCenterAppContainer({ CLIAppComponent, CLIAppSettings, app, appId, className, coordinates, currentDashboardAppsLastAnnotations, currentUser, devCenterRouter, disableAppAssetSelection, isActionsDisabled, isBrowserFullscreen, enterBrowserFullscreen, exitBrowserFullscreen, isSeparateWindow, openSeparateWindow, closeSeparateWindow, setSeparateWindowTitle, isNonIsolatedApp, isSettingsDialogHidden, layoutEnvironment, onAppContainerClick, onAppRemove, onReportBugClick, onCloneDashboard, onHelpCenterClick, onIsMaximizedChange, onSettingChange, onSettingsChange, openIntercom, registerAITools, setIsFullscreenModalMode, timestamp, updateCurrentDashboardAppLastAnnotation, dashboardMeta, reloadApp, chatActions, }: {
|
|
2
2
|
CLIAppComponent: any;
|
|
3
3
|
CLIAppSettings: any;
|
|
4
4
|
app: any;
|
|
5
5
|
appId: any;
|
|
6
6
|
chatActions: any;
|
|
7
7
|
className: any;
|
|
8
|
+
closeSeparateWindow: any;
|
|
8
9
|
coordinates: any;
|
|
9
10
|
currentDashboardAppsLastAnnotations: any;
|
|
10
11
|
currentUser: any;
|
|
11
12
|
dashboardMeta: any;
|
|
12
13
|
devCenterRouter: any;
|
|
13
14
|
disableAppAssetSelection: any;
|
|
15
|
+
enterBrowserFullscreen: any;
|
|
16
|
+
exitBrowserFullscreen: any;
|
|
14
17
|
isActionsDisabled: any;
|
|
18
|
+
isBrowserFullscreen: any;
|
|
15
19
|
isNonIsolatedApp?: boolean | undefined;
|
|
20
|
+
isSeparateWindow: any;
|
|
16
21
|
isSettingsDialogHidden: any;
|
|
17
22
|
layoutEnvironment: any;
|
|
18
23
|
onAppContainerClick?: ((...args: any[]) => void) | undefined;
|
|
@@ -24,8 +29,11 @@ declare function DevCenterAppContainer({ CLIAppComponent, CLIAppSettings, app, a
|
|
|
24
29
|
onSettingChange: any;
|
|
25
30
|
onSettingsChange: any;
|
|
26
31
|
openIntercom?: ((...args: any[]) => void) | undefined;
|
|
32
|
+
openSeparateWindow: any;
|
|
33
|
+
registerAITools: any;
|
|
27
34
|
reloadApp?: undefined;
|
|
28
35
|
setIsFullscreenModalMode?: ((...args: any[]) => void) | undefined;
|
|
36
|
+
setSeparateWindowTitle: any;
|
|
29
37
|
timestamp: any;
|
|
30
38
|
updateCurrentDashboardAppLastAnnotation: any;
|
|
31
39
|
}): import("react").JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DevCenterAppContainer.d.ts","sourceRoot":"","sources":["../../../../src/components/DevCenter/DevCenterAppContainer/DevCenterAppContainer.js"],"names":[],"mappings":"AAgDA,iBAAS,qBAAqB,CAAC,EAC7B,eAAe,EACf,cAAc,EACd,GAAG,EACH,KAAK,EACL,SAAS,EACT,WAAW,EACX,mCAAmC,EACnC,WAAW,EACX,eAAe,EACf,wBAAwB,EACxB,iBAAiB,
|
|
1
|
+
{"version":3,"file":"DevCenterAppContainer.d.ts","sourceRoot":"","sources":["../../../../src/components/DevCenter/DevCenterAppContainer/DevCenterAppContainer.js"],"names":[],"mappings":"AAgDA,iBAAS,qBAAqB,CAAC,EAC7B,eAAe,EACf,cAAc,EACd,GAAG,EACH,KAAK,EACL,SAAS,EACT,WAAW,EACX,mCAAmC,EACnC,WAAW,EACX,eAAe,EACf,wBAAwB,EACxB,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,EAGtB,gBAAwB,EACxB,sBAAsB,EACtB,iBAAiB,EACjB,mBAA0B,EAC1B,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,YAAmB,EACnB,eAAe,EACf,wBAA+B,EAC/B,SAAS,EACT,uCAAuC,EACvC,aAAa,EACb,SAAqB,EACrB,WAAW,GACZ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAA,+BAuSA;eAEc,qBAAqB"}
|