box-ui-elements 23.3.0-beta.5 → 23.3.0-beta.7

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 (94) hide show
  1. package/dist/explorer.css +1 -1
  2. package/dist/explorer.js +1 -1
  3. package/dist/openwith.js +1 -1
  4. package/dist/picker.js +1 -1
  5. package/dist/preview.css +1 -1
  6. package/dist/preview.js +1 -1
  7. package/dist/sharing.js +1 -1
  8. package/dist/sidebar.css +1 -1
  9. package/dist/sidebar.js +1 -1
  10. package/dist/uploader.js +1 -1
  11. package/es/features/metadata-instance-editor/CascadePolicy.js +60 -2
  12. package/es/features/metadata-instance-editor/CascadePolicy.js.flow +72 -1
  13. package/es/features/metadata-instance-editor/CascadePolicy.js.map +1 -1
  14. package/es/features/metadata-instance-editor/CascadePolicy.scss +15 -1
  15. package/es/features/metadata-instance-editor/CascadePolicy.stories.js +24 -0
  16. package/es/features/metadata-instance-editor/CascadePolicy.stories.js.flow +31 -0
  17. package/es/features/metadata-instance-editor/CascadePolicy.stories.js.map +1 -0
  18. package/es/features/metadata-instance-editor/Instance.js +14 -2
  19. package/es/features/metadata-instance-editor/Instance.js.flow +23 -3
  20. package/es/features/metadata-instance-editor/Instance.js.map +1 -1
  21. package/es/features/metadata-instance-editor/Instances.js +2 -0
  22. package/es/features/metadata-instance-editor/Instances.js.flow +3 -0
  23. package/es/features/metadata-instance-editor/Instances.js.map +1 -1
  24. package/es/features/metadata-instance-editor/MetadataInstanceEditor.js +2 -0
  25. package/es/features/metadata-instance-editor/MetadataInstanceEditor.js.flow +3 -0
  26. package/es/features/metadata-instance-editor/MetadataInstanceEditor.js.map +1 -1
  27. package/es/features/metadata-instance-editor/messages.js +20 -0
  28. package/es/features/metadata-instance-editor/messages.js.flow +26 -0
  29. package/es/features/metadata-instance-editor/messages.js.map +1 -1
  30. package/i18n/bn-IN.js +5 -0
  31. package/i18n/bn-IN.properties +10 -0
  32. package/i18n/da-DK.js +5 -0
  33. package/i18n/da-DK.properties +10 -0
  34. package/i18n/de-DE.js +5 -0
  35. package/i18n/de-DE.properties +10 -0
  36. package/i18n/en-AU.js +5 -0
  37. package/i18n/en-AU.properties +10 -0
  38. package/i18n/en-CA.js +5 -0
  39. package/i18n/en-CA.properties +10 -0
  40. package/i18n/en-GB.js +5 -0
  41. package/i18n/en-GB.properties +10 -0
  42. package/i18n/en-US.js +5 -0
  43. package/i18n/en-US.properties +10 -0
  44. package/i18n/en-x-pseudo.js +1016 -1011
  45. package/i18n/en-x-pseudo.properties +1021 -1011
  46. package/i18n/es-419.js +5 -0
  47. package/i18n/es-419.properties +10 -0
  48. package/i18n/es-ES.js +5 -0
  49. package/i18n/es-ES.properties +10 -0
  50. package/i18n/fi-FI.js +5 -0
  51. package/i18n/fi-FI.properties +10 -0
  52. package/i18n/fr-CA.js +5 -0
  53. package/i18n/fr-CA.properties +10 -0
  54. package/i18n/fr-FR.js +5 -0
  55. package/i18n/fr-FR.properties +10 -0
  56. package/i18n/hi-IN.js +5 -0
  57. package/i18n/hi-IN.properties +10 -0
  58. package/i18n/it-IT.js +5 -0
  59. package/i18n/it-IT.properties +10 -0
  60. package/i18n/ja-JP.js +5 -0
  61. package/i18n/ja-JP.properties +10 -0
  62. package/i18n/ko-KR.js +5 -0
  63. package/i18n/ko-KR.properties +10 -0
  64. package/i18n/nb-NO.js +5 -0
  65. package/i18n/nb-NO.properties +10 -0
  66. package/i18n/nl-NL.js +5 -0
  67. package/i18n/nl-NL.properties +10 -0
  68. package/i18n/pl-PL.js +5 -0
  69. package/i18n/pl-PL.properties +10 -0
  70. package/i18n/pt-BR.js +5 -0
  71. package/i18n/pt-BR.properties +10 -0
  72. package/i18n/ru-RU.js +5 -0
  73. package/i18n/ru-RU.properties +10 -0
  74. package/i18n/sv-SE.js +5 -0
  75. package/i18n/sv-SE.properties +10 -0
  76. package/i18n/tr-TR.js +5 -0
  77. package/i18n/tr-TR.properties +10 -0
  78. package/i18n/zh-CN.js +5 -0
  79. package/i18n/zh-CN.properties +10 -0
  80. package/i18n/zh-TW.js +5 -0
  81. package/i18n/zh-TW.properties +10 -0
  82. package/package.json +2 -2
  83. package/src/features/metadata-instance-editor/CascadePolicy.js +72 -1
  84. package/src/features/metadata-instance-editor/CascadePolicy.scss +15 -1
  85. package/src/features/metadata-instance-editor/CascadePolicy.stories.js +31 -0
  86. package/src/features/metadata-instance-editor/Instance.js +23 -3
  87. package/src/features/metadata-instance-editor/Instances.js +3 -0
  88. package/src/features/metadata-instance-editor/MetadataInstanceEditor.js +3 -0
  89. package/src/features/metadata-instance-editor/__tests__/CascadePolicy.test.js +51 -0
  90. package/src/features/metadata-instance-editor/__tests__/__snapshots__/CascadePolicy.test.js.snap +9 -9
  91. package/src/features/metadata-instance-editor/__tests__/__snapshots__/Instance.test.js.snap +4 -1
  92. package/src/features/metadata-instance-editor/__tests__/__snapshots__/Instances.test.js.snap +2 -0
  93. package/src/features/metadata-instance-editor/__tests__/__snapshots__/MetadataInstanceEditor.test.js.snap +1 -0
  94. package/src/features/metadata-instance-editor/messages.js +26 -0
@@ -1210,6 +1210,14 @@ boxui.itemDetails.url = URL-адрес
1210
1210
  boxui.itemDetails.urlPlaceholder = Введите действительный URL-адрес
1211
1211
  # Label for comment options menu
1212
1212
  boxui.media.menuButtonArialLabel = Параметры
1213
+ # Description for AI autofill toggle switch
1214
+ boxui.metadataInstanceEditor.aiAutofillDescription = Use Box AI to automatically extract metadata values.
1215
+ # Learn more link for AI autofill
1216
+ boxui.metadataInstanceEditor.aiAutofillLearnMore = Подробнее
1217
+ # Notice for AI autofill toggle switch
1218
+ boxui.metadataInstanceEditor.aiAutofillNotice = Enabling this feature may involve additional charges. Please review our {pricingLink} for more information.
1219
+ # Pricing details link for AI autofill
1220
+ boxui.metadataInstanceEditor.aiAutofillPricingDetails = pricing details
1213
1221
  # Informational text below collapsible header indicating that all fields for this template are hidden
1214
1222
  boxui.metadataInstanceEditor.allAttributesAreHidden = Все атрибуты этого шаблона скрыты.
1215
1223
  # Informational text below enable cascade policy toggle switch
@@ -1250,6 +1258,8 @@ boxui.metadataInstanceEditor.customValue = Значение
1250
1258
  boxui.metadataInstanceEditor.customValuePlaceholder = Пример: 42
1251
1259
  # Text that shows in a tooltip above the edit pencil button.
1252
1260
  boxui.metadataInstanceEditor.editTooltip = Редактирование метаданных
1261
+ # Label for enable AI autofill toggle switch
1262
+ boxui.metadataInstanceEditor.enableAIAutofill = Box AI Autofill
1253
1263
  # Label for enable cascade policy toggle switch
1254
1264
  boxui.metadataInstanceEditor.enableCascadePolicy = Включить каскадную политику
1255
1265
  # Message for users who may attempt to remove a custom metadata instance for a file. Also non-recoverable
package/i18n/sv-SE.js CHANGED
@@ -605,6 +605,10 @@ export default {
605
605
  "boxui.itemDetails.url": "Webbadress",
606
606
  "boxui.itemDetails.urlPlaceholder": "Ange en giltig URL",
607
607
  "boxui.media.menuButtonArialLabel": "Alternativ",
608
+ "boxui.metadataInstanceEditor.aiAutofillDescription": "Use Box AI to automatically extract metadata values.",
609
+ "boxui.metadataInstanceEditor.aiAutofillLearnMore": "Läs mer",
610
+ "boxui.metadataInstanceEditor.aiAutofillNotice": "Enabling this feature may involve additional charges. Please review our {pricingLink} for more information.",
611
+ "boxui.metadataInstanceEditor.aiAutofillPricingDetails": "pricing details",
608
612
  "boxui.metadataInstanceEditor.allAttributesAreHidden": "Alla attribut i den här mallen har dolts.",
609
613
  "boxui.metadataInstanceEditor.applyCascadePolicyText": "Använd mallen och mallvärdena för alla nya och befintliga objekt i den här mappen med undermappar.",
610
614
  "boxui.metadataInstanceEditor.cannotApplyCascadePolicyText": "Övergripande policy kan inte tillämpas på anpassade metadata just nu.",
@@ -625,6 +629,7 @@ export default {
625
629
  "boxui.metadataInstanceEditor.customValue": "Värde",
626
630
  "boxui.metadataInstanceEditor.customValuePlaceholder": "t.ex. 42",
627
631
  "boxui.metadataInstanceEditor.editTooltip": "Redigera metadata",
632
+ "boxui.metadataInstanceEditor.enableAIAutofill": "Box AI Autofill",
628
633
  "boxui.metadataInstanceEditor.enableCascadePolicy": "Aktivera övergripande policy",
629
634
  "boxui.metadataInstanceEditor.fileMetadataRemoveCustomTemplateConfirm": "Är du säker på att du vill radera dessa anpassade metadata och alla tillhörande värden från den här filen?",
630
635
  "boxui.metadataInstanceEditor.fileMetadataRemoveTemplateConfirm": "Är du säker på att du vill radera \"{metadataName}\" och alla tillhörande värden från den här filen?",
@@ -1210,6 +1210,14 @@ boxui.itemDetails.url = Webbadress
1210
1210
  boxui.itemDetails.urlPlaceholder = Ange en giltig URL
1211
1211
  # Label for comment options menu
1212
1212
  boxui.media.menuButtonArialLabel = Alternativ
1213
+ # Description for AI autofill toggle switch
1214
+ boxui.metadataInstanceEditor.aiAutofillDescription = Use Box AI to automatically extract metadata values.
1215
+ # Learn more link for AI autofill
1216
+ boxui.metadataInstanceEditor.aiAutofillLearnMore = Läs mer
1217
+ # Notice for AI autofill toggle switch
1218
+ boxui.metadataInstanceEditor.aiAutofillNotice = Enabling this feature may involve additional charges. Please review our {pricingLink} for more information.
1219
+ # Pricing details link for AI autofill
1220
+ boxui.metadataInstanceEditor.aiAutofillPricingDetails = pricing details
1213
1221
  # Informational text below collapsible header indicating that all fields for this template are hidden
1214
1222
  boxui.metadataInstanceEditor.allAttributesAreHidden = Alla attribut i den här mallen har dolts.
1215
1223
  # Informational text below enable cascade policy toggle switch
@@ -1250,6 +1258,8 @@ boxui.metadataInstanceEditor.customValue = Värde
1250
1258
  boxui.metadataInstanceEditor.customValuePlaceholder = t.ex. 42
1251
1259
  # Text that shows in a tooltip above the edit pencil button.
1252
1260
  boxui.metadataInstanceEditor.editTooltip = Redigera metadata
1261
+ # Label for enable AI autofill toggle switch
1262
+ boxui.metadataInstanceEditor.enableAIAutofill = Box AI Autofill
1253
1263
  # Label for enable cascade policy toggle switch
1254
1264
  boxui.metadataInstanceEditor.enableCascadePolicy = Aktivera övergripande policy
1255
1265
  # Message for users who may attempt to remove a custom metadata instance for a file. Also non-recoverable
package/i18n/tr-TR.js CHANGED
@@ -605,6 +605,10 @@ export default {
605
605
  "boxui.itemDetails.url": "URL",
606
606
  "boxui.itemDetails.urlPlaceholder": "Geçerli bir URL girin",
607
607
  "boxui.media.menuButtonArialLabel": "Seçenekler",
608
+ "boxui.metadataInstanceEditor.aiAutofillDescription": "Use Box AI to automatically extract metadata values.",
609
+ "boxui.metadataInstanceEditor.aiAutofillLearnMore": "Daha fazla bilgi edinin",
610
+ "boxui.metadataInstanceEditor.aiAutofillNotice": "Enabling this feature may involve additional charges. Please review our {pricingLink} for more information.",
611
+ "boxui.metadataInstanceEditor.aiAutofillPricingDetails": "pricing details",
608
612
  "boxui.metadataInstanceEditor.allAttributesAreHidden": "Bu şablondaki tüm özellikler gizli.",
609
613
  "boxui.metadataInstanceEditor.applyCascadePolicyText": "Şablonu ve değerlerini, bu klasör ve alt klasörlerindeki tüm yeni ve mevcut öğelere uygulayın.",
610
614
  "boxui.metadataInstanceEditor.cannotApplyCascadePolicyText": "Alt klasörlere uygulama ilkesi şu anda özel meta verilere uygulanamıyor",
@@ -625,6 +629,7 @@ export default {
625
629
  "boxui.metadataInstanceEditor.customValue": "Değer",
626
630
  "boxui.metadataInstanceEditor.customValuePlaceholder": "ör. 42",
627
631
  "boxui.metadataInstanceEditor.editTooltip": "Meta Verileri Düzenle",
632
+ "boxui.metadataInstanceEditor.enableAIAutofill": "Box AI Autofill",
628
633
  "boxui.metadataInstanceEditor.enableCascadePolicy": "Alt Klasörlere Uygulama İlkesini Etkinleştir",
629
634
  "boxui.metadataInstanceEditor.fileMetadataRemoveCustomTemplateConfirm": "Bu özel meta veriyi ve tüm değerlerini dosyadan silmek istediğinizden emin misiniz?",
630
635
  "boxui.metadataInstanceEditor.fileMetadataRemoveTemplateConfirm": "Bu \"{metadataName}\" öğesini ve tüm değerlerini bu dosyadan silmek istediğinizden emin misiniz?",
@@ -1210,6 +1210,14 @@ boxui.itemDetails.url = URL
1210
1210
  boxui.itemDetails.urlPlaceholder = Geçerli bir URL girin
1211
1211
  # Label for comment options menu
1212
1212
  boxui.media.menuButtonArialLabel = Seçenekler
1213
+ # Description for AI autofill toggle switch
1214
+ boxui.metadataInstanceEditor.aiAutofillDescription = Use Box AI to automatically extract metadata values.
1215
+ # Learn more link for AI autofill
1216
+ boxui.metadataInstanceEditor.aiAutofillLearnMore = Daha fazla bilgi edinin
1217
+ # Notice for AI autofill toggle switch
1218
+ boxui.metadataInstanceEditor.aiAutofillNotice = Enabling this feature may involve additional charges. Please review our {pricingLink} for more information.
1219
+ # Pricing details link for AI autofill
1220
+ boxui.metadataInstanceEditor.aiAutofillPricingDetails = pricing details
1213
1221
  # Informational text below collapsible header indicating that all fields for this template are hidden
1214
1222
  boxui.metadataInstanceEditor.allAttributesAreHidden = Bu şablondaki tüm özellikler gizli.
1215
1223
  # Informational text below enable cascade policy toggle switch
@@ -1250,6 +1258,8 @@ boxui.metadataInstanceEditor.customValue = Değer
1250
1258
  boxui.metadataInstanceEditor.customValuePlaceholder = ör. 42
1251
1259
  # Text that shows in a tooltip above the edit pencil button.
1252
1260
  boxui.metadataInstanceEditor.editTooltip = Meta Verileri Düzenle
1261
+ # Label for enable AI autofill toggle switch
1262
+ boxui.metadataInstanceEditor.enableAIAutofill = Box AI Autofill
1253
1263
  # Label for enable cascade policy toggle switch
1254
1264
  boxui.metadataInstanceEditor.enableCascadePolicy = Alt Klasörlere Uygulama İlkesini Etkinleştir
1255
1265
  # Message for users who may attempt to remove a custom metadata instance for a file. Also non-recoverable
package/i18n/zh-CN.js CHANGED
@@ -605,6 +605,10 @@ export default {
605
605
  "boxui.itemDetails.url": "URL",
606
606
  "boxui.itemDetails.urlPlaceholder": "输入有效的 URL",
607
607
  "boxui.media.menuButtonArialLabel": "选项",
608
+ "boxui.metadataInstanceEditor.aiAutofillDescription": "Use Box AI to automatically extract metadata values.",
609
+ "boxui.metadataInstanceEditor.aiAutofillLearnMore": "了解更多",
610
+ "boxui.metadataInstanceEditor.aiAutofillNotice": "Enabling this feature may involve additional charges. Please review our {pricingLink} for more information.",
611
+ "boxui.metadataInstanceEditor.aiAutofillPricingDetails": "pricing details",
608
612
  "boxui.metadataInstanceEditor.allAttributesAreHidden": "此模板中的所有属性都已隐藏。",
609
613
  "boxui.metadataInstanceEditor.applyCascadePolicyText": "将模板及其值应用于此文件夹及其子文件夹中的所有新项目和现有项目。",
610
614
  "boxui.metadataInstanceEditor.cannotApplyCascadePolicyText": "级联策略目前不适用于自定义元数据。",
@@ -625,6 +629,7 @@ export default {
625
629
  "boxui.metadataInstanceEditor.customValue": "值",
626
630
  "boxui.metadataInstanceEditor.customValuePlaceholder": "例如 42",
627
631
  "boxui.metadataInstanceEditor.editTooltip": "编辑元数据",
632
+ "boxui.metadataInstanceEditor.enableAIAutofill": "Box AI Autofill",
628
633
  "boxui.metadataInstanceEditor.enableCascadePolicy": "启用级联策略",
629
634
  "boxui.metadataInstanceEditor.fileMetadataRemoveCustomTemplateConfirm": "是否确定要从此文件中删除此自定义元数据及其所有值?",
630
635
  "boxui.metadataInstanceEditor.fileMetadataRemoveTemplateConfirm": "是否确定要从此文件中删除 \"{metadataName}\" 及其所有值?",
@@ -1210,6 +1210,14 @@ boxui.itemDetails.url = URL
1210
1210
  boxui.itemDetails.urlPlaceholder = 输入有效的 URL
1211
1211
  # Label for comment options menu
1212
1212
  boxui.media.menuButtonArialLabel = 选项
1213
+ # Description for AI autofill toggle switch
1214
+ boxui.metadataInstanceEditor.aiAutofillDescription = Use Box AI to automatically extract metadata values.
1215
+ # Learn more link for AI autofill
1216
+ boxui.metadataInstanceEditor.aiAutofillLearnMore = 了解更多
1217
+ # Notice for AI autofill toggle switch
1218
+ boxui.metadataInstanceEditor.aiAutofillNotice = Enabling this feature may involve additional charges. Please review our {pricingLink} for more information.
1219
+ # Pricing details link for AI autofill
1220
+ boxui.metadataInstanceEditor.aiAutofillPricingDetails = pricing details
1213
1221
  # Informational text below collapsible header indicating that all fields for this template are hidden
1214
1222
  boxui.metadataInstanceEditor.allAttributesAreHidden = 此模板中的所有属性都已隐藏。
1215
1223
  # Informational text below enable cascade policy toggle switch
@@ -1250,6 +1258,8 @@ boxui.metadataInstanceEditor.customValue = 值
1250
1258
  boxui.metadataInstanceEditor.customValuePlaceholder = 例如 42
1251
1259
  # Text that shows in a tooltip above the edit pencil button.
1252
1260
  boxui.metadataInstanceEditor.editTooltip = 编辑元数据
1261
+ # Label for enable AI autofill toggle switch
1262
+ boxui.metadataInstanceEditor.enableAIAutofill = Box AI Autofill
1253
1263
  # Label for enable cascade policy toggle switch
1254
1264
  boxui.metadataInstanceEditor.enableCascadePolicy = 启用级联策略
1255
1265
  # Message for users who may attempt to remove a custom metadata instance for a file. Also non-recoverable
package/i18n/zh-TW.js CHANGED
@@ -605,6 +605,10 @@ export default {
605
605
  "boxui.itemDetails.url": "URL",
606
606
  "boxui.itemDetails.urlPlaceholder": "輸入有效的 URL",
607
607
  "boxui.media.menuButtonArialLabel": "選項",
608
+ "boxui.metadataInstanceEditor.aiAutofillDescription": "Use Box AI to automatically extract metadata values.",
609
+ "boxui.metadataInstanceEditor.aiAutofillLearnMore": "詳細資訊",
610
+ "boxui.metadataInstanceEditor.aiAutofillNotice": "Enabling this feature may involve additional charges. Please review our {pricingLink} for more information.",
611
+ "boxui.metadataInstanceEditor.aiAutofillPricingDetails": "pricing details",
608
612
  "boxui.metadataInstanceEditor.allAttributesAreHidden": "此範本中的所有屬性皆已隱藏。",
609
613
  "boxui.metadataInstanceEditor.applyCascadePolicyText": "將範本及其值套用到此資料夾和其子資料夾中的所有新項目與現有項目。",
610
614
  "boxui.metadataInstanceEditor.cannotApplyCascadePolicyText": "向下套用原則目前無法套用到自訂中繼資料。",
@@ -625,6 +629,7 @@ export default {
625
629
  "boxui.metadataInstanceEditor.customValue": "值",
626
630
  "boxui.metadataInstanceEditor.customValuePlaceholder": "例如 42",
627
631
  "boxui.metadataInstanceEditor.editTooltip": "編輯中繼資料",
632
+ "boxui.metadataInstanceEditor.enableAIAutofill": "Box AI Autofill",
628
633
  "boxui.metadataInstanceEditor.enableCascadePolicy": "啟用向下套用原則",
629
634
  "boxui.metadataInstanceEditor.fileMetadataRemoveCustomTemplateConfirm": "確定要從此檔案刪除此自訂中繼資料及其所有值?",
630
635
  "boxui.metadataInstanceEditor.fileMetadataRemoveTemplateConfirm": "確定要從此檔案刪除「{metadataName}」及其所有值?",
@@ -1210,6 +1210,14 @@ boxui.itemDetails.url = URL
1210
1210
  boxui.itemDetails.urlPlaceholder = 輸入有效的 URL
1211
1211
  # Label for comment options menu
1212
1212
  boxui.media.menuButtonArialLabel = 選項
1213
+ # Description for AI autofill toggle switch
1214
+ boxui.metadataInstanceEditor.aiAutofillDescription = Use Box AI to automatically extract metadata values.
1215
+ # Learn more link for AI autofill
1216
+ boxui.metadataInstanceEditor.aiAutofillLearnMore = 詳細資訊
1217
+ # Notice for AI autofill toggle switch
1218
+ boxui.metadataInstanceEditor.aiAutofillNotice = Enabling this feature may involve additional charges. Please review our {pricingLink} for more information.
1219
+ # Pricing details link for AI autofill
1220
+ boxui.metadataInstanceEditor.aiAutofillPricingDetails = pricing details
1213
1221
  # Informational text below collapsible header indicating that all fields for this template are hidden
1214
1222
  boxui.metadataInstanceEditor.allAttributesAreHidden = 此範本中的所有屬性皆已隱藏。
1215
1223
  # Informational text below enable cascade policy toggle switch
@@ -1250,6 +1258,8 @@ boxui.metadataInstanceEditor.customValue = 值
1250
1258
  boxui.metadataInstanceEditor.customValuePlaceholder = 例如 42
1251
1259
  # Text that shows in a tooltip above the edit pencil button.
1252
1260
  boxui.metadataInstanceEditor.editTooltip = 編輯中繼資料
1261
+ # Label for enable AI autofill toggle switch
1262
+ boxui.metadataInstanceEditor.enableAIAutofill = Box AI Autofill
1253
1263
  # Label for enable cascade policy toggle switch
1254
1264
  boxui.metadataInstanceEditor.enableCascadePolicy = 啟用向下套用原則
1255
1265
  # Message for users who may attempt to remove a custom metadata instance for a file. Also non-recoverable
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "box-ui-elements",
3
- "version": "23.3.0-beta.5",
3
+ "version": "23.3.0-beta.7",
4
4
  "description": "Box UI Elements",
5
5
  "author": "Box (https://www.box.com/)",
6
6
  "license": "SEE LICENSE IN LICENSE",
@@ -52,7 +52,7 @@
52
52
  "build:prod:dist": "NODE_ENV=production webpack --config scripts/webpack.config.js --mode production",
53
53
  "build:prod:examples": "LANGUAGE=en-US REACT=true NODE_ENV=production node --max_old_space_size=8192 node_modules/.bin/styleguidist build --config scripts/styleguide.config.js --mode production",
54
54
  "build:prod:npm": "BABEL_ENV=production OUTPUT=dist LANGUAGE=en-US REACT=true yarn build:prod:dist",
55
- "build:prod:storybook": "LANGUAGE=en-US REACT=true BROWSERSLIST_ENV=production BABEL_ENV=development NODE_ENV=development storybook build -c .storybook -o styleguide/storybook",
55
+ "build:prod:storybook": "LANGUAGE=en-US REACT=true BROWSERSLIST_ENV=production BABEL_ENV=development NODE_ENV=development storybook build -c .storybook -o storybook",
56
56
  "build:sync": "LANGUAGE=en-US BABEL_ENV=development NODE_ENV=development RSYNC=true webpack --config scripts/webpack.config.js --mode development",
57
57
  "chromatic": "chromatic",
58
58
  "clean": "rm -rf dist es i18n/json i18n/*.js reports styleguide",
@@ -2,6 +2,10 @@
2
2
  import * as React from 'react';
3
3
  import { FormattedMessage } from 'react-intl';
4
4
 
5
+ import { BoxAiAgentSelector } from '@box/box-ai-agent-selector';
6
+ import { InlineNotice, TooltipProvider } from '@box/blueprint-web';
7
+ import BoxAiLogo from '@box/blueprint-web-assets/icons/Logo/BoxAiLogo';
8
+
5
9
  import Toggle from '../../components/toggle';
6
10
  import { RadioButton, RadioGroup } from '../../components/radio';
7
11
  import Link from '../../components/link/Link';
@@ -10,12 +14,30 @@ import messages from './messages';
10
14
  import './CascadePolicy.scss';
11
15
 
12
16
  const COMMUNITY_LINK = 'https://support.box.com/hc/en-us/articles/360044195873-Cascading-metadata-in-folders';
17
+ const AI_LINK = 'https://www.box.com/ai';
18
+ const PRICING_LINK = 'https://www.box.com/pricing';
19
+
20
+ const agents = [
21
+ {
22
+ id: '1',
23
+ name: 'Basic',
24
+ isEnterpriseDefault: true,
25
+ },
26
+ {
27
+ id: '2',
28
+ name: 'Enhanced (Gemini 2.5 Pro)',
29
+ isEnterpriseDefault: false,
30
+ },
31
+ ];
13
32
 
14
33
  type Props = {
15
34
  canEdit: boolean,
35
+ canUseAIFolderExtraction: boolean,
36
+ isAIFolderExtractionEnabled: boolean,
16
37
  isCascadingEnabled: boolean,
17
38
  isCascadingOverwritten: boolean,
18
39
  isCustomMetadata: boolean,
40
+ onAIFolderExtractionToggle: (value: boolean) => void,
19
41
  onCascadeModeChange: (value: boolean) => void,
20
42
  onCascadeToggle: (value: boolean) => void,
21
43
  shouldShowCascadeOptions: boolean,
@@ -23,9 +45,12 @@ type Props = {
23
45
 
24
46
  const CascadePolicy = ({
25
47
  canEdit,
48
+ canUseAIFolderExtraction,
26
49
  isCascadingEnabled,
27
50
  isCascadingOverwritten,
28
51
  isCustomMetadata,
52
+ isAIFolderExtractionEnabled,
53
+ onAIFolderExtractionToggle,
29
54
  onCascadeToggle,
30
55
  onCascadeModeChange,
31
56
  shouldShowCascadeOptions,
@@ -57,7 +82,7 @@ const CascadePolicy = ({
57
82
  <div className="cascade-policy-text">
58
83
  <FormattedMessage {...messages.applyCascadePolicyText} />
59
84
  &nbsp;
60
- <Link className="cascade-policy-learnmore-link" href={COMMUNITY_LINK} target="_blank">
85
+ <Link className="cascade-policy-link" href={COMMUNITY_LINK} target="_blank">
61
86
  <FormattedMessage {...messages.cascadePolicyLearnMore} />
62
87
  </Link>
63
88
  </div>
@@ -96,6 +121,52 @@ const CascadePolicy = ({
96
121
  </div>
97
122
  </div>
98
123
  )}
124
+ {shouldShowCascadeOptions && canUseAIFolderExtraction && (
125
+ <div className="metadata-cascade-editor" data-testid="ai-folder-extraction">
126
+ <div className="metadata-cascade-enable">
127
+ <div>
128
+ <BoxAiLogo className="metadata-cascade-ai-logo" width={16} height={16} />
129
+ <FormattedMessage tagName="strong" {...messages.enableAIAutofill} />
130
+ <Toggle
131
+ className="metadata-cascade-toggle"
132
+ isOn={isAIFolderExtractionEnabled}
133
+ label=""
134
+ onChange={e => onAIFolderExtractionToggle(e.target.checked)}
135
+ />
136
+ </div>
137
+ <div className="cascade-policy-text">
138
+ <FormattedMessage {...messages.aiAutofillDescription} />
139
+ &nbsp;
140
+ <Link className="cascade-policy-link" href={AI_LINK} target="_blank">
141
+ <FormattedMessage {...messages.aiAutofillLearnMore} />
142
+ </Link>
143
+ </div>
144
+ <div className="metadata-cascade-ai-agent-selector">
145
+ <TooltipProvider>
146
+ <BoxAiAgentSelector
147
+ agents={agents}
148
+ onErrorAction={() => {}}
149
+ requestState="success"
150
+ selectedAgent={agents[0]}
151
+ variant="sidebar"
152
+ />
153
+ </TooltipProvider>
154
+ </div>
155
+ <InlineNotice className="metadata-cascade-ai-notice" variant="info">
156
+ <FormattedMessage
157
+ {...messages.aiAutofillNotice}
158
+ values={{
159
+ pricingLink: (
160
+ <Link className="cascade-policy-link" href={PRICING_LINK} target="_blank">
161
+ <FormattedMessage {...messages.aiAutofillPricingDetails} />
162
+ </Link>
163
+ ),
164
+ }}
165
+ />
166
+ </InlineNotice>
167
+ </div>
168
+ </div>
169
+ )}
99
170
  </>
100
171
  ) : (
101
172
  readOnlyState
@@ -40,6 +40,16 @@ $cascade-policy-background: #f1e2fd;
40
40
  .metadata-cascade-enable {
41
41
  margin: 10px 0;
42
42
  padding: 14px 15px;
43
+
44
+ .metadata-cascade-ai-logo {
45
+ position: relative;
46
+ top: 3px;
47
+ margin-right: 3px;
48
+ }
49
+
50
+ .metadata-cascade-ai-notice {
51
+ margin-top: 12px;
52
+ }
43
53
  }
44
54
 
45
55
  .toggle-container.metadata-cascade-toggle {
@@ -52,7 +62,7 @@ $cascade-policy-background: #f1e2fd;
52
62
  clear: left;
53
63
  }
54
64
 
55
- .cascade-policy-learnmore-link {
65
+ .cascade-policy-link {
56
66
  color: $bdl-box-blue;
57
67
  }
58
68
 
@@ -68,3 +78,7 @@ $cascade-policy-background: #f1e2fd;
68
78
  }
69
79
  }
70
80
  }
81
+
82
+ .metadata-cascade-ai-agent-selector {
83
+ margin-top: 4px;
84
+ }
@@ -0,0 +1,31 @@
1
+ import * as React from 'react';
2
+
3
+ import CascadePolicy from './CascadePolicy';
4
+
5
+ export const withoutAIMetadataExtraction = () => (
6
+ <CascadePolicy
7
+ canEdit
8
+ isCascadingEnabled
9
+ onCascadeModeChange={() => {}}
10
+ onCascadeToggle={() => {}}
11
+ shouldShowCascadeOptions
12
+ />
13
+ );
14
+
15
+ export const withAIMetadataExtraction = () => (
16
+ <CascadePolicy
17
+ canEdit
18
+ canUseAIFolderExtraction
19
+ isAIFolderExtractionEnabled
20
+ isCascadingEnabled
21
+ onAIFolderExtractionToggle={() => {}}
22
+ onCascadeModeChange={() => {}}
23
+ onCascadeToggle={() => {}}
24
+ shouldShowCascadeOptions
25
+ />
26
+ );
27
+
28
+ export default {
29
+ title: 'Features/Metadata Instance Editor/CascadePolicy',
30
+ component: CascadePolicy,
31
+ };
@@ -47,6 +47,7 @@ import './Instance.scss';
47
47
 
48
48
  type Props = {
49
49
  canEdit: boolean,
50
+ canUseAIFolderExtraction?: boolean,
50
51
  cascadePolicy?: MetadataCascadePolicy, // eslint-disable-line
51
52
  data: MetadataFields,
52
53
  hasError: boolean,
@@ -69,6 +70,7 @@ type Props = {
69
70
  type State = {
70
71
  data: Object,
71
72
  errors: { [string]: React.Node },
73
+ isAIFolderExtractionEnabled: boolean,
72
74
  isBusy: boolean,
73
75
  isCascadingEnabled: boolean,
74
76
  isCascadingOverwritten: boolean,
@@ -327,21 +329,28 @@ class Instance extends React.PureComponent<Props, State> {
327
329
  );
328
330
  };
329
331
 
332
+ onAIFolderExtractionToggle = (value: boolean) => {
333
+ this.setState({ isAIFolderExtractionEnabled: value }, this.setDirty);
334
+ };
335
+
330
336
  /**
331
337
  * Returns the state from props
332
338
  *
333
339
  * @return {Object} - react state
334
340
  */
335
341
  getState(props: Props): State {
342
+ const isCascadingEnabled = this.isCascadingEnabled(props);
343
+
336
344
  return {
337
345
  data: cloneDeep(props.data),
338
346
  errors: {},
347
+ isAIFolderExtractionEnabled: false,
339
348
  isBusy: false,
340
- isCascadingEnabled: this.isCascadingEnabled(props),
349
+ isCascadingEnabled,
341
350
  isCascadingOverwritten: false,
342
351
  isEditing: false,
343
352
  shouldConfirmRemove: false,
344
- shouldShowCascadeOptions: false,
353
+ shouldShowCascadeOptions: isCascadingEnabled,
345
354
  };
346
355
  }
347
356
 
@@ -579,12 +588,20 @@ class Instance extends React.PureComponent<Props, State> {
579
588
  };
580
589
 
581
590
  render() {
582
- const { cascadePolicy = {}, isDirty, isCascadingPolicyApplicable, isOpen, template }: Props = this.props;
591
+ const {
592
+ canUseAIFolderExtraction = false,
593
+ cascadePolicy = {},
594
+ isDirty,
595
+ isCascadingPolicyApplicable,
596
+ isOpen,
597
+ template,
598
+ }: Props = this.props;
583
599
  const { fields = [] } = template;
584
600
  const {
585
601
  data,
586
602
  errors,
587
603
  isBusy,
604
+ isAIFolderExtractionEnabled,
588
605
  isCascadingEnabled,
589
606
  shouldConfirmRemove,
590
607
  shouldShowCascadeOptions,
@@ -629,9 +646,12 @@ class Instance extends React.PureComponent<Props, State> {
629
646
  {isCascadingPolicyApplicable && (
630
647
  <CascadePolicy
631
648
  canEdit={isEditing && !!cascadePolicy.canEdit}
649
+ canUseAIFolderExtraction={canUseAIFolderExtraction}
650
+ isAIFolderExtractionEnabled={isAIFolderExtractionEnabled}
632
651
  isCascadingEnabled={isCascadingEnabled}
633
652
  isCascadingOverwritten={isCascadingOverwritten}
634
653
  isCustomMetadata={isProperties}
654
+ onAIFolderExtractionToggle={this.onAIFolderExtractionToggle}
635
655
  onCascadeModeChange={this.onCascadeModeChange}
636
656
  onCascadeToggle={this.onCascadeToggle}
637
657
  shouldShowCascadeOptions={shouldShowCascadeOptions}
@@ -6,6 +6,7 @@ import type { MetadataEditor, MetadataCascadingPolicyData } from '../../common/t
6
6
  import type { JSONPatchOperations } from '../../common/types/api';
7
7
 
8
8
  type Props = {
9
+ canUseAIFolderExtraction?: boolean,
9
10
  editors?: Array<MetadataEditor>,
10
11
  isCascadingPolicyApplicable?: boolean,
11
12
  onModification?: (id: string, isDirty: boolean) => void,
@@ -20,6 +21,7 @@ type Props = {
20
21
  };
21
22
 
22
23
  const Instances = ({
24
+ canUseAIFolderExtraction = false,
23
25
  isCascadingPolicyApplicable = false,
24
26
  editors = [],
25
27
  onModification,
@@ -34,6 +36,7 @@ const Instances = ({
34
36
  return (
35
37
  <Instance
36
38
  canEdit={instance.canEdit}
39
+ canUseAIFolderExtraction={canUseAIFolderExtraction}
37
40
  cascadePolicy={instance.cascadePolicy}
38
41
  data={instance.data}
39
42
  hasError={hasError}
@@ -14,6 +14,7 @@ import './MetadataInstanceEditor.scss';
14
14
  type Props = {
15
15
  blurExceptionClassNames?: Array<string>,
16
16
  canAdd: boolean,
17
+ canUseAIFolderExtraction?: boolean,
17
18
  editors?: Array<MetadataEditor>,
18
19
  isCascadingPolicyApplicable?: boolean,
19
20
  isDropdownBusy?: boolean,
@@ -35,6 +36,7 @@ type Props = {
35
36
  const MetadataInstanceEditor = ({
36
37
  blurExceptionClassNames,
37
38
  canAdd,
39
+ canUseAIFolderExtraction = false,
38
40
  isCascadingPolicyApplicable = false,
39
41
  isDropdownBusy,
40
42
  editors = [],
@@ -61,6 +63,7 @@ const MetadataInstanceEditor = ({
61
63
  ) : (
62
64
  <ScrollWrapper>
63
65
  <Instances
66
+ canUseAIFolderExtraction={canUseAIFolderExtraction}
64
67
  editors={editors}
65
68
  isCascadingPolicyApplicable={isCascadingPolicyApplicable}
66
69
  onModification={onModification}
@@ -1,5 +1,7 @@
1
1
  import * as React from 'react';
2
2
 
3
+ import { screen, render, within } from '../../../test-utils/testing-library';
4
+
3
5
  import CascadePolicy from '../CascadePolicy';
4
6
 
5
7
  describe('features/metadata-instance-editor/CascadePolicy', () => {
@@ -48,4 +50,53 @@ describe('features/metadata-instance-editor/CascadePolicy', () => {
48
50
  );
49
51
  expect(wrapper).toMatchSnapshot();
50
52
  });
53
+
54
+ test('should render AI folder extraction toggle when canEdit, canUseAIFolderExtraction, and shouldShowCascadeOptions are true', () => {
55
+ render(<CascadePolicy canEdit canUseAIFolderExtraction shouldShowCascadeOptions />);
56
+ expect(screen.getByText('Box AI Autofill')).toBeInTheDocument();
57
+ });
58
+
59
+ test.each([
60
+ [false, false, false],
61
+ [true, false, false],
62
+ [false, true, false],
63
+ [true, true, false],
64
+ ])(
65
+ 'should not render AI folder extraction toggle when canEdit, canUseAIFolderExtraction, and shouldShowCascadeOptions are %s, %s, and %s',
66
+ (canEdit, canUseAIFolderExtraction, shouldShowCascadeOptions) => {
67
+ render(
68
+ <CascadePolicy
69
+ canEdit={canEdit}
70
+ canUseAIFolderExtraction={canUseAIFolderExtraction}
71
+ shouldShowCascadeOptions={shouldShowCascadeOptions}
72
+ />,
73
+ );
74
+ expect(screen.queryByText('Box AI Autofill')).not.toBeInTheDocument();
75
+ },
76
+ );
77
+
78
+ describe('AI Autofill Links', () => {
79
+ test('should render AI and pricing links when AI features are enabled', () => {
80
+ render(<CascadePolicy canEdit canUseAIFolderExtraction shouldShowCascadeOptions />);
81
+
82
+ // Find link within the AI autofill section since there are two links with the same text in the component
83
+ const aiSection = screen.getByTestId('ai-folder-extraction');
84
+ const aiLink = within(aiSection).getByText('Learn more');
85
+ expect(aiLink).toBeInTheDocument();
86
+ expect(aiLink.closest('a')).toHaveAttribute('href', 'https://www.box.com/ai');
87
+ expect(aiLink.closest('a')).toHaveAttribute('target', '_blank');
88
+
89
+ const pricingLink = screen.getByText('pricing details');
90
+ expect(pricingLink).toBeInTheDocument();
91
+ expect(pricingLink.closest('a')).toHaveAttribute('href', 'https://www.box.com/pricing');
92
+ expect(pricingLink.closest('a')).toHaveAttribute('target', '_blank');
93
+ });
94
+ });
95
+
96
+ describe('AI Agent Selector', () => {
97
+ test('should render AI agent selector with default to basic when AI features are enabled', () => {
98
+ render(<CascadePolicy canEdit canUseAIFolderExtraction shouldShowCascadeOptions />);
99
+ expect(screen.getByRole('button', { name: 'Agent Basic' })).toBeInTheDocument();
100
+ });
101
+ });
51
102
  });