@box/metadata-editor 2.10.12 → 2.11.0

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.
Files changed (49) hide show
  1. package/README.md +4 -2
  2. package/dist/chunks/ai-suggestion-field.js +1 -1
  3. package/dist/chunks/cascade-policy-editor.js +1 -0
  4. package/dist/chunks/metadata-instance-form-card-wrapper.js +1 -1
  5. package/dist/chunks/metadata-instance-form-footer.js +1 -1
  6. package/dist/chunks/metadata-instance-header.js +1 -1
  7. package/dist/chunks/metadata-instance-list.js +1 -1
  8. package/dist/chunks/metadata-instance.js +1 -1
  9. package/dist/chunks/types.js +1 -1
  10. package/dist/chunks/update-mode-field-wrapper.js +1 -1
  11. package/dist/esm/index.js +1 -1
  12. package/dist/esm/lib/components/metadata-instance-editor/index.js +1 -1
  13. package/dist/esm/lib/components/metadata-instance-editor/subcomponents/cascade-policy-editor/cascade-policy-editor.js +1 -0
  14. package/dist/esm/lib/components/metadata-instance-editor/subcomponents/cascade-policy-editor/messages.js +1 -0
  15. package/dist/esm/lib/components/metadata-instance-editor/subcomponents/custom-extract-agent-notice/custom-extract-agent-notice.js +1 -0
  16. package/dist/esm/lib/components/metadata-instance-editor/subcomponents/custom-extract-agent-notice/messages.js +1 -0
  17. package/dist/esm/lib/components/metadata-instance-editor/subcomponents/metadata-instance-form/metadata-instance-form.js +1 -1
  18. package/dist/esm/lib/components/metadata-instance-list/index.js +1 -1
  19. package/dist/esm/lib/components/metadata-instance-list/subcomponents/metadata-instance-cascade-notice/messages.js +1 -0
  20. package/dist/esm/lib/components/metadata-instance-list/subcomponents/metadata-instance-cascade-notice/metadata-instance-cascade-notice.js +1 -0
  21. package/dist/esm/lib/mappers.js +1 -1
  22. package/dist/esm/lib/utils/cascade-policy.js +1 -0
  23. package/dist/esm/lib/utils/confidence-score/get-confidence-score-tooltip.js +1 -1
  24. package/dist/esm/lib/utils/confidence-score/is-confidence-score-needing-review.js +1 -1
  25. package/dist/styles/cascade-policy-editor.css +1 -0
  26. package/dist/styles/metadata-instance-header.css +1 -1
  27. package/dist/styles/metadata-instance.css +1 -1
  28. package/dist/types/index.d.ts +1 -0
  29. package/dist/types/lib/components/metadata-instance-editor/index.d.ts +3 -0
  30. package/dist/types/lib/components/metadata-instance-editor/subcomponents/cascade-policy-editor/cascade-policy-editor.d.ts +15 -0
  31. package/dist/types/lib/components/metadata-instance-editor/subcomponents/cascade-policy-editor/messages.d.ts +63 -0
  32. package/dist/types/lib/components/metadata-instance-editor/subcomponents/cascade-policy-editor/types.d.ts +26 -0
  33. package/dist/types/lib/components/metadata-instance-editor/subcomponents/custom-extract-agent-notice/custom-extract-agent-notice.d.ts +12 -0
  34. package/dist/types/lib/components/metadata-instance-editor/subcomponents/custom-extract-agent-notice/messages.d.ts +18 -0
  35. package/dist/types/lib/components/metadata-instance-editor/subcomponents/metadata-instance-form/types.d.ts +33 -3
  36. package/dist/types/lib/components/metadata-instance-editor/subcomponents/metadata-instance-form-footer/metadata-instance-form-footer.d.ts +1 -1
  37. package/dist/types/lib/components/metadata-instance-editor/subcomponents/metadata-instance-form-footer/types.d.ts +2 -0
  38. package/dist/types/lib/components/metadata-instance-list/index.d.ts +1 -0
  39. package/dist/types/lib/components/metadata-instance-list/metadata-instance-list.d.ts +1 -1
  40. package/dist/types/lib/components/metadata-instance-list/subcomponents/metadata-instance/metadata-instance.d.ts +1 -1
  41. package/dist/types/lib/components/metadata-instance-list/subcomponents/metadata-instance/types.d.ts +6 -1
  42. package/dist/types/lib/components/metadata-instance-list/subcomponents/metadata-instance-cascade-notice/messages.d.ts +13 -0
  43. package/dist/types/lib/components/metadata-instance-list/subcomponents/metadata-instance-cascade-notice/metadata-instance-cascade-notice.d.ts +5 -0
  44. package/dist/types/lib/components/metadata-instance-list/subcomponents/metadata-instance-header/metadata-instance-header.d.ts +1 -1
  45. package/dist/types/lib/components/metadata-instance-list/subcomponents/metadata-instance-header/types.d.ts +5 -0
  46. package/dist/types/lib/components/metadata-instance-list/types.d.ts +3 -1
  47. package/dist/types/lib/types.d.ts +25 -0
  48. package/dist/types/lib/utils/cascade-policy.d.ts +35 -0
  49. package/package.json +1 -1
package/README.md CHANGED
@@ -52,9 +52,11 @@ If you have any questions or needs related to this feature, please reach out to
52
52
 
53
53
  ## Item type
54
54
 
55
- `itemType` selects item-specific copy only; it does not gate any feature. Autofill, confidence score review, and bounding boxes are controlled solely by their own flags. Those features are supported for files only, so folder hosts should leave their flags off.
55
+ `itemType` selects item-specific copy. Autofill, confidence score review, and bounding boxes stay on their own flags and are supported for files only, so folder hosts should leave those flags off.
56
56
 
57
- `MetadataInstanceForm` accepts an optional `itemType` of `'file' | 'folder'`. It defaults to `'file'` and is passed through to `DeleteConfirmationModal`. `MetadataInstanceList` does not take `itemType`.
57
+ `folder` also shows the cascade policy editor. When the user may edit that policy, `onSubmit` receives `cascadePolicySelection` (`id`, `isEnabled`, `overwrite`, `canEdit`, and the applied AI extract settings). File saves omit that argument. A policy with `canEdit: false` is shown as a read-only notice and is left out of save.
58
+
59
+ `MetadataInstanceForm` accepts an optional `itemType` of `'file' | 'folder'`. It defaults to `'file'` and is passed through to `DeleteConfirmationModal`. `MetadataInstanceList` does not take `itemType`; the list shows its own cascade notice when a folder instance already has a policy.
58
60
 
59
61
  Folder empty-state copy is a separate prop. Pass `level="folder"` on `MetadataEmptyState` together with `itemType="folder"` on the form, so the delete modal and the empty state describe the same item.
60
62
 
@@ -1 +1 @@
1
- import{EVENT_NAMES}from"../esm/lib/utils/analytics/events.js";import{useMetadataEditorAnalytics}from"../esm/lib/utils/analytics/analytics-context.js";import{n as ConfidenceLevel}from"./types.js";import{t as field_action_bar_module_default}from"./field-action-bar.module.js";import messages_default from"../esm/lib/components/metadata-editor-fields/components/ai-suggestion-field/messages.js";import{formatSuggestionValue}from"../esm/lib/components/metadata-editor-fields/components/ai-suggestion-field/utils.js";import{useEffect,useRef}from"react";import{FormattedMessage,useIntl}from"react-intl";import{Fragment,jsx,jsxs}from"react/jsx-runtime";import clsx from"clsx";import{DropdownMenu,IconButton,Text}from"@box/blueprint-web";import{Checkmark,Ellipsis}from"@box/blueprint-web-assets/icons/Fill";import '../styles/ai-suggestion-field.css';var ai_suggestion_field_module_default={wrapper:`_wrapper_132y2_1`,selectTrigger:`_selectTrigger_132y2_1`};function AiSuggestionField({aiSuggestion,onAiSuggestionAppend,onAiSuggestionReplace,onAiSuggestionIgnore,type,isSameValue,confidenceLevel}){let intl=useIntl(),{trackEvent}=useMetadataEditorAnalytics(),hasTrackedShownRef=useRef(!1);useEffect(()=>{hasTrackedShownRef.current||aiSuggestion==null||!trackEvent||(hasTrackedShownRef.current=!0,trackEvent(EVENT_NAMES.AI_SUGGESTION_SHOWN,{fieldType:type,confidenceLevel,isSameValue}))},[aiSuggestion,confidenceLevel,isSameValue,type,trackEvent]);let confidenceLevelMessage=confidenceLevel===ConfidenceLevel.High?messages_default.confidenceLevelHigh:messages_default.confidenceLevelLow,captionLevel=confidenceLevel?intl.formatMessage(confidenceLevelMessage):void 0;return jsx(`div`,{className:field_action_bar_module_default.wrapperGradient,children:jsx(`div`,{className:clsx(field_action_bar_module_default.wrapper,ai_suggestion_field_module_default.wrapper),children:isSameValue?jsxs(Fragment,{children:[jsx(Text,{as:`p`,color:`textOnLightSecondary`,variant:`caption`,children:confidenceLevel?intl.formatMessage(messages_default.sameValueAiSuggestionCaptionWithLevel,{level:captionLevel}):intl.formatMessage(messages_default.sameValueAiSuggestionCaption)}),jsx(`div`,{className:field_action_bar_module_default.buttons,children:jsx(IconButton,{"aria-label":confidenceLevel?intl.formatMessage(messages_default.aiSuggestionAccept):intl.formatMessage(messages_default.aiSuggestionConfirm),"data-target-id":confidenceLevel?`IconButton-aiSuggestionAccept`:`IconButton-aiSuggestionConfirmSame`,icon:Checkmark,onClick:confidenceLevel?onAiSuggestionReplace:onAiSuggestionIgnore,size:`x-small`})})]}):jsxs(Fragment,{children:[jsxs(`div`,{children:[jsx(Text,{as:`p`,color:`textOnLightSecondary`,variant:`caption`,children:confidenceLevel?intl.formatMessage(messages_default.aiSuggestionCaptionWithLevel,{level:captionLevel}):intl.formatMessage(messages_default.aiSuggestionCaption)}),jsx(Text,{as:`p`,children:formatSuggestionValue(aiSuggestion,{type,locale:intl.locale})})]}),jsxs(`div`,{className:field_action_bar_module_default.buttons,children:[jsx(IconButton,{"aria-label":intl.formatMessage(type===`multiSelect`?messages_default.aiSuggestionAppend:messages_default.aiSuggestionClearAndReplace),"data-target-id":type===`multiSelect`?`IconButton-aiSuggestionAppend`:`IconButton-aiSuggestionClearAndReplace`,icon:Checkmark,onClick:type===`multiSelect`?onAiSuggestionAppend:onAiSuggestionReplace,size:`x-small`}),jsxs(DropdownMenu.Root,{children:[jsx(DropdownMenu.Trigger,{className:ai_suggestion_field_module_default.selectTrigger,children:jsx(IconButton,{"aria-label":intl.formatMessage(messages_default.aiSuggestionOptions),"data-target-id":`IconButton-aiSuggestionOptions`,icon:Ellipsis})}),jsxs(DropdownMenu.Content,{children:[type===`multiSelect`&&jsx(DropdownMenu.Item,{"data-target-id":`DropdownMenu.Item-aiSuggestionAppend`,onSelect:onAiSuggestionAppend,children:jsx(FormattedMessage,{...messages_default.aiSuggestionAppend})}),jsx(DropdownMenu.Item,{"data-target-id":`DropdownMenu.Item-metadataAiSuggestionClearAndReplace`,onSelect:onAiSuggestionReplace,children:jsx(FormattedMessage,{...messages_default.aiSuggestionClearAndReplace})}),jsx(DropdownMenu.Separator,{}),jsx(DropdownMenu.Item,{"data-target-id":`DropdownMenu.Item-metadataAiSuggestionIgnore`,onSelect:onAiSuggestionIgnore,children:jsx(FormattedMessage,{...messages_default.aiSuggestionIgnore})})]})]})]})]})})})}export{AiSuggestionField as t};
1
+ import{EVENT_NAMES}from"../esm/lib/utils/analytics/events.js";import{useMetadataEditorAnalytics}from"../esm/lib/utils/analytics/analytics-context.js";import{r as ConfidenceLevel}from"./types.js";import{t as field_action_bar_module_default}from"./field-action-bar.module.js";import messages_default from"../esm/lib/components/metadata-editor-fields/components/ai-suggestion-field/messages.js";import{formatSuggestionValue}from"../esm/lib/components/metadata-editor-fields/components/ai-suggestion-field/utils.js";import{useEffect,useRef}from"react";import{FormattedMessage,useIntl}from"react-intl";import{Fragment,jsx,jsxs}from"react/jsx-runtime";import clsx from"clsx";import{DropdownMenu,IconButton,Text}from"@box/blueprint-web";import{Checkmark,Ellipsis}from"@box/blueprint-web-assets/icons/Fill";import '../styles/ai-suggestion-field.css';var ai_suggestion_field_module_default={wrapper:`_wrapper_132y2_1`,selectTrigger:`_selectTrigger_132y2_1`};function AiSuggestionField({aiSuggestion,onAiSuggestionAppend,onAiSuggestionReplace,onAiSuggestionIgnore,type,isSameValue,confidenceLevel}){let intl=useIntl(),{trackEvent}=useMetadataEditorAnalytics(),hasTrackedShownRef=useRef(!1);useEffect(()=>{hasTrackedShownRef.current||aiSuggestion==null||!trackEvent||(hasTrackedShownRef.current=!0,trackEvent(EVENT_NAMES.AI_SUGGESTION_SHOWN,{fieldType:type,confidenceLevel,isSameValue}))},[aiSuggestion,confidenceLevel,isSameValue,type,trackEvent]);let confidenceLevelMessage=confidenceLevel===ConfidenceLevel.High?messages_default.confidenceLevelHigh:messages_default.confidenceLevelLow,captionLevel=confidenceLevel?intl.formatMessage(confidenceLevelMessage):void 0;return jsx(`div`,{className:field_action_bar_module_default.wrapperGradient,children:jsx(`div`,{className:clsx(field_action_bar_module_default.wrapper,ai_suggestion_field_module_default.wrapper),children:isSameValue?jsxs(Fragment,{children:[jsx(Text,{as:`p`,color:`textOnLightSecondary`,variant:`caption`,children:confidenceLevel?intl.formatMessage(messages_default.sameValueAiSuggestionCaptionWithLevel,{level:captionLevel}):intl.formatMessage(messages_default.sameValueAiSuggestionCaption)}),jsx(`div`,{className:field_action_bar_module_default.buttons,children:jsx(IconButton,{"aria-label":confidenceLevel?intl.formatMessage(messages_default.aiSuggestionAccept):intl.formatMessage(messages_default.aiSuggestionConfirm),"data-target-id":confidenceLevel?`IconButton-aiSuggestionAccept`:`IconButton-aiSuggestionConfirmSame`,icon:Checkmark,onClick:confidenceLevel?onAiSuggestionReplace:onAiSuggestionIgnore,size:`x-small`})})]}):jsxs(Fragment,{children:[jsxs(`div`,{children:[jsx(Text,{as:`p`,color:`textOnLightSecondary`,variant:`caption`,children:confidenceLevel?intl.formatMessage(messages_default.aiSuggestionCaptionWithLevel,{level:captionLevel}):intl.formatMessage(messages_default.aiSuggestionCaption)}),jsx(Text,{as:`p`,children:formatSuggestionValue(aiSuggestion,{type,locale:intl.locale})})]}),jsxs(`div`,{className:field_action_bar_module_default.buttons,children:[jsx(IconButton,{"aria-label":intl.formatMessage(type===`multiSelect`?messages_default.aiSuggestionAppend:messages_default.aiSuggestionClearAndReplace),"data-target-id":type===`multiSelect`?`IconButton-aiSuggestionAppend`:`IconButton-aiSuggestionClearAndReplace`,icon:Checkmark,onClick:type===`multiSelect`?onAiSuggestionAppend:onAiSuggestionReplace,size:`x-small`}),jsxs(DropdownMenu.Root,{children:[jsx(DropdownMenu.Trigger,{className:ai_suggestion_field_module_default.selectTrigger,children:jsx(IconButton,{"aria-label":intl.formatMessage(messages_default.aiSuggestionOptions),"data-target-id":`IconButton-aiSuggestionOptions`,icon:Ellipsis})}),jsxs(DropdownMenu.Content,{children:[type===`multiSelect`&&jsx(DropdownMenu.Item,{"data-target-id":`DropdownMenu.Item-aiSuggestionAppend`,onSelect:onAiSuggestionAppend,children:jsx(FormattedMessage,{...messages_default.aiSuggestionAppend})}),jsx(DropdownMenu.Item,{"data-target-id":`DropdownMenu.Item-metadataAiSuggestionClearAndReplace`,onSelect:onAiSuggestionReplace,children:jsx(FormattedMessage,{...messages_default.aiSuggestionClearAndReplace})}),jsx(DropdownMenu.Separator,{}),jsx(DropdownMenu.Item,{"data-target-id":`DropdownMenu.Item-metadataAiSuggestionIgnore`,onSelect:onAiSuggestionIgnore,children:jsx(FormattedMessage,{...messages_default.aiSuggestionIgnore})})]})]})]})]})})})}export{AiSuggestionField as t};
@@ -0,0 +1 @@
1
+ import{isCascadePolicyEnabled}from"../esm/lib/utils/cascade-policy.js";import{MetadataInstanceCascadeNotice}from"../esm/lib/components/metadata-instance-list/subcomponents/metadata-instance-cascade-notice/metadata-instance-cascade-notice.js";import messages from"../esm/lib/components/metadata-instance-editor/subcomponents/cascade-policy-editor/messages.js";import{useIntl}from"react-intl";import{Fragment,jsx,jsxs}from"react/jsx-runtime";import{InlineNotice,Link,Radio,Switch,Text}from"@box/blueprint-web";import{AlertTriangle}from"@box/blueprint-web-assets/icons/Line";import '../styles/cascade-policy-editor.css';var cascade_policy_editor_module_default={cascadePolicyEditor:`_cascadePolicyEditor_865r5_1`,section:`_section_865r5_7`,notImmediate:`_notImmediate_865r5_16`,notImmediateIcon:`_notImmediateIcon_865r5_23`},CASCADE_POLICY_SUPPORT_LINK=`https://support.box.com/hc/en-us/articles/360044195873-Cascading-metadata-in-folders`,CascadePolicyEditor=({cascadePolicy,canEdit=!0,isCustomMetadata=!1,isEnabled,mode,isConfiguringReplacement=!1,onCascadeToggle,onCascadeModeChange})=>{let intl=useIntl(),isExistingCascadePolicy=isCascadePolicyEnabled(cascadePolicy),showConflictOptions=isEnabled&&!isCustomMetadata&&(!isExistingCascadePolicy||isConfiguringReplacement);return!canEdit&&!isCustomMetadata?isExistingCascadePolicy?jsx(`div`,{className:cascade_policy_editor_module_default.cascadePolicyEditor,"data-testid":`cascade-policy-editor`,children:jsx(MetadataInstanceCascadeNotice,{})}):null:jsxs(`div`,{className:cascade_policy_editor_module_default.cascadePolicyEditor,"data-testid":`cascade-policy-editor`,children:[isExistingCascadePolicy&&!isConfiguringReplacement&&jsx(InlineNotice,{variant:`info`,variantIconAriaLabel:intl.formatMessage(messages.cascadePolicyOptionsDisabledNoticeIconAriaLabel),children:intl.formatMessage(messages.cascadePolicyOptionsDisabledNotice)}),jsx(`div`,{className:cascade_policy_editor_module_default.section,"data-testid":`cascade-policy-enable`,children:isCustomMetadata?jsxs(Fragment,{children:[jsx(Text,{as:`p`,variant:`bodyDefaultBold`,children:intl.formatMessage(messages.enableCascadePolicy)}),jsx(Text,{as:`p`,color:`textOnLightSecondary`,children:intl.formatMessage(messages.cannotApplyCascadePolicyText)})]}):jsxs(Fragment,{children:[jsx(Switch.Item,{checked:isEnabled,"data-target-id":`Switch-metadataEditorEnableCascadePolicy`,description:intl.formatMessage(messages.applyCascadePolicyText),label:intl.formatMessage(messages.enableCascadePolicy),onCheckedChange:onCascadeToggle,value:`cascade-policy`}),jsx(Link,{"data-target-id":`Link-metadataEditorCascadePolicyLearnMore`,href:CASCADE_POLICY_SUPPORT_LINK,isExternal:!0,rel:`noopener noreferrer`,target:`_blank`,children:intl.formatMessage(messages.cascadePolicyLearnMore)})]})}),showConflictOptions&&jsxs(`div`,{className:cascade_policy_editor_module_default.section,"data-testid":`cascade-policy-mode`,children:[jsx(Text,{as:`p`,children:intl.formatMessage(messages.cascadePolicyModeQuestion)}),jsxs(`div`,{className:cascade_policy_editor_module_default.notImmediate,children:[jsx(AlertTriangle,{"aria-label":intl.formatMessage(messages.operationNotImmediateIconAriaLabel),className:cascade_policy_editor_module_default.notImmediateIcon,color:`currentColor`}),jsx(Text,{as:`span`,variant:`bodyDefaultBold`,children:intl.formatMessage(messages.operationNotImmediate)})]}),jsxs(Radio.Group,{"aria-label":intl.formatMessage(messages.cascadePolicyModeLegend),onValueChange:value=>{onCascadeModeChange(value)},value:mode,children:[jsx(Radio.Item,{"data-target-id":`Radio-metadataEditorCascadePolicySkip`,label:intl.formatMessage(messages.cascadePolicySkipMode),value:`skip`}),jsx(Radio.Item,{"data-target-id":`Radio-metadataEditorCascadePolicyOverwrite`,label:intl.formatMessage(messages.cascadePolicyOverwriteMode),value:`overwrite`})]})]})]})};export{CascadePolicyEditor as t};
@@ -1 +1 @@
1
- import{TEMPLATE_CUSTOM_PROPERTIES}from"../esm/lib/constants.js";import{t as MetadataInstanceFormAiDisclaimer}from"./metadata-instance-form-ai-disclaimer.js";import{t as MetadataInstanceFormFooter}from"./metadata-instance-form-footer.js";import{t as MetadataInstanceFormHeader}from"./metadata-instance-form-header.js";import{jsx,jsxs}from"react/jsx-runtime";import clsx from"clsx";import{Card}from"@box/blueprint-web";import '../styles/metadata-instance-form-card-wrapper.css';var metadata_instance_form_module_default={metadataInstanceForm:`_metadataInstanceForm_10ifw_1`,wrapperGradient:`_wrapperGradient_10ifw_7`,suggestionsFetching:`_suggestionsFetching_10ifw_12`,metadataInstanceFormContent:`_metadataInstanceFormContent_10ifw_18`,metadataInstanceFormContentReducedGap:`_metadataInstanceFormContentReducedGap_10ifw_25`,showOverlay:`_showOverlay_10ifw_29`},MetadataInstanceFormCardWrapper=props=>{let{areAiSuggestionsAvailable,children,className,formRef,formValues,isAdvancedExtractAgentEnabled=!1,isAiSuggestionsFeatureEnabled,isBetaLanguageEnabled,isConfidenceScoreReviewEnabled=!1,isBoundingBoxEnabled=!1,isLargeFile=!1,isDeleteButtonDisabled,onToggleReviewFilter,shouldShowOnlyReviewFields=!1,suggestions,isFetchingSuggestions,isFormDirty=!1,selectedTemplateInstance,getAiSuggestions,handleCancel,handleDelete}=props,isCustomMetadata=selectedTemplateInstance?.templateKey===TEMPLATE_CUSTOM_PROPERTIES,hasSuggestions=!!suggestions[selectedTemplateInstance?.templateKey],isBoundingBoxOrConfidenceScoreReviewEnabled=isConfidenceScoreReviewEnabled||isBoundingBoxEnabled;return jsx(`div`,{className:isFetchingSuggestions&&metadata_instance_form_module_default.wrapperGradient,children:jsxs(Card,{ref:formRef,className:clsx(className,{[metadata_instance_form_module_default.suggestionsFetching]:isFetchingSuggestions}),children:[jsx(MetadataInstanceFormHeader,{areAiSuggestionsAvailable,hasSuggestions,isAdvancedExtractAgentEnabled,isAiSuggestionsFeatureEnabled:isAiSuggestionsFeatureEnabled&&!isCustomMetadata,isBetaLanguageEnabled,isConfidenceScoreReviewEnabled,isLargeFile,isLoading:isFetchingSuggestions,onAutofill:getAiSuggestions,onToggleReviewFilter,shouldShowOnlyReviewFields,templateName:selectedTemplateInstance?.displayName}),selectedTemplateInstance&&children,jsx(MetadataInstanceFormAiDisclaimer,{isLoading:isFetchingSuggestions,isBoundingBoxOrConfidenceScoreReviewEnabled,fields:formValues.metadata?.fields??[]}),jsx(MetadataInstanceFormFooter,{isDeleteButtonDisabled,isLoading:isFetchingSuggestions,onCancel:()=>handleCancel(isFormDirty),onDelete:handleDelete})]})})};export{metadata_instance_form_module_default as n,MetadataInstanceFormCardWrapper as t};
1
+ import{TEMPLATE_CUSTOM_PROPERTIES}from"../esm/lib/constants.js";import{isCustomExtractAgentPolicy}from"../esm/lib/utils/cascade-policy.js";import{t as CascadePolicyEditor}from"./cascade-policy-editor.js";import{CustomExtractAgentNotice}from"../esm/lib/components/metadata-instance-editor/subcomponents/custom-extract-agent-notice/custom-extract-agent-notice.js";import{t as MetadataInstanceFormAiDisclaimer}from"./metadata-instance-form-ai-disclaimer.js";import{t as MetadataInstanceFormFooter}from"./metadata-instance-form-footer.js";import{t as MetadataInstanceFormHeader}from"./metadata-instance-form-header.js";import{Fragment,jsx,jsxs}from"react/jsx-runtime";import clsx from"clsx";import{Card}from"@box/blueprint-web";import '../styles/metadata-instance-form-card-wrapper.css';var metadata_instance_form_module_default={metadataInstanceForm:`_metadataInstanceForm_10ifw_1`,wrapperGradient:`_wrapperGradient_10ifw_7`,suggestionsFetching:`_suggestionsFetching_10ifw_12`,metadataInstanceFormContent:`_metadataInstanceFormContent_10ifw_18`,metadataInstanceFormContentReducedGap:`_metadataInstanceFormContentReducedGap_10ifw_25`,showOverlay:`_showOverlay_10ifw_29`},noopCascadeToggle=()=>void 0,noopCascadeModeChange=_mode=>void 0,MetadataInstanceFormCardWrapper=props=>{let{areAiSuggestionsAvailable,children,className,formRef,formValues,isAdvancedExtractAgentEnabled=!1,isAiSuggestionsFeatureEnabled,isBetaLanguageEnabled,isConfidenceScoreReviewEnabled=!1,isBoundingBoxEnabled=!1,isLargeFile=!1,isDeleteButtonDisabled,onToggleReviewFilter,shouldShowOnlyReviewFields=!1,suggestions,isFetchingSuggestions,isFormDirty=!1,selectedTemplateInstance,getAiSuggestions,handleCancel,handleDelete,itemType=`file`,onManageExtractAgent,cascadeIsEnabled=!1,cascadeMode=`skip`,isConfiguringCascadeReplacement=!1,onCascadeToggle,onCascadeModeChange}=props,isCustomMetadata=selectedTemplateInstance?.templateKey===TEMPLATE_CUSTOM_PROPERTIES,hasSuggestions=!!suggestions[selectedTemplateInstance?.templateKey],isBoundingBoxOrConfidenceScoreReviewEnabled=isConfidenceScoreReviewEnabled||isBoundingBoxEnabled,isFolder=itemType===`folder`,cascadePolicy=selectedTemplateInstance?.cascadePolicy,isManagedByCustomExtractAgent=isFolder&&isCustomExtractAgentPolicy(cascadePolicy);return jsx(`div`,{className:isFetchingSuggestions&&metadata_instance_form_module_default.wrapperGradient,children:jsxs(Card,{ref:formRef,className:clsx(className,{[metadata_instance_form_module_default.suggestionsFetching]:isFetchingSuggestions}),children:[jsx(MetadataInstanceFormHeader,{areAiSuggestionsAvailable,hasSuggestions,isAdvancedExtractAgentEnabled,isAiSuggestionsFeatureEnabled:isAiSuggestionsFeatureEnabled&&!isCustomMetadata&&!isManagedByCustomExtractAgent,isBetaLanguageEnabled,isConfidenceScoreReviewEnabled,isLargeFile,isLoading:isFetchingSuggestions,onAutofill:isManagedByCustomExtractAgent?void 0:getAiSuggestions,onToggleReviewFilter,shouldShowOnlyReviewFields,templateName:selectedTemplateInstance?.displayName}),isManagedByCustomExtractAgent?jsx(CustomExtractAgentNotice,{agentConfiguration:cascadePolicy?.agentConfiguration,onManageExtractAgent}):jsxs(Fragment,{children:[isFolder&&selectedTemplateInstance&&jsx(CascadePolicyEditor,{canEdit:cascadePolicy?.canEdit!==!1,cascadePolicy,isConfiguringReplacement:isConfiguringCascadeReplacement,isCustomMetadata,isEnabled:cascadeIsEnabled,mode:cascadeMode,onCascadeModeChange:onCascadeModeChange??noopCascadeModeChange,onCascadeToggle:onCascadeToggle??noopCascadeToggle}),selectedTemplateInstance&&children]}),jsx(MetadataInstanceFormAiDisclaimer,{isLoading:isFetchingSuggestions,isBoundingBoxOrConfidenceScoreReviewEnabled,fields:formValues.metadata?.fields??[]}),jsx(MetadataInstanceFormFooter,{isDeleteButtonDisabled:isDeleteButtonDisabled||isManagedByCustomExtractAgent,isLoading:isFetchingSuggestions,isSaveButtonDisabled:isManagedByCustomExtractAgent,onCancel:()=>handleCancel(isFormDirty),onDelete:handleDelete})]})})};export{metadata_instance_form_module_default as n,MetadataInstanceFormCardWrapper as t};
@@ -1 +1 @@
1
- import messages from"../esm/lib/components/metadata-instance-editor/subcomponents/metadata-instance-form-footer/messages.js";import{useIntl}from"react-intl";import{jsx,jsxs}from"react/jsx-runtime";import{Button,TextButton}from"@box/blueprint-web";import{useFormikContext}from"formik";import '../styles/metadata-instance-form-footer.css';var metadata_instance_form_footer_module_default={metadataInstanceFormFooter:`_metadataInstanceFormFooter_sqpiw_1`,buttonsContainer:`_buttonsContainer_sqpiw_7`,buttons:`_buttons_sqpiw_7`},MetadataInstanceFormFooter=({isDeleteButtonDisabled,isLoading,onCancel,onDelete})=>{let intl=useIntl(),{isSubmitting,submitForm}=useFormikContext(),isButtonDisabled=isLoading||isSubmitting;return jsx(`div`,{className:metadata_instance_form_footer_module_default.metadataInstanceFormFooter,children:jsxs(`div`,{className:metadata_instance_form_footer_module_default.buttonsContainer,children:[jsx(TextButton,{"data-target-id":`TextButton-metadataEditorDelete`,disabled:isButtonDisabled||isDeleteButtonDisabled,onClick:onDelete,children:intl.formatMessage(messages.deleteButton)}),jsxs(`div`,{className:metadata_instance_form_footer_module_default.buttons,children:[jsx(Button,{"data-target-id":`Button-metadataEditorCancel`,disabled:isButtonDisabled,onClick:onCancel,size:`large`,variant:`secondary`,children:intl.formatMessage(messages.cancelButton)}),jsx(Button,{"data-target-id":`Button-metadataEditorSave`,disabled:isButtonDisabled,loading:isSubmitting,loadingAriaLabel:intl.formatMessage(messages.loadingAriaLabel),onClick:submitForm,size:`large`,children:intl.formatMessage(messages.saveButton)})]})]})})};export{MetadataInstanceFormFooter as t};
1
+ import messages from"../esm/lib/components/metadata-instance-editor/subcomponents/metadata-instance-form-footer/messages.js";import{useIntl}from"react-intl";import{jsx,jsxs}from"react/jsx-runtime";import{Button,TextButton}from"@box/blueprint-web";import{useFormikContext}from"formik";import '../styles/metadata-instance-form-footer.css';var metadata_instance_form_footer_module_default={metadataInstanceFormFooter:`_metadataInstanceFormFooter_sqpiw_1`,buttonsContainer:`_buttonsContainer_sqpiw_7`,buttons:`_buttons_sqpiw_7`},MetadataInstanceFormFooter=({isDeleteButtonDisabled,isSaveButtonDisabled=!1,isLoading,onCancel,onDelete})=>{let intl=useIntl(),{isSubmitting,submitForm}=useFormikContext(),isButtonDisabled=isLoading||isSubmitting;return jsx(`div`,{className:metadata_instance_form_footer_module_default.metadataInstanceFormFooter,children:jsxs(`div`,{className:metadata_instance_form_footer_module_default.buttonsContainer,children:[jsx(TextButton,{"data-target-id":`TextButton-metadataEditorDelete`,disabled:isButtonDisabled||isDeleteButtonDisabled,onClick:onDelete,children:intl.formatMessage(messages.deleteButton)}),jsxs(`div`,{className:metadata_instance_form_footer_module_default.buttons,children:[jsx(Button,{"data-target-id":`Button-metadataEditorCancel`,disabled:isButtonDisabled,onClick:onCancel,size:`large`,variant:`secondary`,children:intl.formatMessage(messages.cancelButton)}),jsx(Button,{"data-target-id":`Button-metadataEditorSave`,disabled:isButtonDisabled||isSaveButtonDisabled,loading:isSubmitting,loadingAriaLabel:intl.formatMessage(messages.loadingAriaLabel),onClick:submitForm,size:`large`,children:intl.formatMessage(messages.saveButton)})]})]})})};export{MetadataInstanceFormFooter as t};
@@ -1 +1 @@
1
- import{EXTRACT_AGENTS_MAP,EXTRACT_AI_AGENT_LOCAL_STORAGE_KEY}from"../esm/lib/constants.js";import{autofillMessages}from"../esm/lib/messages.js";import{getTooltipContent}from"../esm/lib/utils/utils.js";import{t as InteractiveHeaderText}from"./interactive-header-text.js";import messages from"../esm/lib/components/metadata-instance-list/subcomponents/metadata-instance-header/messages.js";import{useMemo}from"react";import{useIntl}from"react-intl";import{BoxAiAdvancedLogo24,BoxAiLogo24}from"@box/blueprint-web-assets/icons/Logo";import{jsx,jsxs}from"react/jsx-runtime";import{IconButton,Tooltip}from"@box/blueprint-web";import{Pencil}from"@box/blueprint-web-assets/icons/Line";import{useLocalStorageAIAgents}from"@box/box-ai-agent-selector";import '../styles/metadata-instance-header.css';var metadata_instance_header_module_default={metadataInstanceHeader:`_metadataInstanceHeader_17bsu_1`,iconButtonsContainer:`_iconButtonsContainer_17bsu_6`,title:`_title_17bsu_14`},MetadataInstanceHeader=({areAiSuggestionsAvailable,canEdit,isAiSuggestionsFeatureEnabled,isBetaLanguageEnabled,onEdit,onAutofill,templateName,isAdvancedExtractAgentEnabled=!1})=>{let intl=useIntl(),title=templateName||intl.formatMessage(messages.customInstanceTitle),showAiButton=isAiSuggestionsFeatureEnabled&&templateName,[storedAgent]=useLocalStorageAIAgents(EXTRACT_AI_AGENT_LOCAL_STORAGE_KEY),agentId=isAdvancedExtractAgentEnabled&&EXTRACT_AGENTS_MAP[storedAgent]?.AGENT_ID,tooltipContent=useMemo(()=>getTooltipContent(isAdvancedExtractAgentEnabled,storedAgent,intl),[isAdvancedExtractAgentEnabled,storedAgent,intl]);return jsxs(`div`,{className:metadata_instance_header_module_default.metadataInstanceHeader,children:[jsx(InteractiveHeaderText,{className:metadata_instance_header_module_default.title,title}),canEdit&&jsxs(`div`,{className:metadata_instance_header_module_default.iconButtonsContainer,children:[showAiButton&&jsx(Tooltip,{content:tooltipContent,children:jsx(IconButton,{"aria-label":intl.formatMessage(autofillMessages.autofillButtonAriaLabelWithTemplateName,{templateName}),"data-target-id":`IconButton-metadataEditorAutofillReadMode`,disabled:!areAiSuggestionsAvailable,icon:storedAgent===`enhanced`&&isAdvancedExtractAgentEnabled?BoxAiAdvancedLogo24:BoxAiLogo24,onClick:()=>onAutofill(agentId||void 0),variant:`icon-logo`})}),jsx(Tooltip,{content:intl.formatMessage(messages.editButtonTooltip),children:jsx(IconButton,{"aria-label":intl.formatMessage(messages.editButtonAriaLabel,{templateName}),icon:Pencil,onClick:onEdit,"data-target-id":`IconButton-editButtonAriaLabel`})})]})]})};export{MetadataInstanceHeader as t};
1
+ import{EXTRACT_AGENTS_MAP,EXTRACT_AI_AGENT_LOCAL_STORAGE_KEY}from"../esm/lib/constants.js";import{autofillMessages}from"../esm/lib/messages.js";import{getTooltipContent}from"../esm/lib/utils/utils.js";import{t as InteractiveHeaderText}from"./interactive-header-text.js";import messages from"../esm/lib/components/metadata-instance-list/subcomponents/metadata-instance-header/messages.js";import{useMemo}from"react";import{useIntl}from"react-intl";import{BoxAiAdvancedLogo24,BoxAiLogo24}from"@box/blueprint-web-assets/icons/Logo";import{jsx,jsxs}from"react/jsx-runtime";import clsx from"clsx";import{IconButton,Tooltip}from"@box/blueprint-web";import{MetadataBadge,Pencil}from"@box/blueprint-web-assets/icons/Line";import{useLocalStorageAIAgents}from"@box/box-ai-agent-selector";import '../styles/metadata-instance-header.css';var metadata_instance_header_module_default={metadataInstanceHeader:`_metadataInstanceHeader_1yxcv_1`,iconButtonsContainer:`_iconButtonsContainer_1yxcv_6`,titleContainer:`_titleContainer_1yxcv_14`,title:`_title_1yxcv_14`,badge:`_badge_1yxcv_23`,badgeCascaded:`_badgeCascaded_1yxcv_31`},MetadataInstanceHeader=({areAiSuggestionsAvailable,canEdit,isAiSuggestionsFeatureEnabled,isBetaLanguageEnabled,onEdit,onAutofill,templateName,isAdvancedExtractAgentEnabled=!1,itemType=`file`,isCascaded=!1})=>{let intl=useIntl(),title=templateName||intl.formatMessage(messages.customInstanceTitle),showAiButton=isAiSuggestionsFeatureEnabled&&templateName,showBadge=itemType===`folder`,[storedAgent]=useLocalStorageAIAgents(EXTRACT_AI_AGENT_LOCAL_STORAGE_KEY),agentId=isAdvancedExtractAgentEnabled&&EXTRACT_AGENTS_MAP[storedAgent]?.AGENT_ID,tooltipContent=useMemo(()=>getTooltipContent(isAdvancedExtractAgentEnabled,storedAgent,intl),[isAdvancedExtractAgentEnabled,storedAgent,intl]);return jsxs(`div`,{className:metadata_instance_header_module_default.metadataInstanceHeader,children:[jsxs(`div`,{className:metadata_instance_header_module_default.titleContainer,children:[showBadge&&jsx(MetadataBadge,{"aria-hidden":`true`,className:clsx(metadata_instance_header_module_default.badge,{[metadata_instance_header_module_default.badgeCascaded]:isCascaded}),color:`currentColor`,"data-cascaded":isCascaded?`true`:`false`,"data-testid":`metadata-instance-header-badge`}),jsx(InteractiveHeaderText,{className:metadata_instance_header_module_default.title,title})]}),canEdit&&jsxs(`div`,{className:metadata_instance_header_module_default.iconButtonsContainer,children:[showAiButton&&jsx(Tooltip,{content:tooltipContent,children:jsx(IconButton,{"aria-label":intl.formatMessage(autofillMessages.autofillButtonAriaLabelWithTemplateName,{templateName}),"data-target-id":`IconButton-metadataEditorAutofillReadMode`,disabled:!areAiSuggestionsAvailable,icon:storedAgent===`enhanced`&&isAdvancedExtractAgentEnabled?BoxAiAdvancedLogo24:BoxAiLogo24,onClick:()=>onAutofill(agentId||void 0),variant:`icon-logo`})}),jsx(Tooltip,{content:intl.formatMessage(messages.editButtonTooltip),children:jsx(IconButton,{"aria-label":intl.formatMessage(messages.editButtonAriaLabel,{templateName}),icon:Pencil,onClick:onEdit,"data-target-id":`IconButton-editButtonAriaLabel`})})]})]})};export{MetadataInstanceHeader as t};
@@ -1 +1 @@
1
- import{getVisibleTemplates}from"../esm/lib/utils/utils.js";import{t as MetadataInstance}from"./metadata-instance.js";import{jsx}from"react/jsx-runtime";import '../styles/metadata-instance-list.css';var metadata_instance_list_module_default={metadataInstanceList:`_metadataInstanceList_bd83w_1`},MetadataInstanceList=({areAiSuggestionsAvailable,isAiSuggestionsFeatureEnabled,isBetaLanguageEnabled,onEdit,onSelectMetadataField,selectedMetadataFieldId,templateInstances,taxonomyNodeFetcher,isAdvancedExtractAgentEnabled=!1,isConfidenceScoreReviewEnabled=!1,isBoundingBoxEnabled=!1})=>jsx(`div`,{className:metadata_instance_list_module_default.metadataInstanceList,children:getVisibleTemplates(templateInstances).map(templateInstance=>jsx(MetadataInstance,{areAiSuggestionsAvailable,isAdvancedExtractAgentEnabled,isAiSuggestionsFeatureEnabled,isBetaLanguageEnabled,isConfidenceScoreReviewEnabled,isBoundingBoxEnabled,onEdit,onSelectMetadataField,selectedMetadataFieldId,taxonomyNodeFetcher,templateInstance},templateInstance.id))});export{MetadataInstanceList as t};
1
+ import{getVisibleTemplates}from"../esm/lib/utils/utils.js";import{t as MetadataInstance}from"./metadata-instance.js";import{jsx}from"react/jsx-runtime";import '../styles/metadata-instance-list.css';var metadata_instance_list_module_default={metadataInstanceList:`_metadataInstanceList_bd83w_1`},MetadataInstanceList=({itemType=`file`,areAiSuggestionsAvailable,isAiSuggestionsFeatureEnabled,isBetaLanguageEnabled,onEdit,onSelectMetadataField,selectedMetadataFieldId,templateInstances,taxonomyNodeFetcher,isAdvancedExtractAgentEnabled=!1,isConfidenceScoreReviewEnabled=!1,isBoundingBoxEnabled=!1})=>jsx(`div`,{className:metadata_instance_list_module_default.metadataInstanceList,children:getVisibleTemplates(templateInstances).map(templateInstance=>jsx(MetadataInstance,{areAiSuggestionsAvailable,isAdvancedExtractAgentEnabled,isAiSuggestionsFeatureEnabled,isBetaLanguageEnabled,isConfidenceScoreReviewEnabled,isBoundingBoxEnabled,itemType,onEdit,onSelectMetadataField,selectedMetadataFieldId,taxonomyNodeFetcher,templateInstance},templateInstance.id))});export{MetadataInstanceList as t};
@@ -1 +1 @@
1
- import{MetadataEmptyState}from"../esm/lib/components/metadata-empty-state/metadata-empty-state.js";import{useAutofill}from"../esm/lib/utils/autofill-context.js";import{getFieldsNeedingReview}from"../esm/lib/utils/confidence-score/get-fields-needing-review.js";import{MetadataInstanceReviewNotice}from"../esm/lib/components/metadata-instance-review-notice/metadata-instance-review-notice.js";import{t as MetadataInstanceContent}from"./metadata-instance-content.js";import{t as MetadataInstanceFooter}from"./metadata-instance-footer.js";import{t as MetadataInstanceHeader}from"./metadata-instance-header.js";import{useState}from"react";import{Fragment,jsx,jsxs}from"react/jsx-runtime";import{Card,Divider}from"@box/blueprint-web";import '../styles/metadata-instance.css';var metadata_instance_module_default={topDivider:`_topDivider_1xnom_1`,reviewNotice:`_reviewNotice_1xnom_5`,bottomDivider:`_bottomDivider_1xnom_9`},MetadataInstance=({areAiSuggestionsAvailable,isAiSuggestionsFeatureEnabled,isBetaLanguageEnabled,onEdit,onSelectMetadataField,selectedMetadataFieldId,templateInstance,taxonomyNodeFetcher,isAdvancedExtractAgentEnabled=!1,isConfidenceScoreReviewEnabled=!1,isBoundingBoxEnabled=!1})=>{let metadataFields=templateInstance.fields,hasNonEmptyValue=field=>!field.value||Array.isArray(field.value)&&field.value.length===0,areAllValuesEmpty=metadataFields.every(hasNonEmptyValue),areSomeValuesEmpty=metadataFields.some(hasNonEmptyValue),hasFields=metadataFields.length>0,fieldsNeedingReviewCount=getFieldsNeedingReview(metadataFields).length,shouldShowReviewNotice=isConfidenceScoreReviewEnabled&&fieldsNeedingReviewCount>0&&templateInstance.canEdit,[shouldHideEmptyValues,setShouldHideEmptyValues]=useState(!0),{getAiSuggestions}=useAutofill();return jsxs(Card,{children:[jsx(MetadataInstanceHeader,{areAiSuggestionsAvailable,canEdit:templateInstance.canEdit,isAdvancedExtractAgentEnabled,isAiSuggestionsFeatureEnabled,isBetaLanguageEnabled,onAutofill:agentId=>{onEdit(templateInstance),getAiSuggestions(templateInstance.templateKey,templateInstance.scope,agentId)},onEdit:()=>onEdit(templateInstance),templateName:templateInstance?.displayName}),jsx(Divider,{className:metadata_instance_module_default.topDivider}),shouldShowReviewNotice&&jsx(`div`,{className:metadata_instance_module_default.reviewNotice,children:jsx(MetadataInstanceReviewNotice,{fieldsNeedingReviewCount,onTextToggleClick:()=>{onEdit(templateInstance,!0)}})}),shouldHideEmptyValues&&areAllValuesEmpty?jsx(MetadataEmptyState,{isAnyEmptyValueHidden:hasFields,isBoxAiSuggestionsFeatureEnabled:isAiSuggestionsFeatureEnabled,level:`instance`,onShowEmptyValues:()=>setShouldHideEmptyValues(!1)}):jsxs(Fragment,{children:[jsx(MetadataInstanceContent,{isConfidenceScoreReviewEnabled,isBoundingBoxEnabled,onSelectMetadataField,selectedMetadataFieldId,shouldHideEmptyValues,taxonomyNodeFetcher,templateInstance}),areSomeValuesEmpty&&jsxs(Fragment,{children:[jsx(Divider,{className:metadata_instance_module_default.bottomDivider}),jsx(MetadataInstanceFooter,{isAnyEmptyValueHidden:shouldHideEmptyValues,onHideEmptyValues:()=>setShouldHideEmptyValues(!0),onShowEmptyValues:()=>setShouldHideEmptyValues(!1)})]})]})]})};export{MetadataInstance as t};
1
+ import{MetadataEmptyState}from"../esm/lib/components/metadata-empty-state/metadata-empty-state.js";import{useAutofill}from"../esm/lib/utils/autofill-context.js";import{isCascadePolicyEnabled}from"../esm/lib/utils/cascade-policy.js";import{getFieldsNeedingReview}from"../esm/lib/utils/confidence-score/get-fields-needing-review.js";import{MetadataInstanceCascadeNotice}from"../esm/lib/components/metadata-instance-list/subcomponents/metadata-instance-cascade-notice/metadata-instance-cascade-notice.js";import{MetadataInstanceReviewNotice}from"../esm/lib/components/metadata-instance-review-notice/metadata-instance-review-notice.js";import{t as MetadataInstanceContent}from"./metadata-instance-content.js";import{t as MetadataInstanceFooter}from"./metadata-instance-footer.js";import{t as MetadataInstanceHeader}from"./metadata-instance-header.js";import{useState}from"react";import{Fragment,jsx,jsxs}from"react/jsx-runtime";import{Card,Divider}from"@box/blueprint-web";import '../styles/metadata-instance.css';var metadata_instance_module_default={topDivider:`_topDivider_1x96u_1`,reviewNotice:`_reviewNotice_1x96u_5`,cascadeNotice:`_cascadeNotice_1x96u_9`,bottomDivider:`_bottomDivider_1x96u_13`},MetadataInstance=({itemType=`file`,areAiSuggestionsAvailable,isAiSuggestionsFeatureEnabled,isBetaLanguageEnabled,onEdit,onSelectMetadataField,selectedMetadataFieldId,templateInstance,taxonomyNodeFetcher,isAdvancedExtractAgentEnabled=!1,isConfidenceScoreReviewEnabled=!1,isBoundingBoxEnabled=!1})=>{let metadataFields=templateInstance.fields,isCascaded=itemType===`folder`&&isCascadePolicyEnabled(templateInstance.cascadePolicy),hasNonEmptyValue=field=>!field.value||Array.isArray(field.value)&&field.value.length===0,areAllValuesEmpty=metadataFields.every(hasNonEmptyValue),areSomeValuesEmpty=metadataFields.some(hasNonEmptyValue),hasFields=metadataFields.length>0,fieldsNeedingReviewCount=getFieldsNeedingReview(metadataFields).length,shouldShowReviewNotice=isConfidenceScoreReviewEnabled&&fieldsNeedingReviewCount>0&&templateInstance.canEdit,[shouldHideEmptyValues,setShouldHideEmptyValues]=useState(!0),{getAiSuggestions}=useAutofill();return jsxs(Card,{children:[jsx(MetadataInstanceHeader,{areAiSuggestionsAvailable,canEdit:templateInstance.canEdit,isAdvancedExtractAgentEnabled,isAiSuggestionsFeatureEnabled,isBetaLanguageEnabled,isCascaded,itemType,onAutofill:agentId=>{onEdit(templateInstance),getAiSuggestions(templateInstance.templateKey,templateInstance.scope,agentId)},onEdit:()=>onEdit(templateInstance),templateName:templateInstance?.displayName}),jsx(Divider,{className:metadata_instance_module_default.topDivider}),isCascaded&&jsx(`div`,{className:metadata_instance_module_default.cascadeNotice,children:jsx(MetadataInstanceCascadeNotice,{})}),shouldShowReviewNotice&&jsx(`div`,{className:metadata_instance_module_default.reviewNotice,children:jsx(MetadataInstanceReviewNotice,{fieldsNeedingReviewCount,onTextToggleClick:()=>{onEdit(templateInstance,!0)}})}),shouldHideEmptyValues&&areAllValuesEmpty?jsx(MetadataEmptyState,{isAnyEmptyValueHidden:hasFields,isBoxAiSuggestionsFeatureEnabled:isAiSuggestionsFeatureEnabled,level:`instance`,onShowEmptyValues:()=>setShouldHideEmptyValues(!1)}):jsxs(Fragment,{children:[jsx(MetadataInstanceContent,{isConfidenceScoreReviewEnabled,isBoundingBoxEnabled,onSelectMetadataField,selectedMetadataFieldId,shouldHideEmptyValues,taxonomyNodeFetcher,templateInstance}),areSomeValuesEmpty&&jsxs(Fragment,{children:[jsx(Divider,{className:metadata_instance_module_default.bottomDivider}),jsx(MetadataInstanceFooter,{isAnyEmptyValueHidden:shouldHideEmptyValues,onHideEmptyValues:()=>setShouldHideEmptyValues(!0),onShowEmptyValues:()=>setShouldHideEmptyValues(!1)})]})]})]})};export{MetadataInstance as t};
@@ -1 +1 @@
1
- var UpdateMode=function(UpdateMode){return UpdateMode.ClearAndReplace=`clearAndReplace`,UpdateMode.RemoveEntered=`removeEntered`,UpdateMode.ReplaceEntered=`replaceEntered`,UpdateMode.Append=`append`,UpdateMode}({}),AiSuggestionState=function(AiSuggestionState){return AiSuggestionState.Initial=`INITIAL`,AiSuggestionState.Pending=`PENDING`,AiSuggestionState.Applied=`APPLIED`,AiSuggestionState}({}),ConfidenceLevel=function(ConfidenceLevel){return ConfidenceLevel.Low=`LOW`,ConfidenceLevel.Medium=`MEDIUM`,ConfidenceLevel.High=`HIGH`,ConfidenceLevel}({});export{ConfidenceLevel as n,UpdateMode as r,AiSuggestionState as t};
1
+ var UpdateMode=function(UpdateMode){return UpdateMode.ClearAndReplace=`clearAndReplace`,UpdateMode.RemoveEntered=`removeEntered`,UpdateMode.ReplaceEntered=`replaceEntered`,UpdateMode.Append=`append`,UpdateMode}({}),AiSuggestionState=function(AiSuggestionState){return AiSuggestionState.Initial=`INITIAL`,AiSuggestionState.Pending=`PENDING`,AiSuggestionState.Applied=`APPLIED`,AiSuggestionState}({}),ConfidenceLevel=function(ConfidenceLevel){return ConfidenceLevel.Low=`LOW`,ConfidenceLevel.Medium=`MEDIUM`,ConfidenceLevel.High=`HIGH`,ConfidenceLevel}({}),CASCADE_POLICY_TYPE_AI_EXTRACT=`ai_extract`;export{UpdateMode as i,CASCADE_POLICY_TYPE_AI_EXTRACT as n,ConfidenceLevel as r,AiSuggestionState as t};
@@ -1 +1 @@
1
- import{MULTI_VALUE_DEFAULT_OPTION}from"../esm/lib/components/metadata-editor-fields/components/update-mode-field-wrapper/mulitple-values-utils.js";import{r as UpdateMode}from"./types.js";import{messages}from"../esm/lib/components/metadata-editor-fields/components/update-mode-field-wrapper/messages.js";import React from"react";import{useIntl}from"react-intl";import{jsx,jsxs}from"react/jsx-runtime";import clsx from"clsx";import{IconButton,Radio}from"@box/blueprint-web";import{Settings,XMark}from"@box/blueprint-web-assets/icons/Fill";import{Field,getIn,useFormikContext}from"formik";import '../styles/update-mode-field-wrapper.css';var update_mode_field_wrapper_module_default={wrapperContianer:`_wrapperContianer_19nqy_1`,fieldContainer:`_fieldContainer_19nqy_6`,field:`_field_19nqy_6`,collapseButton:`_collapseButton_19nqy_14`,radioContainer:`_radioContainer_19nqy_20`,additionalFieldContainer:`_additionalFieldContainer_19nqy_23`,hidden:`_hidden_19nqy_27`},shouldShowAdditionalInput=updateMode=>updateMode===UpdateMode.ReplaceEntered,shouldShowAppendOption=(fieldType,isTaxonomyMultiSelect)=>fieldType===`string`||fieldType===`multiSelect`||isTaxonomyMultiSelect,UpdateModeFieldWrapper=({children,fieldNamePrefix,fieldType,isTaxonomyMultiSelect})=>{let{setFieldValue,values}=useFormikContext(),intl=useIntl(),updateModeFieldName=`${fieldNamePrefix}.updateMode.mode`,updateModeValue=getIn(values,updateModeFieldName),fieldEl=children&&React.Children.only(children),fieldOptions=getIn(values,`${fieldNamePrefix}.options`,[]).filter(option=>option.id!==MULTI_VALUE_DEFAULT_OPTION.id).map(({key})=>key),isOpened=getIn(values,`${fieldNamePrefix}.updateMode.isOpened`);return jsxs(`div`,{className:update_mode_field_wrapper_module_default.wrapperContianer,children:[jsxs(`div`,{className:update_mode_field_wrapper_module_default.fieldContainer,children:[jsx(`span`,{className:update_mode_field_wrapper_module_default.field,children}),jsx(IconButton,{"aria-label":intl.formatMessage(messages.toggleUpdateModeSelectiorAriaLabel),className:update_mode_field_wrapper_module_default.collapseButton,"data-testid":`${fieldEl.props.label}-update-mode-toggle`,icon:isOpened?XMark:Settings,onClick:()=>{setFieldValue(`${fieldNamePrefix}.updateMode.isOpened`,!isOpened)},size:`small`,"data-target-id":`IconButton-toggleUpdateModeSelectiorAriaLabel`})]}),jsxs(`div`,{className:clsx(update_mode_field_wrapper_module_default.radioContainer,{[update_mode_field_wrapper_module_default.hidden]:!isOpened}),children:[jsx(Field,{name:`${fieldNamePrefix}.updateMode.mode`,children:({field})=>jsxs(Radio.Group,{"data-testid":`${fieldEl.props.label}-radio-group`,loop:!0,onValueChange:value=>setFieldValue(updateModeFieldName,value),orientation:`vertical`,value:field.value,children:[shouldShowAppendOption(fieldType,isTaxonomyMultiSelect)&&jsx(Radio.Item,{label:intl.formatMessage(messages.append),value:UpdateMode.Append}),jsx(Radio.Item,{label:intl.formatMessage(messages.clearAndReplace),value:UpdateMode.ClearAndReplace}),jsx(Radio.Item,{label:intl.formatMessage(messages.removeEntered),value:UpdateMode.RemoveEntered}),jsx(Radio.Item,{label:intl.formatMessage(messages.replaceEntered),value:UpdateMode.ReplaceEntered})]})}),shouldShowAdditionalInput(updateModeValue)&&fieldEl&&jsx(`div`,{className:update_mode_field_wrapper_module_default.additionalFieldContainer,children:React.cloneElement(fieldEl,{updateModePrefix:`${fieldNamePrefix}.updateMode`,options:fieldOptions,label:intl.formatMessage(messages.with)})})]})]})};UpdateModeFieldWrapper.displayName=`UpdateModeFieldWrapper`;export{UpdateModeFieldWrapper as t};
1
+ import{MULTI_VALUE_DEFAULT_OPTION}from"../esm/lib/components/metadata-editor-fields/components/update-mode-field-wrapper/mulitple-values-utils.js";import{i as UpdateMode}from"./types.js";import{messages}from"../esm/lib/components/metadata-editor-fields/components/update-mode-field-wrapper/messages.js";import React from"react";import{useIntl}from"react-intl";import{jsx,jsxs}from"react/jsx-runtime";import clsx from"clsx";import{IconButton,Radio}from"@box/blueprint-web";import{Settings,XMark}from"@box/blueprint-web-assets/icons/Fill";import{Field,getIn,useFormikContext}from"formik";import '../styles/update-mode-field-wrapper.css';var update_mode_field_wrapper_module_default={wrapperContianer:`_wrapperContianer_19nqy_1`,fieldContainer:`_fieldContainer_19nqy_6`,field:`_field_19nqy_6`,collapseButton:`_collapseButton_19nqy_14`,radioContainer:`_radioContainer_19nqy_20`,additionalFieldContainer:`_additionalFieldContainer_19nqy_23`,hidden:`_hidden_19nqy_27`},shouldShowAdditionalInput=updateMode=>updateMode===UpdateMode.ReplaceEntered,shouldShowAppendOption=(fieldType,isTaxonomyMultiSelect)=>fieldType===`string`||fieldType===`multiSelect`||isTaxonomyMultiSelect,UpdateModeFieldWrapper=({children,fieldNamePrefix,fieldType,isTaxonomyMultiSelect})=>{let{setFieldValue,values}=useFormikContext(),intl=useIntl(),updateModeFieldName=`${fieldNamePrefix}.updateMode.mode`,updateModeValue=getIn(values,updateModeFieldName),fieldEl=children&&React.Children.only(children),fieldOptions=getIn(values,`${fieldNamePrefix}.options`,[]).filter(option=>option.id!==MULTI_VALUE_DEFAULT_OPTION.id).map(({key})=>key),isOpened=getIn(values,`${fieldNamePrefix}.updateMode.isOpened`);return jsxs(`div`,{className:update_mode_field_wrapper_module_default.wrapperContianer,children:[jsxs(`div`,{className:update_mode_field_wrapper_module_default.fieldContainer,children:[jsx(`span`,{className:update_mode_field_wrapper_module_default.field,children}),jsx(IconButton,{"aria-label":intl.formatMessage(messages.toggleUpdateModeSelectiorAriaLabel),className:update_mode_field_wrapper_module_default.collapseButton,"data-testid":`${fieldEl.props.label}-update-mode-toggle`,icon:isOpened?XMark:Settings,onClick:()=>{setFieldValue(`${fieldNamePrefix}.updateMode.isOpened`,!isOpened)},size:`small`,"data-target-id":`IconButton-toggleUpdateModeSelectiorAriaLabel`})]}),jsxs(`div`,{className:clsx(update_mode_field_wrapper_module_default.radioContainer,{[update_mode_field_wrapper_module_default.hidden]:!isOpened}),children:[jsx(Field,{name:`${fieldNamePrefix}.updateMode.mode`,children:({field})=>jsxs(Radio.Group,{"data-testid":`${fieldEl.props.label}-radio-group`,loop:!0,onValueChange:value=>setFieldValue(updateModeFieldName,value),orientation:`vertical`,value:field.value,children:[shouldShowAppendOption(fieldType,isTaxonomyMultiSelect)&&jsx(Radio.Item,{label:intl.formatMessage(messages.append),value:UpdateMode.Append}),jsx(Radio.Item,{label:intl.formatMessage(messages.clearAndReplace),value:UpdateMode.ClearAndReplace}),jsx(Radio.Item,{label:intl.formatMessage(messages.removeEntered),value:UpdateMode.RemoveEntered}),jsx(Radio.Item,{label:intl.formatMessage(messages.replaceEntered),value:UpdateMode.ReplaceEntered})]})}),shouldShowAdditionalInput(updateModeValue)&&fieldEl&&jsx(`div`,{className:update_mode_field_wrapper_module_default.additionalFieldContainer,children:React.cloneElement(fieldEl,{updateModePrefix:`${fieldNamePrefix}.updateMode`,options:fieldOptions,label:intl.formatMessage(messages.with)})})]})]})};UpdateModeFieldWrapper.displayName=`UpdateModeFieldWrapper`;export{UpdateModeFieldWrapper as t};
package/dist/esm/index.js CHANGED
@@ -1 +1 @@
1
- import{FilterDropdownMenu}from"./lib/components/filter-dropdown-menu/index.js";import{AddMetadataTemplateDropdown}from"./lib/components/add-metadata-template-dropdown/add-metadata-template-dropdown.js";import{t as AddMetadataTemplateDropdownWithBrowser}from"../chunks/add-metadata-template-dropdown-with-browser.js";import"./lib/components/add-metadata-template-dropdown/index.js";import{t as ComboboxWithApiPagination}from"../chunks/combobox-with-api-pagination.js";import"./lib/components/combobox-with-api-pagination/index.js";import{t as FilterInstancesDropdown}from"../chunks/filter-instances-dropdown.js";import"./lib/components/filter-instances-dropdown/index.js";import{MULTI_VALUE_DEFAULT_OPTION,MULTI_VALUE_DEFAULT_TAXONOMY_OPTION,MULTI_VALUE_DEFAULT_VALUE}from"./lib/components/metadata-editor-fields/components/update-mode-field-wrapper/mulitple-values-utils.js";import{MetadataEmptyState}from"./lib/components/metadata-empty-state/metadata-empty-state.js";import{AutofillContext,AutofillContextProvider,TIMEOUT_10_SECONDS,useAutofill}from"./lib/utils/autofill-context.js";import{n as ConfidenceLevel,r as UpdateMode,t as AiSuggestionState}from"../chunks/types.js";import{UnsavedChangesModal}from"./lib/components/unsaved-changes-modal/unsaved-changes-modal.js";import{t as CustomInstanceNewField}from"../chunks/custom-instance-new-field.js";import{t as DeleteConfirmationModal}from"../chunks/delete-confirmation-modal.js";import{r as JSONPatchOp}from"../chunks/utils2.js";import{t as MetadataInstanceFormAutofillButton}from"../chunks/metadata-instance-form-autofill-button.js";import{t as MetadataInstanceFormHeader}from"../chunks/metadata-instance-form-header.js";import{MetadataInstanceForm}from"./lib/components/metadata-instance-editor/index.js";import{t as MetadataInstanceHeader}from"../chunks/metadata-instance-header.js";import{MetadataInstance,MetadataInstanceList}from"./lib/components/metadata-instance-list/index.js";import{defaultInitialValues,defaultMetadataValueMap}from"./lib/defaults.js";import{withApiWrapper}from"./lib/utils/api-wrapper.js";export{AddMetadataTemplateDropdown,AddMetadataTemplateDropdownWithBrowser,AiSuggestionState,AutofillContext,AutofillContextProvider,ComboboxWithApiPagination,ConfidenceLevel,CustomInstanceNewField,DeleteConfirmationModal,FilterDropdownMenu,FilterInstancesDropdown,JSONPatchOp,MULTI_VALUE_DEFAULT_OPTION,MULTI_VALUE_DEFAULT_TAXONOMY_OPTION,MULTI_VALUE_DEFAULT_VALUE,MetadataEmptyState,MetadataInstance,MetadataInstanceForm,MetadataInstanceFormAutofillButton,MetadataInstanceFormHeader,MetadataInstanceHeader,MetadataInstanceList,TIMEOUT_10_SECONDS,UnsavedChangesModal,UpdateMode,defaultInitialValues,defaultMetadataValueMap,useAutofill,withApiWrapper};
1
+ import{FilterDropdownMenu}from"./lib/components/filter-dropdown-menu/index.js";import{AddMetadataTemplateDropdown}from"./lib/components/add-metadata-template-dropdown/add-metadata-template-dropdown.js";import{t as AddMetadataTemplateDropdownWithBrowser}from"../chunks/add-metadata-template-dropdown-with-browser.js";import"./lib/components/add-metadata-template-dropdown/index.js";import{t as ComboboxWithApiPagination}from"../chunks/combobox-with-api-pagination.js";import"./lib/components/combobox-with-api-pagination/index.js";import{t as FilterInstancesDropdown}from"../chunks/filter-instances-dropdown.js";import"./lib/components/filter-instances-dropdown/index.js";import{MULTI_VALUE_DEFAULT_OPTION,MULTI_VALUE_DEFAULT_TAXONOMY_OPTION,MULTI_VALUE_DEFAULT_VALUE}from"./lib/components/metadata-editor-fields/components/update-mode-field-wrapper/mulitple-values-utils.js";import{MetadataEmptyState}from"./lib/components/metadata-empty-state/metadata-empty-state.js";import{AutofillContext,AutofillContextProvider,TIMEOUT_10_SECONDS,useAutofill}from"./lib/utils/autofill-context.js";import{i as UpdateMode,n as CASCADE_POLICY_TYPE_AI_EXTRACT,r as ConfidenceLevel,t as AiSuggestionState}from"../chunks/types.js";import{getCustomExtractAgentId,isCascadePolicyEnabled,isCustomExtractAgentPolicy,toCascadePolicySelection}from"./lib/utils/cascade-policy.js";import{UnsavedChangesModal}from"./lib/components/unsaved-changes-modal/unsaved-changes-modal.js";import{t as CustomInstanceNewField}from"../chunks/custom-instance-new-field.js";import{t as DeleteConfirmationModal}from"../chunks/delete-confirmation-modal.js";import{r as JSONPatchOp}from"../chunks/utils2.js";import{MetadataInstanceCascadeNotice}from"./lib/components/metadata-instance-list/subcomponents/metadata-instance-cascade-notice/metadata-instance-cascade-notice.js";import{t as CascadePolicyEditor}from"../chunks/cascade-policy-editor.js";import{CustomExtractAgentNotice}from"./lib/components/metadata-instance-editor/subcomponents/custom-extract-agent-notice/custom-extract-agent-notice.js";import{t as MetadataInstanceFormAutofillButton}from"../chunks/metadata-instance-form-autofill-button.js";import{t as MetadataInstanceFormHeader}from"../chunks/metadata-instance-form-header.js";import{MetadataInstanceForm}from"./lib/components/metadata-instance-editor/index.js";import{t as MetadataInstanceHeader}from"../chunks/metadata-instance-header.js";import{MetadataInstance,MetadataInstanceList}from"./lib/components/metadata-instance-list/index.js";import{defaultInitialValues,defaultMetadataValueMap}from"./lib/defaults.js";import{withApiWrapper}from"./lib/utils/api-wrapper.js";export{AddMetadataTemplateDropdown,AddMetadataTemplateDropdownWithBrowser,AiSuggestionState,AutofillContext,AutofillContextProvider,CASCADE_POLICY_TYPE_AI_EXTRACT,CascadePolicyEditor,ComboboxWithApiPagination,ConfidenceLevel,CustomExtractAgentNotice,CustomInstanceNewField,DeleteConfirmationModal,FilterDropdownMenu,FilterInstancesDropdown,JSONPatchOp,MULTI_VALUE_DEFAULT_OPTION,MULTI_VALUE_DEFAULT_TAXONOMY_OPTION,MULTI_VALUE_DEFAULT_VALUE,MetadataEmptyState,MetadataInstance,MetadataInstanceCascadeNotice,MetadataInstanceForm,MetadataInstanceFormAutofillButton,MetadataInstanceFormHeader,MetadataInstanceHeader,MetadataInstanceList,TIMEOUT_10_SECONDS,UnsavedChangesModal,UpdateMode,defaultInitialValues,defaultMetadataValueMap,getCustomExtractAgentId,isCascadePolicyEnabled,isCustomExtractAgentPolicy,toCascadePolicySelection,useAutofill,withApiWrapper};
@@ -1 +1 @@
1
- import{withAnalytics}from"../../utils/analytics/with-analytics.js";import{t as CustomInstanceNewField}from"../../../../chunks/custom-instance-new-field.js";import{t as DeleteConfirmationModal}from"../../../../chunks/delete-confirmation-modal.js";import{r as JSONPatchOp}from"../../../../chunks/utils2.js";import{t as MetadataInstanceFormAutofillButton}from"../../../../chunks/metadata-instance-form-autofill-button.js";import{t as MetadataInstanceFormHeader}from"../../../../chunks/metadata-instance-form-header.js";import{MetadataInstanceForm as MetadataInstanceForm$1}from"./subcomponents/metadata-instance-form/metadata-instance-form.js";var MetadataInstanceForm=withAnalytics(MetadataInstanceForm$1);export{CustomInstanceNewField,DeleteConfirmationModal,JSONPatchOp,MetadataInstanceForm,MetadataInstanceFormAutofillButton,MetadataInstanceFormHeader};
1
+ import{withAnalytics}from"../../utils/analytics/with-analytics.js";import{t as CustomInstanceNewField}from"../../../../chunks/custom-instance-new-field.js";import{t as DeleteConfirmationModal}from"../../../../chunks/delete-confirmation-modal.js";import{r as JSONPatchOp}from"../../../../chunks/utils2.js";import{t as CascadePolicyEditor}from"../../../../chunks/cascade-policy-editor.js";import{CustomExtractAgentNotice}from"./subcomponents/custom-extract-agent-notice/custom-extract-agent-notice.js";import{t as MetadataInstanceFormAutofillButton}from"../../../../chunks/metadata-instance-form-autofill-button.js";import{t as MetadataInstanceFormHeader}from"../../../../chunks/metadata-instance-form-header.js";import{MetadataInstanceForm as MetadataInstanceForm$1}from"./subcomponents/metadata-instance-form/metadata-instance-form.js";var MetadataInstanceForm=withAnalytics(MetadataInstanceForm$1);export{CascadePolicyEditor,CustomExtractAgentNotice,CustomInstanceNewField,DeleteConfirmationModal,JSONPatchOp,MetadataInstanceForm,MetadataInstanceFormAutofillButton,MetadataInstanceFormHeader};
@@ -0,0 +1 @@
1
+ import{t as CascadePolicyEditor}from"../../../../../../chunks/cascade-policy-editor.js";export{CascadePolicyEditor};
@@ -0,0 +1 @@
1
+ import{defineMessages}from"react-intl";var messages=defineMessages({enableCascadePolicy:{id:`metadataEditor.metadataInstanceEditor.cascadePolicyEditor.enableCascadePolicy`,defaultMessage:`Enable Cascade Policy`},applyCascadePolicyText:{id:`metadataEditor.metadataInstanceEditor.cascadePolicyEditor.applyCascadePolicyText`,defaultMessage:`Apply template and its values to all new and existing items in this folder and its subfolders.`},cannotApplyCascadePolicyText:{id:`metadataEditor.metadataInstanceEditor.cascadePolicyEditor.cannotApplyCascadePolicyText`,defaultMessage:`Cascade policy cannot be applied to custom metadata at this time.`},cascadePolicyLearnMore:{id:`metadataEditor.metadataInstanceEditor.cascadePolicyEditor.cascadePolicyLearnMore`,defaultMessage:`Learn more`},cascadePolicyOptionsDisabledNotice:{id:`metadataEditor.metadataInstanceEditor.cascadePolicyEditor.cascadePolicyOptionsDisabledNotice`,defaultMessage:`This cascade policy cannot be edited. To modify it, deactivate the current policy and then re-enable it to set up a new one.`},cascadePolicyOptionsDisabledNoticeIconAriaLabel:{id:`metadataEditor.metadataInstanceEditor.cascadePolicyEditor.cascadePolicyOptionsDisabledNoticeIconAriaLabel`,defaultMessage:`Disabled cascade options information`},cascadePolicyModeQuestion:{id:`metadataEditor.metadataInstanceEditor.cascadePolicyEditor.cascadePolicyModeQuestion`,defaultMessage:`In the case of conflicts when applying this template and its values to existing items, what would you like to do? This is a one time action.`},cascadePolicyModeLegend:{id:`metadataEditor.metadataInstanceEditor.cascadePolicyEditor.cascadePolicyModeLegend`,defaultMessage:`Conflict resolution`},operationNotImmediate:{id:`metadataEditor.metadataInstanceEditor.cascadePolicyEditor.operationNotImmediate`,defaultMessage:`This operation is not immediate and may take some time.`},operationNotImmediateIconAriaLabel:{id:`metadataEditor.metadataInstanceEditor.cascadePolicyEditor.operationNotImmediateIconAriaLabel`,defaultMessage:`Warning`},cascadePolicySkipMode:{id:`metadataEditor.metadataInstanceEditor.cascadePolicyEditor.cascadePolicySkipMode`,defaultMessage:`Skip and keep all existing template values`},cascadePolicyOverwriteMode:{id:`metadataEditor.metadataInstanceEditor.cascadePolicyEditor.cascadePolicyOverwriteMode`,defaultMessage:`Overwrite all existing template values`}});export{messages as default};
@@ -0,0 +1 @@
1
+ import{getCustomExtractAgentId}from"../../../../utils/cascade-policy.js";import messages from"./messages.js";import{useIntl}from"react-intl";import{jsx}from"react/jsx-runtime";import{ActionableInlineNotice}from"@box/blueprint-web";import{Lock}from"@box/blueprint-web-assets/icons/Line";var CustomExtractAgentNotice=({agentConfiguration,onManageExtractAgent})=>{let intl=useIntl(),agentId=getCustomExtractAgentId(agentConfiguration);return jsx(ActionableInlineNotice,{"data-target-id":`ActionableInlineNotice-metadataEditorCustomExtractAgent`,icon:Lock,iconAriaLabel:intl.formatMessage(messages.customExtractAgentNoticeIconAriaLabel),text:intl.formatMessage(messages.customExtractAgentNoticeDescription),children:agentId&&onManageExtractAgent?jsx(ActionableInlineNotice.PrimaryAction,{"data-target-id":`Button-metadataEditorManageExtractAgent`,onClick:()=>onManageExtractAgent(agentId),children:intl.formatMessage(messages.customExtractAgentManageButton)}):void 0})};export{CustomExtractAgentNotice};
@@ -0,0 +1 @@
1
+ import{defineMessages}from"react-intl";var messages=defineMessages({customExtractAgentNoticeDescription:{id:`metadataEditor.metadataInstanceEditor.customExtractAgentNotice.description`,defaultMessage:`This policy is managed by an agent. Manage the agent to change the configuration.`},customExtractAgentManageButton:{id:`metadataEditor.metadataInstanceEditor.customExtractAgentNotice.manageButton`,defaultMessage:`Manage agent`},customExtractAgentNoticeIconAriaLabel:{id:`metadataEditor.metadataInstanceEditor.customExtractAgentNotice.iconAriaLabel`,defaultMessage:`Locked`}});export{messages as default};
@@ -1 +1 @@
1
- import{TEMPLATE_CUSTOM_PROPERTIES}from"../../../../constants.js";import{MetadataEmptyState}from"../../../metadata-empty-state/metadata-empty-state.js";import{useMetadataEditorAnalytics}from"../../../../utils/analytics/analytics-context.js";import{useAutofill}from"../../../../utils/autofill-context.js";import{TemplateInstance}from"../../../metadata-editor-fields/metadata-editor-fields.js";import{UnsavedChangesModal}from"../../../unsaved-changes-modal/unsaved-changes-modal.js";import{t as AutofillOverlay}from"../../../../../../chunks/autofill-overlay.js";import{t as CustomInstance}from"../../../../../../chunks/custom-instance.js";import{t as DeleteConfirmationModal}from"../../../../../../chunks/delete-confirmation-modal.js";import{t as createJSONPatch}from"../../../../../../chunks/utils2.js";import{n as metadata_instance_form_module_default,t as MetadataInstanceFormCardWrapper}from"../../../../../../chunks/metadata-instance-form-card-wrapper.js";import{useEffect,useMemo,useRef,useState}from"react";import{jsx,jsxs}from"react/jsx-runtime";import clsx from"clsx";import{Form,Formik}from"formik";import isEqual from"lodash/isEqual";var FormikObserver=({dirty,onChange,values})=>{let prevValuesRef=useRef(values);return dirty&&!isEqual(prevValuesRef.current.metadata.fields,values.metadata.fields)&&(prevValuesRef.current=values,onChange(values)),null},MetadataInstanceForm=props=>{let{itemType=`file`,areAiSuggestionsAvailable,customRef,isLargeFile,errorCode,isAiSuggestionsFeatureEnabled,isAdvancedExtractAgentEnabled=!1,isBetaLanguageEnabled,isDeleteButtonDisabled,isDeleteConfirmationModalCheckboxEnabled,isMultilevelTaxonomyFieldEnabled,isTaxonomyPickerEnabled,createTaxonomyItemsService,isUnsavedChangesModalOpen=!1,MetadataInstanceFormCustomWrapper,selectedTemplateInstance,onCancel,onChange,onDelete,onDiscardUnsavedChanges,onSubmit,onToggleReviewFilter,setIsUnsavedChangesModalOpen,shouldShowOnlyReviewFields=!1,taxonomyOptionsFetcher,isConfidenceScoreReviewEnabled=!1,isBoundingBoxEnabled=!1,onSelectMetadataField,selectedMetadataFieldId,isUserFieldEnabled=!1,fetchUsers,fetchAvatarUrls,resolveUsersByEmail}=props,isBoundingBoxOrConfidenceScoreReviewEnabled=isBoundingBoxEnabled||isConfidenceScoreReviewEnabled,FormWrapper=MetadataInstanceFormCustomWrapper??MetadataInstanceFormCardWrapper,[isDeleteConfirmationModalOpen,setIsDeleteConfirmationModalOpen]=useState(!1),{isFetchingSuggestions,isLongLoading,getAiSuggestions,clearState,suggestions}=useAutofill(),{trackEvent}=useMetadataEditorAnalytics();useEffect(()=>()=>{clearState()},[clearState,selectedTemplateInstance?.id]);let isCustomMetadata=selectedTemplateInstance?.templateKey===TEMPLATE_CUSTOM_PROPERTIES,handleSubmit=async values=>{await onSubmit(values,createJSONPatch(values,selectedTemplateInstance))},handleCancel=isFormDirty=>{isFormDirty?setIsUnsavedChangesModalOpen(!0):onCancel()},handleDelete=()=>{setIsDeleteConfirmationModalOpen(!0)},initialValues={metadata:{...selectedTemplateInstance}},formRef=useRef(null),[portalElement,setPortalElement]=useState(null);useEffect(()=>{setPortalElement(customRef??formRef.current)},[customRef,selectedTemplateInstance?.templateKey,selectedTemplateInstance?.scope]);let content=useMemo(()=>{let isEmpty=selectedTemplateInstance?.fields.length===0;if(isCustomMetadata)return jsx(CustomInstance,{isLoading:isFetchingSuggestions});if(isEmpty)return jsx(MetadataEmptyState,{isBoxAiSuggestionsFeatureEnabled:isAiSuggestionsFeatureEnabled,level:`instance`});let showOverlay=!!(isFetchingSuggestions||errorCode);return jsxs(`div`,{className:clsx(metadata_instance_form_module_default.metadataInstanceFormContent,showOverlay&&metadata_instance_form_module_default.showOverlay,isBoundingBoxOrConfidenceScoreReviewEnabled&&metadata_instance_form_module_default.metadataInstanceFormContentReducedGap),children:[jsx(AutofillOverlay,{errorCode,isFetchingSuggestions,isLongLoading}),jsx(TemplateInstance,{disableForm:isFetchingSuggestions,isConfidenceScoreReviewEnabled,isBoundingBoxEnabled,isExternallyOwned:selectedTemplateInstance?.isExternallyOwned,isMultilevelTaxonomyFieldEnabled,isTaxonomyPickerEnabled,isUserFieldEnabled,createTaxonomyItemsService,onSelectMetadataField,selectedMetadataFieldId,portalElement:customRef??portalElement,shouldShowOnlyReviewFields,taxonomyOptionsFetcher,fetchAvatarUrls,fetchUsers,resolveUsersByEmail})]})},[selectedTemplateInstance?.fields.length,selectedTemplateInstance?.isExternallyOwned,isCustomMetadata,isFetchingSuggestions,isLongLoading,customRef,portalElement,taxonomyOptionsFetcher,isAiSuggestionsFeatureEnabled,isConfidenceScoreReviewEnabled,isBoundingBoxEnabled,isBoundingBoxOrConfidenceScoreReviewEnabled,isMultilevelTaxonomyFieldEnabled,isTaxonomyPickerEnabled,createTaxonomyItemsService,errorCode,shouldShowOnlyReviewFields,onSelectMetadataField,selectedMetadataFieldId,isUserFieldEnabled,fetchUsers,fetchAvatarUrls,resolveUsersByEmail]);return jsx(Formik,{initialValues,onSubmit:handleSubmit,children:({values,dirty})=>jsxs(Form,{children:[jsx(FormWrapper,{areAiSuggestionsAvailable,className:metadata_instance_form_module_default.metadataInstanceForm,formRef,formValues:values,getAiSuggestions,handleCancel,handleDelete,isAdvancedExtractAgentEnabled,isAiSuggestionsFeatureEnabled,isBetaLanguageEnabled,isConfidenceScoreReviewEnabled,isBoundingBoxEnabled,isDeleteButtonDisabled,isFetchingSuggestions,isFormDirty:dirty,isLargeFile,onToggleReviewFilter,selectedTemplateInstance,shouldShowOnlyReviewFields,suggestions,children:selectedTemplateInstance&&content}),onChange&&jsx(FormikObserver,{dirty,onChange,values}),jsx(UnsavedChangesModal,{onBackToEdit:()=>setIsUnsavedChangesModalOpen(!1),onDiscardChanges:onDiscardUnsavedChanges,open:isUnsavedChangesModalOpen,trackEvent}),jsx(DeleteConfirmationModal,{isCheckboxEnabled:isDeleteConfirmationModalCheckboxEnabled,itemType,onConfirm:()=>onDelete(selectedTemplateInstance),onDismiss:()=>setIsDeleteConfirmationModalOpen(!1),open:isDeleteConfirmationModalOpen,templateName:selectedTemplateInstance?.displayName})]})},`${selectedTemplateInstance?.scope}.${selectedTemplateInstance?.templateKey}`)};export{MetadataInstanceForm};
1
+ import{TEMPLATE_CUSTOM_PROPERTIES}from"../../../../constants.js";import{MetadataEmptyState}from"../../../metadata-empty-state/metadata-empty-state.js";import{useMetadataEditorAnalytics}from"../../../../utils/analytics/analytics-context.js";import{useAutofill}from"../../../../utils/autofill-context.js";import{isCascadePolicyEnabled,toCascadePolicySelection}from"../../../../utils/cascade-policy.js";import{TemplateInstance}from"../../../metadata-editor-fields/metadata-editor-fields.js";import{UnsavedChangesModal}from"../../../unsaved-changes-modal/unsaved-changes-modal.js";import{t as AutofillOverlay}from"../../../../../../chunks/autofill-overlay.js";import{t as CustomInstance}from"../../../../../../chunks/custom-instance.js";import{t as DeleteConfirmationModal}from"../../../../../../chunks/delete-confirmation-modal.js";import{t as createJSONPatch}from"../../../../../../chunks/utils2.js";import{n as metadata_instance_form_module_default,t as MetadataInstanceFormCardWrapper}from"../../../../../../chunks/metadata-instance-form-card-wrapper.js";import{useEffect,useMemo,useRef,useState}from"react";import{jsx,jsxs}from"react/jsx-runtime";import clsx from"clsx";import{Form,Formik}from"formik";import isEqual from"lodash/isEqual";var FormikObserver=({dirty,onChange,values})=>{let prevValuesRef=useRef(values);return dirty&&!isEqual(prevValuesRef.current.metadata.fields,values.metadata.fields)&&(prevValuesRef.current=values,onChange(values)),null},MetadataInstanceForm=props=>{let{itemType=`file`,areAiSuggestionsAvailable,customRef,isLargeFile,errorCode,isAiSuggestionsFeatureEnabled,isAdvancedExtractAgentEnabled=!1,isBetaLanguageEnabled,isDeleteButtonDisabled,isDeleteConfirmationModalCheckboxEnabled,isMultilevelTaxonomyFieldEnabled,isTaxonomyPickerEnabled,createTaxonomyItemsService,isUnsavedChangesModalOpen=!1,MetadataInstanceFormCustomWrapper,selectedTemplateInstance,onCancel,onCascadeModeChange,onCascadeToggle,onChange,onDelete,onDiscardUnsavedChanges,onSubmit,onToggleReviewFilter,setIsUnsavedChangesModalOpen,shouldShowOnlyReviewFields=!1,taxonomyOptionsFetcher,isConfidenceScoreReviewEnabled=!1,isBoundingBoxEnabled=!1,onSelectMetadataField,selectedMetadataFieldId,isUserFieldEnabled=!1,fetchUsers,fetchAvatarUrls,resolveUsersByEmail,onManageExtractAgent}=props,isBoundingBoxOrConfidenceScoreReviewEnabled=isBoundingBoxEnabled||isConfidenceScoreReviewEnabled,FormWrapper=MetadataInstanceFormCustomWrapper??MetadataInstanceFormCardWrapper,[isDeleteConfirmationModalOpen,setIsDeleteConfirmationModalOpen]=useState(!1),isCustomMetadata=selectedTemplateInstance?.templateKey===TEMPLATE_CUSTOM_PROPERTIES,canEditCascade=itemType===`folder`&&!isCustomMetadata&&selectedTemplateInstance?.cascadePolicy?.canEdit!==!1,cascadePolicyId=selectedTemplateInstance?.cascadePolicy?.id??null,instanceId=selectedTemplateInstance?.id??null,isAppliedCascadeEnabled=isCascadePolicyEnabled(selectedTemplateInstance?.cascadePolicy),[isCascadeEnabled,setIsCascadeEnabled]=useState(isAppliedCascadeEnabled),[cascadeMode,setCascadeMode]=useState(`skip`),[isConfiguringCascadeReplacement,setIsConfiguringCascadeReplacement]=useState(!1),{isFetchingSuggestions,isLongLoading,getAiSuggestions,clearState,suggestions}=useAutofill(),{trackEvent}=useMetadataEditorAnalytics();useEffect(()=>()=>{clearState()},[clearState,selectedTemplateInstance?.id]),useEffect(()=>{setIsCascadeEnabled(!!cascadePolicyId),setCascadeMode(`skip`),setIsConfiguringCascadeReplacement(!1)},[instanceId,cascadePolicyId]);let isApplyingCascade=canEditCascade&&isCascadeEnabled&&(!isAppliedCascadeEnabled||isConfiguringCascadeReplacement),isCascadeDirty=canEditCascade&&(isCascadeEnabled!==isAppliedCascadeEnabled||isConfiguringCascadeReplacement),cascadePolicySelection=canEditCascade?toCascadePolicySelection({cascadePolicy:selectedTemplateInstance?.cascadePolicy,isEnabled:isCascadeEnabled,overwrite:isApplyingCascade&&cascadeMode===`overwrite`}):void 0,resetCascadeSelection=()=>{setIsCascadeEnabled(isAppliedCascadeEnabled),setCascadeMode(`skip`),setIsConfiguringCascadeReplacement(!1)},handleCascadeToggle=isEnabled=>{let isReplacement=isAppliedCascadeEnabled&&isEnabled&&!isCascadeEnabled;setIsCascadeEnabled(isEnabled),setIsConfiguringCascadeReplacement(isReplacement),(!isEnabled||isReplacement)&&setCascadeMode(`skip`),onCascadeToggle?.(isEnabled)},handleCascadeModeChange=mode=>{setCascadeMode(mode),onCascadeModeChange?.(mode)},handleSubmit=async values=>{let operations=createJSONPatch(values,selectedTemplateInstance);if(cascadePolicySelection){await onSubmit(values,operations,cascadePolicySelection);return}await onSubmit(values,operations)},handleCancel=isFormDirty=>{isFormDirty?setIsUnsavedChangesModalOpen(!0):onCancel()},handleDiscardUnsavedChanges=()=>{resetCascadeSelection(),onDiscardUnsavedChanges?.()},handleDelete=()=>{setIsDeleteConfirmationModalOpen(!0)},initialValues={metadata:{...selectedTemplateInstance}},formRef=useRef(null),[portalElement,setPortalElement]=useState(null);useEffect(()=>{setPortalElement(customRef??formRef.current)},[customRef,selectedTemplateInstance?.templateKey,selectedTemplateInstance?.scope]);let content=useMemo(()=>{let isEmpty=selectedTemplateInstance?.fields.length===0;if(isCustomMetadata)return jsx(CustomInstance,{isLoading:isFetchingSuggestions});if(isEmpty)return jsx(MetadataEmptyState,{isBoxAiSuggestionsFeatureEnabled:isAiSuggestionsFeatureEnabled,level:`instance`});let showOverlay=!!(isFetchingSuggestions||errorCode);return jsxs(`div`,{className:clsx(metadata_instance_form_module_default.metadataInstanceFormContent,showOverlay&&metadata_instance_form_module_default.showOverlay,isBoundingBoxOrConfidenceScoreReviewEnabled&&metadata_instance_form_module_default.metadataInstanceFormContentReducedGap),children:[jsx(AutofillOverlay,{errorCode,isFetchingSuggestions,isLongLoading}),jsx(TemplateInstance,{disableForm:isFetchingSuggestions,isConfidenceScoreReviewEnabled,isBoundingBoxEnabled,isExternallyOwned:selectedTemplateInstance?.isExternallyOwned,isMultilevelTaxonomyFieldEnabled,isTaxonomyPickerEnabled,isUserFieldEnabled,createTaxonomyItemsService,onSelectMetadataField,selectedMetadataFieldId,portalElement:customRef??portalElement,shouldShowOnlyReviewFields,taxonomyOptionsFetcher,fetchAvatarUrls,fetchUsers,resolveUsersByEmail})]})},[selectedTemplateInstance?.fields.length,selectedTemplateInstance?.isExternallyOwned,isCustomMetadata,isFetchingSuggestions,isLongLoading,customRef,portalElement,taxonomyOptionsFetcher,isAiSuggestionsFeatureEnabled,isConfidenceScoreReviewEnabled,isBoundingBoxEnabled,isBoundingBoxOrConfidenceScoreReviewEnabled,isMultilevelTaxonomyFieldEnabled,isTaxonomyPickerEnabled,createTaxonomyItemsService,errorCode,shouldShowOnlyReviewFields,onSelectMetadataField,selectedMetadataFieldId,isUserFieldEnabled,fetchUsers,fetchAvatarUrls,resolveUsersByEmail]);return jsx(Formik,{initialValues,onSubmit:handleSubmit,children:({values,dirty})=>jsxs(Form,{children:[jsx(FormWrapper,{areAiSuggestionsAvailable,className:metadata_instance_form_module_default.metadataInstanceForm,formRef,formValues:values,cascadeIsEnabled:isCascadeEnabled,cascadeMode,getAiSuggestions,handleCancel,handleDelete,isAdvancedExtractAgentEnabled,isConfiguringCascadeReplacement,isAiSuggestionsFeatureEnabled,isBetaLanguageEnabled,isConfidenceScoreReviewEnabled,isBoundingBoxEnabled,isDeleteButtonDisabled,isFetchingSuggestions,isFormDirty:dirty||isCascadeDirty,isLargeFile,itemType,onCascadeModeChange:handleCascadeModeChange,onCascadeToggle:handleCascadeToggle,onManageExtractAgent,onToggleReviewFilter,selectedTemplateInstance,shouldShowOnlyReviewFields,suggestions,children:selectedTemplateInstance&&content}),onChange&&jsx(FormikObserver,{dirty,onChange,values}),jsx(UnsavedChangesModal,{onBackToEdit:()=>setIsUnsavedChangesModalOpen(!1),onDiscardChanges:handleDiscardUnsavedChanges,open:isUnsavedChangesModalOpen,trackEvent}),jsx(DeleteConfirmationModal,{isCheckboxEnabled:isDeleteConfirmationModalCheckboxEnabled,itemType,onConfirm:()=>onDelete(selectedTemplateInstance),onDismiss:()=>setIsDeleteConfirmationModalOpen(!1),open:isDeleteConfirmationModalOpen,templateName:selectedTemplateInstance?.displayName})]})},`${selectedTemplateInstance?.scope}.${selectedTemplateInstance?.templateKey}`)};export{MetadataInstanceForm};
@@ -1 +1 @@
1
- import{withAnalytics}from"../../utils/analytics/with-analytics.js";import{t as MetadataInstanceList$1}from"../../../../chunks/metadata-instance-list.js";import{t as MetadataInstanceHeader}from"../../../../chunks/metadata-instance-header.js";import{t as MetadataInstance$1}from"../../../../chunks/metadata-instance.js";var MetadataInstanceList=withAnalytics(MetadataInstanceList$1),MetadataInstance=withAnalytics(MetadataInstance$1);export{MetadataInstance,MetadataInstanceHeader,MetadataInstanceList};
1
+ import{withAnalytics}from"../../utils/analytics/with-analytics.js";import{MetadataInstanceCascadeNotice}from"./subcomponents/metadata-instance-cascade-notice/metadata-instance-cascade-notice.js";import{t as MetadataInstanceList$1}from"../../../../chunks/metadata-instance-list.js";import{t as MetadataInstanceHeader}from"../../../../chunks/metadata-instance-header.js";import{t as MetadataInstance$1}from"../../../../chunks/metadata-instance.js";var MetadataInstanceList=withAnalytics(MetadataInstanceList$1),MetadataInstance=withAnalytics(MetadataInstance$1);export{MetadataInstance,MetadataInstanceCascadeNotice,MetadataInstanceHeader,MetadataInstanceList};
@@ -0,0 +1 @@
1
+ import{defineMessages}from"react-intl";var messages=defineMessages({cascadePolicyEnabledInfo:{id:`metadataEditor.viewInstance.metadataInstanceCascadeNotice.cascadePolicyEnabledInfo`,defaultMessage:`This template and its values are being cascaded to all items in this folder and its subfolders.`},cascadePolicyEnabledIconAriaLabel:{id:`metadataEditor.viewInstance.metadataInstanceCascadeNotice.cascadePolicyEnabledIconAriaLabel`,defaultMessage:`Cascade policy enabled`}});export{messages as default};
@@ -0,0 +1 @@
1
+ import messages from"./messages.js";import{useIntl}from"react-intl";import{jsx}from"react/jsx-runtime";import{ActionableInlineNotice}from"@box/blueprint-web";import{MetadataBadge}from"@box/blueprint-web-assets/icons/Line";var MetadataInstanceCascadeNotice=()=>{let intl=useIntl();return jsx(ActionableInlineNotice,{backgroundColor:`backgroundPurple`,"data-target-id":`ActionableInlineNotice-metadataEditorCascadePolicyEnabled`,icon:MetadataBadge,iconAriaLabel:intl.formatMessage(messages.cascadePolicyEnabledIconAriaLabel),text:intl.formatMessage(messages.cascadePolicyEnabledInfo)})};export{MetadataInstanceCascadeNotice};
@@ -1 +1 @@
1
- import{r as UpdateMode}from"../../chunks/types.js";import{defaultMetadataValueMap}from"./defaults.js";var mapDataFromTemplate=(template,withUpdateMode=!1)=>({scope:template.scope,templateKey:template.templateKey,type:template.type,id:template.id,hidden:template.hidden,fields:template.fields.map(field=>{let{type,value=defaultMetadataValueMap[type]}=field;return field.value=value,withUpdateMode&&!field.updateMode&&(field.updateMode={mode:UpdateMode.ClearAndReplace,value:defaultMetadataValueMap[type],isOpened:!1}),field})}),mapTemplateOptionsFromTemplates=templates=>templates.map(template=>({displayName:template.displayName,id:template.id,scope:template.scope,hidden:template.hidden}));export{mapDataFromTemplate,mapTemplateOptionsFromTemplates};
1
+ import{i as UpdateMode}from"../../chunks/types.js";import{defaultMetadataValueMap}from"./defaults.js";var mapDataFromTemplate=(template,withUpdateMode=!1)=>({scope:template.scope,templateKey:template.templateKey,type:template.type,id:template.id,hidden:template.hidden,fields:template.fields.map(field=>{let{type,value=defaultMetadataValueMap[type]}=field;return field.value=value,withUpdateMode&&!field.updateMode&&(field.updateMode={mode:UpdateMode.ClearAndReplace,value:defaultMetadataValueMap[type],isOpened:!1}),field})}),mapTemplateOptionsFromTemplates=templates=>templates.map(template=>({displayName:template.displayName,id:template.id,scope:template.scope,hidden:template.hidden}));export{mapDataFromTemplate,mapTemplateOptionsFromTemplates};
@@ -0,0 +1 @@
1
+ import{n as CASCADE_POLICY_TYPE_AI_EXTRACT}from"../../../chunks/types.js";var CUSTOM_EXTRACT_AGENT_PREFIX=`extract_agent_`,isCascadePolicyEnabled=cascadePolicy=>!!cascadePolicy?.id,toCascadePolicySelection=({cascadePolicy,isEnabled,overwrite})=>({...cascadePolicy?.id?{id:cascadePolicy.id}:{},isEnabled,overwrite,canEdit:!0,isAIFolderExtractionEnabled:cascadePolicy?.cascadePolicyType===CASCADE_POLICY_TYPE_AI_EXTRACT,cascadePolicyConfiguration:cascadePolicy?.agentConfiguration?{agent:cascadePolicy.agentConfiguration}:null}),getCustomExtractAgentId=agentConfiguration=>{if(!agentConfiguration?.startsWith(CUSTOM_EXTRACT_AGENT_PREFIX))return null;let agentId=agentConfiguration.slice(14);return/^\d+$/.test(agentId)?agentId:null},isCustomExtractAgentPolicy=cascadePolicy=>isCascadePolicyEnabled(cascadePolicy)&&cascadePolicy?.cascadePolicyType===`ai_extract`&&!!cascadePolicy.agentConfiguration?.startsWith(CUSTOM_EXTRACT_AGENT_PREFIX);export{getCustomExtractAgentId,isCascadePolicyEnabled,isCustomExtractAgentPolicy,toCascadePolicySelection};
@@ -1 +1 @@
1
- import{n as ConfidenceLevel}from"../../../../chunks/types.js";import messages from"./messages.js";function getConfidenceScoreTooltip(formatMessage,confidenceScore){if(confidenceScore.isAccepted&&confidenceScore.level===ConfidenceLevel.High)return formatMessage(messages.tooltipHighConfidence);if(confidenceScore.isAccepted)return formatMessage(messages.tooltipReviewedAndAccepted);switch(confidenceScore.level){case ConfidenceLevel.Low:case ConfidenceLevel.Medium:return formatMessage(messages.tooltipLowConfidence);case ConfidenceLevel.High:return formatMessage(messages.tooltipHighConfidence);default:return null}}export{getConfidenceScoreTooltip};
1
+ import{r as ConfidenceLevel}from"../../../../chunks/types.js";import messages from"./messages.js";function getConfidenceScoreTooltip(formatMessage,confidenceScore){if(confidenceScore.isAccepted&&confidenceScore.level===ConfidenceLevel.High)return formatMessage(messages.tooltipHighConfidence);if(confidenceScore.isAccepted)return formatMessage(messages.tooltipReviewedAndAccepted);switch(confidenceScore.level){case ConfidenceLevel.Low:case ConfidenceLevel.Medium:return formatMessage(messages.tooltipLowConfidence);case ConfidenceLevel.High:return formatMessage(messages.tooltipHighConfidence);default:return null}}export{getConfidenceScoreTooltip};
@@ -1 +1 @@
1
- import{n as ConfidenceLevel}from"../../../../chunks/types.js";function isConfidenceScoreNeedingReview(confidenceScore){return confidenceScore.level!==ConfidenceLevel.High&&!confidenceScore.isAccepted}export{isConfidenceScoreNeedingReview};
1
+ import{r as ConfidenceLevel}from"../../../../chunks/types.js";function isConfidenceScoreNeedingReview(confidenceScore){return confidenceScore.level!==ConfidenceLevel.High&&!confidenceScore.isAccepted}export{isConfidenceScoreNeedingReview};
@@ -0,0 +1 @@
1
+ ._cascadePolicyEditor_865r5_1{gap:var(--bp-space-030,.75rem);flex-direction:column;display:flex}._section_865r5_7{gap:var(--bp-space-030,.75rem);padding:var(--bp-space-040,1rem);background-color:var(--bp-gray-02,#f7f7f7);border-radius:var(--bp-radius-06,.75rem);flex-direction:column;display:flex}._notImmediate_865r5_16{gap:var(--bp-space-020,.5rem);color:var(--bp-gray-65,#6f6f6f);align-items:center;display:flex}._notImmediateIcon_865r5_23{width:var(--bp-size-050,1.25rem);height:var(--bp-size-050,1.25rem);flex-shrink:0}
@@ -1 +1 @@
1
- ._metadataInstanceHeader_17bsu_1{height:var(--size-10);justify-content:space-between;display:flex}._metadataInstanceHeader_17bsu_1 ._iconButtonsContainer_17bsu_6{gap:var(--space-1);padding-left:var(--space-2);margin-block:0 var(--space-2);justify-content:flex-end;align-self:center;display:flex}._metadataInstanceHeader_17bsu_1 ._title_17bsu_14{margin-block:var(--space-1) var(--space-3)}
1
+ ._metadataInstanceHeader_1yxcv_1{height:var(--size-10);justify-content:space-between;display:flex}._metadataInstanceHeader_1yxcv_1 ._iconButtonsContainer_1yxcv_6{gap:var(--space-1);padding-left:var(--space-2);margin-block:0 var(--space-2);justify-content:flex-end;align-self:center;display:flex}._metadataInstanceHeader_1yxcv_1 ._titleContainer_1yxcv_14{gap:var(--bp-space-020,.5rem);align-items:center;min-width:0;display:flex}._metadataInstanceHeader_1yxcv_1 ._title_1yxcv_14{margin-block:var(--space-1) var(--space-3)}._metadataInstanceHeader_1yxcv_1 ._badge_1yxcv_23{width:var(--bp-size-050,1.25rem);height:var(--bp-size-050,1.25rem);margin-block:0 var(--bp-space-020,.5rem);color:var(--bp-box-blue-100,#0061d5);flex-shrink:0;align-self:center}._metadataInstanceHeader_1yxcv_1 ._badgeCascaded_1yxcv_31{color:var(--bp-purple-rain-100,#9f3fed)}
@@ -1 +1 @@
1
- ._topDivider_1xnom_1,._reviewNotice_1xnom_5{margin-block-end:var(--bp-space-040)}._bottomDivider_1xnom_9{margin-block-start:var(--bp-space-040)}
1
+ ._topDivider_1x96u_1,._reviewNotice_1x96u_5,._cascadeNotice_1x96u_9{margin-block-end:var(--bp-space-040)}._bottomDivider_1x96u_13{margin-block-start:var(--bp-space-040)}
@@ -11,4 +11,5 @@ export * from './lib/defaults';
11
11
  export * from './lib/types';
12
12
  export * from './lib/utils/api-wrapper';
13
13
  export * from './lib/utils/autofill-context';
14
+ export * from './lib/utils/cascade-policy';
14
15
  export type { SearchParams, TaxonomyAncestor, TaxonomyItemsService, TaxonomyNode, TaxonomySearchResult, } from '@box/metadata-taxonomy-picker';
@@ -4,6 +4,9 @@ export declare const MetadataInstanceForm: {
4
4
  }): import("react/jsx-runtime").JSX.Element;
5
5
  displayName: string;
6
6
  };
7
+ export * from './subcomponents/cascade-policy-editor/cascade-policy-editor';
8
+ export * from './subcomponents/cascade-policy-editor/types';
9
+ export * from './subcomponents/custom-extract-agent-notice/custom-extract-agent-notice';
7
10
  export * from './subcomponents/custom-instance-new-field/custom-instance-new-field';
8
11
  export * from './subcomponents/delete-confirmation-modal/delete-confirmation-modal';
9
12
  export * from './subcomponents/metadata-instance-form-autofill-button/metadata-instance-form-autofill-button';
@@ -0,0 +1,15 @@
1
+ import { CascadePolicyEditorProps } from './types';
2
+ /**
3
+ * Folder-only section rendered while editing a metadata instance: lets the user turn a
4
+ * cascade policy on and, when applying a policy, choose how conflicts on existing items
5
+ * are resolved.
6
+ *
7
+ * Skip and Overwrite are one-time apply choices. Skip is sent as `overwrite: false`,
8
+ * which apply accepts as `conflict_resolution: "none"`. They are hidden while a policy is
9
+ * already applied, because that choice is not stored on the policy. Turning an existing
10
+ * policy off and back on starts a new apply and shows the options again.
11
+ *
12
+ * The editor is controlled. The form owns the selection, includes it in save, and treats it
13
+ * as unsaved when it differs from the applied policy.
14
+ */
15
+ export declare const CascadePolicyEditor: ({ cascadePolicy, canEdit, isCustomMetadata, isEnabled, mode, isConfiguringReplacement, onCascadeToggle, onCascadeModeChange, }: CascadePolicyEditorProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,63 @@
1
+ declare const messages: {
2
+ enableCascadePolicy: {
3
+ defaultMessage: string;
4
+ description: string;
5
+ id: string;
6
+ };
7
+ applyCascadePolicyText: {
8
+ defaultMessage: string;
9
+ description: string;
10
+ id: string;
11
+ };
12
+ cannotApplyCascadePolicyText: {
13
+ defaultMessage: string;
14
+ description: string;
15
+ id: string;
16
+ };
17
+ cascadePolicyLearnMore: {
18
+ defaultMessage: string;
19
+ description: string;
20
+ id: string;
21
+ };
22
+ cascadePolicyOptionsDisabledNotice: {
23
+ defaultMessage: string;
24
+ description: string;
25
+ id: string;
26
+ };
27
+ cascadePolicyOptionsDisabledNoticeIconAriaLabel: {
28
+ defaultMessage: string;
29
+ description: string;
30
+ id: string;
31
+ };
32
+ cascadePolicyModeQuestion: {
33
+ defaultMessage: string;
34
+ description: string;
35
+ id: string;
36
+ };
37
+ cascadePolicyModeLegend: {
38
+ defaultMessage: string;
39
+ description: string;
40
+ id: string;
41
+ };
42
+ operationNotImmediate: {
43
+ defaultMessage: string;
44
+ description: string;
45
+ id: string;
46
+ };
47
+ operationNotImmediateIconAriaLabel: {
48
+ defaultMessage: string;
49
+ description: string;
50
+ id: string;
51
+ };
52
+ cascadePolicySkipMode: {
53
+ defaultMessage: string;
54
+ description: string;
55
+ id: string;
56
+ };
57
+ cascadePolicyOverwriteMode: {
58
+ defaultMessage: string;
59
+ description: string;
60
+ id: string;
61
+ };
62
+ };
63
+ export default messages;
@@ -0,0 +1,26 @@
1
+ import { MetadataCascadePolicy } from '../../../../types';
2
+ export type CascadePolicyMode = 'skip' | 'overwrite';
3
+ export type CascadePolicyEditorProps = {
4
+ /** Existing policy on the instance, if any. Hides conflict options until the user replaces it. */
5
+ cascadePolicy?: MetadataCascadePolicy;
6
+ /**
7
+ * Whether the user may change cascade settings. Field edit permission is separate.
8
+ * When false, an applied policy is shown as a read-only notice. Defaults to true.
9
+ */
10
+ canEdit?: boolean;
11
+ /** Custom metadata cannot be cascaded — the switch is replaced with an explanatory text. */
12
+ isCustomMetadata?: boolean;
13
+ /** Current switch value. */
14
+ isEnabled: boolean;
15
+ /** Conflict mode for a new apply. Ignored while an existing policy is only being viewed. */
16
+ mode: CascadePolicyMode;
17
+ /**
18
+ * True after the user turns an existing policy off and back on in this edit.
19
+ * That second switch-on is a new apply, so the conflict options are shown again.
20
+ */
21
+ isConfiguringReplacement?: boolean;
22
+ /** Notified when the user flips the enable switch. */
23
+ onCascadeToggle: (isEnabled: boolean) => void;
24
+ /** Notified when the user picks a conflict-resolution mode. */
25
+ onCascadeModeChange: (mode: CascadePolicyMode) => void;
26
+ };
@@ -0,0 +1,12 @@
1
+ export type CustomExtractAgentNoticeProps = {
2
+ /** Raw agent configuration value from the cascade policy (e.g. `extract_agent_<id>`). */
3
+ agentConfiguration?: string;
4
+ /** Navigates to the agent surface. The action is hidden when omitted or when no numeric agent id resolves. */
5
+ onManageExtractAgent?: (agentId: string) => void;
6
+ };
7
+ /**
8
+ * Edit-mode notice for a folder metadata instance whose cascade policy is managed by a
9
+ * custom Box AI extract agent. Values cannot be edited inline; the user is pointed to the
10
+ * agent instead.
11
+ */
12
+ export declare const CustomExtractAgentNotice: ({ agentConfiguration, onManageExtractAgent, }: CustomExtractAgentNoticeProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,18 @@
1
+ declare const messages: {
2
+ customExtractAgentNoticeDescription: {
3
+ defaultMessage: string;
4
+ description: string;
5
+ id: string;
6
+ };
7
+ customExtractAgentManageButton: {
8
+ defaultMessage: string;
9
+ description: string;
10
+ id: string;
11
+ };
12
+ customExtractAgentNoticeIconAriaLabel: {
13
+ defaultMessage: string;
14
+ description: string;
15
+ id: string;
16
+ };
17
+ };
18
+ export default messages;
@@ -1,14 +1,17 @@
1
1
  import { AutofillSuggestions, MetadataItemType, MetadataTemplateField, MetadataTemplateInstance } from '../../../../types';
2
+ import { CascadePolicySelection } from '../../../../utils/cascade-policy';
2
3
  import { CreateTaxonomyItemsService, TaxonomyOptionsFetcher } from '../../../metadata-editor-fields/components/metadata-taxonomy-field/types';
3
4
  import { FetchAvatarUrls, FetchUsers, ResolveUsersByEmail } from '../../../metadata-editor-fields/components/metadata-user-field/types';
4
5
  import { FormValues } from '../../types';
6
+ import { CascadePolicyMode } from '../cascade-policy-editor/types';
5
7
  import { ERROR_CODE_METADATA_AUTOFILL_TIMEOUT, ERROR_CODE_METADATA_PRECONDITION_FAILED, ERROR_CODE_MISSING_PERMISSIONS, ERROR_CODE_UNKNOWN } from './constants';
6
8
  export type errorCodeTypes = typeof ERROR_CODE_METADATA_AUTOFILL_TIMEOUT | typeof ERROR_CODE_METADATA_PRECONDITION_FAILED | typeof ERROR_CODE_MISSING_PERMISSIONS | typeof ERROR_CODE_UNKNOWN;
7
9
  export type MetadataInstanceFormProps = {
8
10
  /**
9
11
  * Selects item-specific copy, including the delete confirmation. Defaults to `file`.
10
- * Does not gate any feature: autofill, confidence score review, and bounding boxes are
11
- * controlled solely by their own flags, and are supported for files only.
12
+ * `folder` also shows the cascade policy editor and passes `cascadePolicySelection` on save.
13
+ * Autofill, confidence score review, and bounding boxes stay on their own flags and are
14
+ * supported for files only.
12
15
  */
13
16
  itemType?: MetadataItemType;
14
17
  areAiSuggestionsAvailable: boolean;
@@ -30,10 +33,18 @@ export type MetadataInstanceFormProps = {
30
33
  selectedTemplateInstance: MetadataTemplateInstance | null;
31
34
  onCancel: () => void;
32
35
  onChange?: (values: FormValues) => void;
36
+ /** Folder-only. Notified when the user flips the cascade policy switch. */
37
+ onCascadeToggle?: (isEnabled: boolean) => void;
38
+ /** Folder-only. Notified when the user picks a conflict-resolution mode for a new apply. */
39
+ onCascadeModeChange?: (mode: CascadePolicyMode) => void;
33
40
  onDelete: (templateInstance: MetadataTemplateInstance) => void;
34
41
  /** Callback invoked when clicking Discard Changes button on the UnsavedChangesModal - can be used to reset form values */
35
42
  onDiscardUnsavedChanges?: () => void;
36
- onSubmit: (values: FormValues, operations: JSONPatchOperations) => Promise<void>;
43
+ /**
44
+ * `cascadePolicySelection` is set for folder templates whose cascade policy the user may edit.
45
+ * File saves, and folder saves the user cannot change, omit the argument.
46
+ */
47
+ onSubmit: (values: FormValues, operations: JSONPatchOperations, cascadePolicySelection?: CascadePolicySelection) => Promise<void>;
37
48
  onToggleReviewFilter?: () => void;
38
49
  setIsUnsavedChangesModalOpen: (isUnsavedChangesModalOpen: boolean) => void;
39
50
  shouldShowOnlyReviewFields?: boolean;
@@ -48,8 +59,27 @@ export type MetadataInstanceFormProps = {
48
59
  fetchAvatarUrls?: FetchAvatarUrls;
49
60
  fetchUsers?: FetchUsers;
50
61
  resolveUsersByEmail?: ResolveUsersByEmail;
62
+ /**
63
+ * Folder-only. Navigates to the custom Box AI extract agent that manages the instance's
64
+ * cascade policy. Shown on the extract-agent notice when the agent id can be resolved.
65
+ */
66
+ onManageExtractAgent?: (agentId: string) => void;
51
67
  };
52
68
  export type MetadataInstanceFormWrapperProps<T> = {
69
+ /** Selects folder-specific UI (cascade policy editor, extract-agent notice). Defaults to `file`. */
70
+ itemType?: MetadataItemType;
71
+ /** See `MetadataInstanceFormProps.onManageExtractAgent`. */
72
+ onManageExtractAgent?: (agentId: string) => void;
73
+ /** Current cascade switch value. Folder templates that can cascade always receive this. */
74
+ cascadeIsEnabled?: boolean;
75
+ /** Conflict mode for a new cascade apply. */
76
+ cascadeMode?: CascadePolicyMode;
77
+ /** True after the user turns an existing cascade policy off and back on in this edit. */
78
+ isConfiguringCascadeReplacement?: boolean;
79
+ /** See `MetadataInstanceFormProps.onCascadeToggle`. */
80
+ onCascadeToggle?: (isEnabled: boolean) => void;
81
+ /** See `MetadataInstanceFormProps.onCascadeModeChange`. */
82
+ onCascadeModeChange?: (mode: CascadePolicyMode) => void;
53
83
  areAiSuggestionsAvailable: boolean;
54
84
  children: React.ReactNode;
55
85
  formValues: FormValues;
@@ -1,2 +1,2 @@
1
1
  import { MetadataInstanceFormFooterProps } from './types';
2
- export declare const MetadataInstanceFormFooter: ({ isDeleteButtonDisabled, isLoading, onCancel, onDelete, }: MetadataInstanceFormFooterProps) => import("react/jsx-runtime").JSX.Element;
2
+ export declare const MetadataInstanceFormFooter: ({ isDeleteButtonDisabled, isSaveButtonDisabled, isLoading, onCancel, onDelete, }: MetadataInstanceFormFooterProps) => import("react/jsx-runtime").JSX.Element;
@@ -1,5 +1,7 @@
1
1
  export type MetadataInstanceFormFooterProps = {
2
2
  isDeleteButtonDisabled: boolean;
3
+ /** Disables Save. Used when an extract agent owns the instance and its values cannot be edited. */
4
+ isSaveButtonDisabled?: boolean;
3
5
  isLoading: boolean;
4
6
  onCancel: () => void;
5
7
  onDelete: () => void;
@@ -10,4 +10,5 @@ export declare const MetadataInstance: {
10
10
  }): import("react/jsx-runtime").JSX.Element;
11
11
  displayName: string;
12
12
  };
13
+ export * from './subcomponents/metadata-instance-cascade-notice/metadata-instance-cascade-notice';
13
14
  export * from './subcomponents/metadata-instance-header/metadata-instance-header';
@@ -1,2 +1,2 @@
1
1
  import { MetadataInstanceListProps } from './types';
2
- export declare const MetadataInstanceList: ({ areAiSuggestionsAvailable, isAiSuggestionsFeatureEnabled, isBetaLanguageEnabled, onEdit, onSelectMetadataField, selectedMetadataFieldId, templateInstances, taxonomyNodeFetcher, isAdvancedExtractAgentEnabled, isConfidenceScoreReviewEnabled, isBoundingBoxEnabled, }: MetadataInstanceListProps) => import("react/jsx-runtime").JSX.Element;
2
+ export declare const MetadataInstanceList: ({ itemType, areAiSuggestionsAvailable, isAiSuggestionsFeatureEnabled, isBetaLanguageEnabled, onEdit, onSelectMetadataField, selectedMetadataFieldId, templateInstances, taxonomyNodeFetcher, isAdvancedExtractAgentEnabled, isConfidenceScoreReviewEnabled, isBoundingBoxEnabled, }: MetadataInstanceListProps) => import("react/jsx-runtime").JSX.Element;
@@ -1,2 +1,2 @@
1
1
  import { MetadataInstanceProps } from './types';
2
- export declare const MetadataInstance: ({ areAiSuggestionsAvailable, isAiSuggestionsFeatureEnabled, isBetaLanguageEnabled, onEdit, onSelectMetadataField, selectedMetadataFieldId, templateInstance, taxonomyNodeFetcher, isAdvancedExtractAgentEnabled, isConfidenceScoreReviewEnabled, isBoundingBoxEnabled, }: MetadataInstanceProps) => import("react/jsx-runtime").JSX.Element;
2
+ export declare const MetadataInstance: ({ itemType, areAiSuggestionsAvailable, isAiSuggestionsFeatureEnabled, isBetaLanguageEnabled, onEdit, onSelectMetadataField, selectedMetadataFieldId, templateInstance, taxonomyNodeFetcher, isAdvancedExtractAgentEnabled, isConfidenceScoreReviewEnabled, isBoundingBoxEnabled, }: MetadataInstanceProps) => import("react/jsx-runtime").JSX.Element;
@@ -1,6 +1,11 @@
1
- import { MetadataTemplateField, MetadataTemplateInstance } from '../../../../types';
1
+ import { MetadataItemType, MetadataTemplateField, MetadataTemplateInstance } from '../../../../types';
2
2
  import { TaxonomyNodeFetcher } from '../metadata-instance-entry/types';
3
3
  export type MetadataInstanceProps = {
4
+ /**
5
+ * Host item the instance belongs to. Defaults to `file`. For `folder`, the header shows a
6
+ * metadata badge and instances with a `cascadePolicy` render the cascade notice.
7
+ */
8
+ itemType?: MetadataItemType;
4
9
  areAiSuggestionsAvailable: boolean;
5
10
  isAiSuggestionsFeatureEnabled: boolean;
6
11
  isBetaLanguageEnabled: boolean;
@@ -0,0 +1,13 @@
1
+ declare const messages: {
2
+ cascadePolicyEnabledInfo: {
3
+ defaultMessage: string;
4
+ description: string;
5
+ id: string;
6
+ };
7
+ cascadePolicyEnabledIconAriaLabel: {
8
+ defaultMessage: string;
9
+ description: string;
10
+ id: string;
11
+ };
12
+ };
13
+ export default messages;
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Read-only notice shown on a folder metadata instance whose template and values are
3
+ * being cascaded to the folder's items. Purple to match the cascaded instance badge.
4
+ */
5
+ export declare const MetadataInstanceCascadeNotice: () => import("react/jsx-runtime").JSX.Element;
@@ -1,2 +1,2 @@
1
1
  import { MetadataInstanceHeaderProps } from './types';
2
- export declare const MetadataInstanceHeader: ({ areAiSuggestionsAvailable, canEdit, isAiSuggestionsFeatureEnabled, isBetaLanguageEnabled, onEdit, onAutofill, templateName, isAdvancedExtractAgentEnabled, }: MetadataInstanceHeaderProps) => import("react/jsx-runtime").JSX.Element;
2
+ export declare const MetadataInstanceHeader: ({ areAiSuggestionsAvailable, canEdit, isAiSuggestionsFeatureEnabled, isBetaLanguageEnabled, onEdit, onAutofill, templateName, isAdvancedExtractAgentEnabled, itemType, isCascaded, }: MetadataInstanceHeaderProps) => import("react/jsx-runtime").JSX.Element;
@@ -1,3 +1,4 @@
1
+ import { MetadataItemType } from '../../../../types';
1
2
  export type MetadataInstanceHeaderProps = {
2
3
  areAiSuggestionsAvailable: boolean;
3
4
  canEdit: boolean;
@@ -7,4 +8,8 @@ export type MetadataInstanceHeaderProps = {
7
8
  onAutofill: (agentId?: string) => void;
8
9
  templateName?: string;
9
10
  isAdvancedExtractAgentEnabled?: boolean;
11
+ /** Folder instances render a metadata badge next to the title. Defaults to `file` (no badge). */
12
+ itemType?: MetadataItemType;
13
+ /** Folder-only. Turns the badge purple to signal the instance is being cascaded. */
14
+ isCascaded?: boolean;
10
15
  };
@@ -1,6 +1,8 @@
1
- import { MetadataTemplateField, MetadataTemplateInstance } from '../../types';
1
+ import { MetadataItemType, MetadataTemplateField, MetadataTemplateInstance } from '../../types';
2
2
  import { TaxonomyNodeFetcher } from './subcomponents/metadata-instance-entry/types';
3
3
  export type MetadataInstanceListProps = {
4
+ /** Host item the instances belong to. Defaults to `file`. See `MetadataInstanceProps.itemType`. */
5
+ itemType?: MetadataItemType;
4
6
  areAiSuggestionsAvailable: boolean;
5
7
  isAiSuggestionsFeatureEnabled: boolean;
6
8
  isBetaLanguageEnabled: boolean;
@@ -117,6 +117,29 @@ export type MetadataTemplateOption = {
117
117
  scope: string;
118
118
  };
119
119
  export type MetadataFieldValue = string | number | Array<string> | null | BaseOptionType[] | UserContactType[];
120
+ /** Cascade policy type reported by the API when Box AI autofill is part of the policy. */
121
+ export declare const CASCADE_POLICY_TYPE_AI_EXTRACT: "ai_extract";
122
+ /**
123
+ * Folder cascade policy attached to a metadata instance.
124
+ *
125
+ * Hosts pass this so the editor can render the folder notices, the cascade switch, and the
126
+ * extract-agent lock. Conflict resolution is not stored on the policy. It is chosen only when
127
+ * a policy is applied, and that choice is reported through save — not on this object.
128
+ */
129
+ export type MetadataCascadePolicy = {
130
+ /** Present when a cascade policy already exists for this instance. */
131
+ id?: string;
132
+ /** `ai_extract` when Box AI autofill is part of the policy. */
133
+ cascadePolicyType?: typeof CASCADE_POLICY_TYPE_AI_EXTRACT | string;
134
+ /** Raw agent configuration (e.g. `extract_agent_<id>`) when a custom extract agent manages the policy. */
135
+ agentConfiguration?: string;
136
+ /**
137
+ * Whether this user may create, change, or remove the cascade policy.
138
+ * Separate from the instance `canEdit` flag, which only covers field values.
139
+ * Omitted means the host did not restrict cascade editing.
140
+ */
141
+ canEdit?: boolean;
142
+ };
120
143
  export type MetadataTemplateInstance = {
121
144
  canEdit: boolean;
122
145
  displayName?: string;
@@ -127,6 +150,8 @@ export type MetadataTemplateInstance = {
127
150
  templateKey: string;
128
151
  type: string;
129
152
  isExternallyOwned?: boolean;
153
+ /** Folder-only. See `MetadataCascadePolicy`. */
154
+ cascadePolicy?: MetadataCascadePolicy;
130
155
  };
131
156
  export type TemplateSuggestion = Record<MetadataTemplateField['key'], MetadataTemplateField['aiSuggestion']>;
132
157
  export type AutofillSuggestions = Record<MetadataTemplateInstance['templateKey'], TemplateSuggestion>;
@@ -0,0 +1,35 @@
1
+ import { MetadataCascadePolicy } from '../types';
2
+ /** True when an existing cascade policy is attached (the instance is being cascaded). */
3
+ export declare const isCascadePolicyEnabled: (cascadePolicy?: MetadataCascadePolicy) => boolean;
4
+ /**
5
+ * Cascade choice reported on save. The host maps this onto the public cascade API.
6
+ * `cascadePolicyType` is server-only and is not included.
7
+ *
8
+ * `overwrite: false` is Skip. Apply sends `conflict_resolution: "none"`, which the
9
+ * public API accepts. `overwrite: true` replaces values already on items in the folder.
10
+ *
11
+ * AI autofill fields are copied from the applied policy. This editor does not change them.
12
+ */
13
+ export type CascadePolicySelection = {
14
+ id?: string;
15
+ isEnabled: boolean;
16
+ overwrite: boolean;
17
+ canEdit: boolean;
18
+ isAIFolderExtractionEnabled: boolean;
19
+ cascadePolicyConfiguration: {
20
+ agent: string;
21
+ } | null;
22
+ };
23
+ export declare const toCascadePolicySelection: ({ cascadePolicy, isEnabled, overwrite, }: {
24
+ cascadePolicy?: MetadataCascadePolicy;
25
+ isEnabled: boolean;
26
+ overwrite: boolean;
27
+ }) => CascadePolicySelection;
28
+ /**
29
+ * Resolves the navigable numeric id of a custom extract agent from the raw
30
+ * `agentConfiguration` value (`extract_agent_<id>`). Returns `null` for the built-in
31
+ * standard/enhanced agents or when the value is missing.
32
+ */
33
+ export declare const getCustomExtractAgentId: (agentConfiguration?: string) => string | null;
34
+ /** True when the cascade policy is an AI extract policy driven by a custom extract agent. */
35
+ export declare const isCustomExtractAgentPolicy: (cascadePolicy?: MetadataCascadePolicy) => boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@box/metadata-editor",
3
- "version": "2.10.12",
3
+ "version": "2.11.0",
4
4
  "peerDependencies": {
5
5
  "@ariakit/react": "0.4.21",
6
6
  "@box/blueprint-web": "^17.22.3",