box-ui-elements 23.5.0-beta.3 → 24.0.0-beta.1

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 (66) hide show
  1. package/dist/explorer.css +1 -1
  2. package/dist/explorer.js +1 -1
  3. package/dist/picker.js +1 -1
  4. package/dist/preview.css +1 -1
  5. package/dist/preview.js +1 -1
  6. package/dist/sidebar.css +1 -1
  7. package/dist/sidebar.js +1 -1
  8. package/es/constants.js +13 -0
  9. package/es/constants.js.flow +13 -0
  10. package/es/constants.js.map +1 -1
  11. package/es/elements/common/content-answers/ContentAnswersModal.js +1 -3
  12. package/es/elements/common/content-answers/ContentAnswersModal.js.map +1 -1
  13. package/es/elements/common/sub-header/SubHeader.js +3 -0
  14. package/es/elements/common/sub-header/SubHeader.js.map +1 -1
  15. package/es/elements/common/sub-header/SubHeaderLeftV2.js +3 -23
  16. package/es/elements/common/sub-header/SubHeaderLeftV2.js.map +1 -1
  17. package/es/elements/common/sub-header/SubHeaderRight.js +6 -2
  18. package/es/elements/common/sub-header/SubHeaderRight.js.map +1 -1
  19. package/es/elements/content-explorer/ContentExplorer.js +55 -10
  20. package/es/elements/content-explorer/ContentExplorer.js.map +1 -1
  21. package/es/elements/content-explorer/ContentExplorer.scss +12 -0
  22. package/es/elements/content-explorer/MetadataSidePanel.js +92 -0
  23. package/es/elements/content-explorer/MetadataSidePanel.js.map +1 -0
  24. package/es/elements/content-explorer/MetadataSidePanel.scss +12 -0
  25. package/es/elements/content-explorer/stories/tests/MetadataView-visual.stories.js +54 -3
  26. package/es/elements/content-explorer/stories/tests/MetadataView-visual.stories.js.map +1 -1
  27. package/es/elements/content-explorer/utils.js +67 -0
  28. package/es/elements/content-explorer/utils.js.map +1 -0
  29. package/es/elements/content-sidebar/BoxAISidebar.js.map +1 -1
  30. package/es/elements/content-sidebar/BoxAISidebarContent.js +2 -4
  31. package/es/elements/content-sidebar/BoxAISidebarContent.js.map +1 -1
  32. package/es/elements/content-sidebar/stories/BoxAISidebar.stories.js +0 -1
  33. package/es/elements/content-sidebar/stories/BoxAISidebar.stories.js.map +1 -1
  34. package/es/elements/content-sidebar/stories/tests/BoxAISidebar-visual.stories.js +0 -1
  35. package/es/elements/content-sidebar/stories/tests/BoxAISidebar-visual.stories.js.map +1 -1
  36. package/es/src/elements/common/content-answers/ContentAnswersModal.d.ts +0 -1
  37. package/es/src/elements/common/sub-header/SubHeader.d.ts +2 -1
  38. package/es/src/elements/common/sub-header/SubHeaderLeftV2.d.ts +1 -1
  39. package/es/src/elements/common/sub-header/SubHeaderRight.d.ts +4 -1
  40. package/es/src/elements/content-explorer/ContentExplorer.d.ts +15 -0
  41. package/es/src/elements/content-explorer/MetadataSidePanel.d.ts +13 -0
  42. package/es/src/elements/content-explorer/__tests__/MetadataSidePanel.test.d.ts +1 -0
  43. package/es/src/elements/content-explorer/stories/tests/MetadataView-visual.stories.d.ts +2 -0
  44. package/es/src/elements/content-explorer/utils.d.ts +22 -0
  45. package/es/src/elements/content-sidebar/BoxAISidebar.d.ts +0 -1
  46. package/es/src/elements/content-sidebar/stories/BoxAISidebar.stories.d.ts +0 -1
  47. package/package.json +2 -2
  48. package/src/constants.js +13 -0
  49. package/src/elements/common/content-answers/ContentAnswersModal.tsx +0 -3
  50. package/src/elements/common/content-answers/__tests__/ContentAnswersModal.test.tsx +7 -2
  51. package/src/elements/common/sub-header/SubHeader.tsx +4 -0
  52. package/src/elements/common/sub-header/SubHeaderLeftV2.tsx +3 -22
  53. package/src/elements/common/sub-header/SubHeaderRight.tsx +8 -2
  54. package/src/elements/content-explorer/ContentExplorer.scss +12 -0
  55. package/src/elements/content-explorer/ContentExplorer.tsx +135 -77
  56. package/src/elements/content-explorer/MetadataSidePanel.scss +12 -0
  57. package/src/elements/content-explorer/MetadataSidePanel.tsx +126 -0
  58. package/src/elements/content-explorer/__tests__/ContentExplorer.test.tsx +80 -16
  59. package/src/elements/content-explorer/__tests__/MetadataSidePanel.test.tsx +127 -0
  60. package/src/elements/content-explorer/stories/tests/MetadataView-visual.stories.tsx +43 -3
  61. package/src/elements/content-explorer/utils.ts +58 -0
  62. package/src/elements/content-sidebar/BoxAISidebar.tsx +0 -1
  63. package/src/elements/content-sidebar/BoxAISidebarContent.tsx +1 -3
  64. package/src/elements/content-sidebar/__tests__/BoxAISidebar.test.tsx +0 -8
  65. package/src/elements/content-sidebar/stories/BoxAISidebar.stories.tsx +0 -1
  66. package/src/elements/content-sidebar/stories/tests/BoxAISidebar-visual.stories.tsx +0 -1
@@ -0,0 +1,92 @@
1
+ import React, { useState } from 'react';
2
+ import { useIntl } from 'react-intl';
3
+ import { IconButton, SidePanel, Text } from '@box/blueprint-web';
4
+ import { XMark } from '@box/blueprint-web-assets/icons/Fill/index';
5
+ import { FileDefault } from '@box/blueprint-web-assets/icons/Line/index';
6
+ import { AutofillContextProvider, MetadataInstance, MetadataInstanceForm } from '@box/metadata-editor';
7
+ import { getTemplateInstance, useSelectedItemText } from './utils';
8
+ import messages from '../common/messages';
9
+ import './MetadataSidePanel.scss';
10
+ const MetadataSidePanel = ({
11
+ currentCollection,
12
+ onClose,
13
+ selectedItemIds,
14
+ metadataTemplate
15
+ }) => {
16
+ const {
17
+ formatMessage
18
+ } = useIntl();
19
+ const [isEditing, setIsEditing] = useState(false);
20
+ const [isUnsavedChangesModalOpen, setIsUnsavedChangesModalOpen] = useState(false);
21
+ const selectedItemText = useSelectedItemText(currentCollection, selectedItemIds);
22
+ const selectedItems = selectedItemIds === 'all' ? currentCollection.items : currentCollection.items.filter(item => selectedItemIds.has(item.id));
23
+ const templateInstance = getTemplateInstance(metadataTemplate, selectedItems);
24
+ const handleMetadataInstanceEdit = () => {
25
+ setIsEditing(true);
26
+ };
27
+ const handleMetadataInstanceFormCancel = () => {
28
+ setIsEditing(false);
29
+ };
30
+
31
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
32
+ const handleMetadataInstanceFormChange = values => {
33
+ // TODO: Implement on form change
34
+ };
35
+ const handleMetadataInstanceFormDiscardUnsavedChanges = () => {
36
+ setIsUnsavedChangesModalOpen(false);
37
+ setIsEditing(false);
38
+ };
39
+
40
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
41
+ const handleMetadataInstanceFormSubmit = async (values, operations) => {
42
+ // TODO: Implement onSave callback
43
+ };
44
+ return /*#__PURE__*/React.createElement(SidePanel, {
45
+ variant: "persistent"
46
+ }, /*#__PURE__*/React.createElement(SidePanel.Header, null, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Text, {
47
+ as: "span",
48
+ variant: "titleLarge"
49
+ }, formatMessage(messages.sidebarMetadataTitle)), /*#__PURE__*/React.createElement("div", {
50
+ className: "bce-MetadataSidePanel-subtitle"
51
+ }, /*#__PURE__*/React.createElement(FileDefault, null), /*#__PURE__*/React.createElement(Text, {
52
+ as: "span",
53
+ color: "textOnLightSecondary",
54
+ variant: "subtitle"
55
+ }, selectedItemText))), /*#__PURE__*/React.createElement(IconButton, {
56
+ "aria-label": formatMessage(messages.close),
57
+ icon: XMark,
58
+ onClick: onClose,
59
+ size: "large"
60
+ })), /*#__PURE__*/React.createElement(SidePanel.ScrollableContainer, null, /*#__PURE__*/React.createElement("div", {
61
+ className: "bce-MetadataSidePanel-content"
62
+ }, /*#__PURE__*/React.createElement(AutofillContextProvider, {
63
+ fetchSuggestions: null,
64
+ isAiSuggestionsFeatureEnabled: false
65
+ }, isEditing ? /*#__PURE__*/React.createElement(MetadataInstanceForm, {
66
+ areAiSuggestionsAvailable: false,
67
+ isAiSuggestionsFeatureEnabled: false,
68
+ isBetaLanguageEnabled: false,
69
+ isDeleteButtonDisabled: true,
70
+ isDeleteConfirmationModalCheckboxEnabled: false,
71
+ isLargeFile: false,
72
+ isMultilevelTaxonomyFieldEnabled: false,
73
+ isUnsavedChangesModalOpen: isUnsavedChangesModalOpen,
74
+ selectedTemplateInstance: templateInstance,
75
+ onCancel: handleMetadataInstanceFormCancel,
76
+ onChange: handleMetadataInstanceFormChange,
77
+ onDelete: null,
78
+ onDiscardUnsavedChanges: handleMetadataInstanceFormDiscardUnsavedChanges,
79
+ onSubmit: handleMetadataInstanceFormSubmit,
80
+ setIsUnsavedChangesModalOpen: setIsUnsavedChangesModalOpen,
81
+ taxonomyOptionsFetcher: null
82
+ }) : /*#__PURE__*/React.createElement(MetadataInstance, {
83
+ areAiSuggestionsAvailable: false,
84
+ isAiSuggestionsFeatureEnabled: false,
85
+ isBetaLanguageEnabled: false,
86
+ onEdit: handleMetadataInstanceEdit,
87
+ templateInstance: templateInstance,
88
+ taxonomyNodeFetcher: null
89
+ })))));
90
+ };
91
+ export default MetadataSidePanel;
92
+ //# sourceMappingURL=MetadataSidePanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MetadataSidePanel.js","names":["React","useState","useIntl","IconButton","SidePanel","Text","XMark","FileDefault","AutofillContextProvider","MetadataInstance","MetadataInstanceForm","getTemplateInstance","useSelectedItemText","messages","MetadataSidePanel","currentCollection","onClose","selectedItemIds","metadataTemplate","formatMessage","isEditing","setIsEditing","isUnsavedChangesModalOpen","setIsUnsavedChangesModalOpen","selectedItemText","selectedItems","items","filter","item","has","id","templateInstance","handleMetadataInstanceEdit","handleMetadataInstanceFormCancel","handleMetadataInstanceFormChange","values","handleMetadataInstanceFormDiscardUnsavedChanges","handleMetadataInstanceFormSubmit","operations","createElement","variant","Header","as","sidebarMetadataTitle","className","color","close","icon","onClick","size","ScrollableContainer","fetchSuggestions","isAiSuggestionsFeatureEnabled","areAiSuggestionsAvailable","isBetaLanguageEnabled","isDeleteButtonDisabled","isDeleteConfirmationModalCheckboxEnabled","isLargeFile","isMultilevelTaxonomyFieldEnabled","selectedTemplateInstance","onCancel","onChange","onDelete","onDiscardUnsavedChanges","onSubmit","taxonomyOptionsFetcher","onEdit","taxonomyNodeFetcher"],"sources":["../../../src/elements/content-explorer/MetadataSidePanel.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport { useIntl } from 'react-intl';\n\nimport { IconButton, SidePanel, Text } from '@box/blueprint-web';\nimport { XMark } from '@box/blueprint-web-assets/icons/Fill/index';\nimport { FileDefault } from '@box/blueprint-web-assets/icons/Line/index';\nimport {\n AutofillContextProvider,\n FormValues,\n JSONPatchOperations,\n MetadataInstance,\n MetadataInstanceForm,\n} from '@box/metadata-editor';\n\nimport type { Selection } from 'react-aria-components';\nimport type { Collection } from '../../common/types/core';\nimport type { MetadataTemplate } from '../../common/types/metadata';\nimport { getTemplateInstance, useSelectedItemText } from './utils';\n\nimport messages from '../common/messages';\n\nimport './MetadataSidePanel.scss';\n\nexport interface MetadataSidePanelProps {\n currentCollection: Collection;\n onClose: () => void;\n metadataTemplate: MetadataTemplate;\n selectedItemIds: Selection;\n}\n\nconst MetadataSidePanel = ({\n currentCollection,\n onClose,\n selectedItemIds,\n metadataTemplate,\n}: MetadataSidePanelProps) => {\n const { formatMessage } = useIntl();\n const [isEditing, setIsEditing] = useState<boolean>(false);\n const [isUnsavedChangesModalOpen, setIsUnsavedChangesModalOpen] = useState<boolean>(false);\n\n const selectedItemText = useSelectedItemText(currentCollection, selectedItemIds);\n const selectedItems =\n selectedItemIds === 'all'\n ? currentCollection.items\n : currentCollection.items.filter(item => selectedItemIds.has(item.id));\n const templateInstance = getTemplateInstance(metadataTemplate, selectedItems);\n\n const handleMetadataInstanceEdit = () => {\n setIsEditing(true);\n };\n\n const handleMetadataInstanceFormCancel = () => {\n setIsEditing(false);\n };\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const handleMetadataInstanceFormChange = (values: FormValues) => {\n // TODO: Implement on form change\n };\n\n const handleMetadataInstanceFormDiscardUnsavedChanges = () => {\n setIsUnsavedChangesModalOpen(false);\n setIsEditing(false);\n };\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const handleMetadataInstanceFormSubmit = async (values: FormValues, operations: JSONPatchOperations) => {\n // TODO: Implement onSave callback\n };\n\n return (\n <SidePanel variant=\"persistent\">\n <SidePanel.Header>\n <div>\n <Text as=\"span\" variant=\"titleLarge\">\n {formatMessage(messages.sidebarMetadataTitle)}\n </Text>\n <div className=\"bce-MetadataSidePanel-subtitle\">\n <FileDefault />\n <Text as=\"span\" color=\"textOnLightSecondary\" variant=\"subtitle\">\n {selectedItemText}\n </Text>\n </div>\n </div>\n <IconButton aria-label={formatMessage(messages.close)} icon={XMark} onClick={onClose} size=\"large\" />\n </SidePanel.Header>\n <SidePanel.ScrollableContainer>\n <div className=\"bce-MetadataSidePanel-content\">\n <AutofillContextProvider fetchSuggestions={null} isAiSuggestionsFeatureEnabled={false}>\n {isEditing ? (\n <MetadataInstanceForm\n areAiSuggestionsAvailable={false}\n isAiSuggestionsFeatureEnabled={false}\n isBetaLanguageEnabled={false}\n isDeleteButtonDisabled={true}\n isDeleteConfirmationModalCheckboxEnabled={false}\n isLargeFile={false}\n isMultilevelTaxonomyFieldEnabled={false}\n isUnsavedChangesModalOpen={isUnsavedChangesModalOpen}\n selectedTemplateInstance={templateInstance}\n onCancel={handleMetadataInstanceFormCancel}\n onChange={handleMetadataInstanceFormChange}\n onDelete={null}\n onDiscardUnsavedChanges={handleMetadataInstanceFormDiscardUnsavedChanges}\n onSubmit={handleMetadataInstanceFormSubmit}\n setIsUnsavedChangesModalOpen={setIsUnsavedChangesModalOpen}\n taxonomyOptionsFetcher={null}\n />\n ) : (\n <MetadataInstance\n areAiSuggestionsAvailable={false}\n isAiSuggestionsFeatureEnabled={false}\n isBetaLanguageEnabled={false}\n onEdit={handleMetadataInstanceEdit}\n templateInstance={templateInstance}\n taxonomyNodeFetcher={null}\n />\n )}\n </AutofillContextProvider>\n </div>\n </SidePanel.ScrollableContainer>\n </SidePanel>\n );\n};\n\nexport default MetadataSidePanel;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,QAAQ,QAAQ,OAAO;AACvC,SAASC,OAAO,QAAQ,YAAY;AAEpC,SAASC,UAAU,EAAEC,SAAS,EAAEC,IAAI,QAAQ,oBAAoB;AAChE,SAASC,KAAK,QAAQ,4CAA4C;AAClE,SAASC,WAAW,QAAQ,4CAA4C;AACxE,SACIC,uBAAuB,EAGvBC,gBAAgB,EAChBC,oBAAoB,QACjB,sBAAsB;AAK7B,SAASC,mBAAmB,EAAEC,mBAAmB,QAAQ,SAAS;AAElE,OAAOC,QAAQ,MAAM,oBAAoB;AAEzC,OAAO,0BAA0B;AASjC,MAAMC,iBAAiB,GAAGA,CAAC;EACvBC,iBAAiB;EACjBC,OAAO;EACPC,eAAe;EACfC;AACoB,CAAC,KAAK;EAC1B,MAAM;IAAEC;EAAc,CAAC,GAAGjB,OAAO,CAAC,CAAC;EACnC,MAAM,CAACkB,SAAS,EAAEC,YAAY,CAAC,GAAGpB,QAAQ,CAAU,KAAK,CAAC;EAC1D,MAAM,CAACqB,yBAAyB,EAAEC,4BAA4B,CAAC,GAAGtB,QAAQ,CAAU,KAAK,CAAC;EAE1F,MAAMuB,gBAAgB,GAAGZ,mBAAmB,CAACG,iBAAiB,EAAEE,eAAe,CAAC;EAChF,MAAMQ,aAAa,GACfR,eAAe,KAAK,KAAK,GACnBF,iBAAiB,CAACW,KAAK,GACvBX,iBAAiB,CAACW,KAAK,CAACC,MAAM,CAACC,IAAI,IAAIX,eAAe,CAACY,GAAG,CAACD,IAAI,CAACE,EAAE,CAAC,CAAC;EAC9E,MAAMC,gBAAgB,GAAGpB,mBAAmB,CAACO,gBAAgB,EAAEO,aAAa,CAAC;EAE7E,MAAMO,0BAA0B,GAAGA,CAAA,KAAM;IACrCX,YAAY,CAAC,IAAI,CAAC;EACtB,CAAC;EAED,MAAMY,gCAAgC,GAAGA,CAAA,KAAM;IAC3CZ,YAAY,CAAC,KAAK,CAAC;EACvB,CAAC;;EAED;EACA,MAAMa,gCAAgC,GAAIC,MAAkB,IAAK;IAC7D;EAAA,CACH;EAED,MAAMC,+CAA+C,GAAGA,CAAA,KAAM;IAC1Db,4BAA4B,CAAC,KAAK,CAAC;IACnCF,YAAY,CAAC,KAAK,CAAC;EACvB,CAAC;;EAED;EACA,MAAMgB,gCAAgC,GAAG,MAAAA,CAAOF,MAAkB,EAAEG,UAA+B,KAAK;IACpG;EAAA,CACH;EAED,oBACItC,KAAA,CAAAuC,aAAA,CAACnC,SAAS;IAACoC,OAAO,EAAC;EAAY,gBAC3BxC,KAAA,CAAAuC,aAAA,CAACnC,SAAS,CAACqC,MAAM,qBACbzC,KAAA,CAAAuC,aAAA,2BACIvC,KAAA,CAAAuC,aAAA,CAAClC,IAAI;IAACqC,EAAE,EAAC,MAAM;IAACF,OAAO,EAAC;EAAY,GAC/BrB,aAAa,CAACN,QAAQ,CAAC8B,oBAAoB,CAC1C,CAAC,eACP3C,KAAA,CAAAuC,aAAA;IAAKK,SAAS,EAAC;EAAgC,gBAC3C5C,KAAA,CAAAuC,aAAA,CAAChC,WAAW,MAAE,CAAC,eACfP,KAAA,CAAAuC,aAAA,CAAClC,IAAI;IAACqC,EAAE,EAAC,MAAM;IAACG,KAAK,EAAC,sBAAsB;IAACL,OAAO,EAAC;EAAU,GAC1DhB,gBACC,CACL,CACJ,CAAC,eACNxB,KAAA,CAAAuC,aAAA,CAACpC,UAAU;IAAC,cAAYgB,aAAa,CAACN,QAAQ,CAACiC,KAAK,CAAE;IAACC,IAAI,EAAEzC,KAAM;IAAC0C,OAAO,EAAEhC,OAAQ;IAACiC,IAAI,EAAC;EAAO,CAAE,CACtF,CAAC,eACnBjD,KAAA,CAAAuC,aAAA,CAACnC,SAAS,CAAC8C,mBAAmB,qBAC1BlD,KAAA,CAAAuC,aAAA;IAAKK,SAAS,EAAC;EAA+B,gBAC1C5C,KAAA,CAAAuC,aAAA,CAAC/B,uBAAuB;IAAC2C,gBAAgB,EAAE,IAAK;IAACC,6BAA6B,EAAE;EAAM,GACjFhC,SAAS,gBACNpB,KAAA,CAAAuC,aAAA,CAAC7B,oBAAoB;IACjB2C,yBAAyB,EAAE,KAAM;IACjCD,6BAA6B,EAAE,KAAM;IACrCE,qBAAqB,EAAE,KAAM;IAC7BC,sBAAsB,EAAE,IAAK;IAC7BC,wCAAwC,EAAE,KAAM;IAChDC,WAAW,EAAE,KAAM;IACnBC,gCAAgC,EAAE,KAAM;IACxCpC,yBAAyB,EAAEA,yBAA0B;IACrDqC,wBAAwB,EAAE5B,gBAAiB;IAC3C6B,QAAQ,EAAE3B,gCAAiC;IAC3C4B,QAAQ,EAAE3B,gCAAiC;IAC3C4B,QAAQ,EAAE,IAAK;IACfC,uBAAuB,EAAE3B,+CAAgD;IACzE4B,QAAQ,EAAE3B,gCAAiC;IAC3Cd,4BAA4B,EAAEA,4BAA6B;IAC3D0C,sBAAsB,EAAE;EAAK,CAChC,CAAC,gBAEFjE,KAAA,CAAAuC,aAAA,CAAC9B,gBAAgB;IACb4C,yBAAyB,EAAE,KAAM;IACjCD,6BAA6B,EAAE,KAAM;IACrCE,qBAAqB,EAAE,KAAM;IAC7BY,MAAM,EAAElC,0BAA2B;IACnCD,gBAAgB,EAAEA,gBAAiB;IACnCoC,mBAAmB,EAAE;EAAK,CAC7B,CAEgB,CACxB,CACsB,CACxB,CAAC;AAEpB,CAAC;AAED,eAAerD,iBAAiB","ignoreList":[]}
@@ -0,0 +1,12 @@
1
+ .bce-MetadataSidePanel-subtitle {
2
+ display: flex;
3
+ align-items: center;
4
+ }
5
+
6
+ .bce-MetadataSidePanel-content {
7
+ padding: var(--space-4);
8
+
9
+ [data-target-id='TextButton-deleteButton'] {
10
+ visibility: hidden;
11
+ }
12
+ }
@@ -26,7 +26,7 @@ const metadataFieldNamePrefix = `metadata.${metadataScopeAndKey}`;
26
26
  const metadataQuery = {
27
27
  from: metadataScopeAndKey,
28
28
  ancestor_folder_id: '0',
29
- sort_by: [{
29
+ order_by: [{
30
30
  field_key: `${metadataFieldNamePrefix}.${mockSchema.fields[0].key}`,
31
31
  // Default to sorting by the first field in the schema
32
32
  direction: 'asc'
@@ -58,14 +58,14 @@ const columns = [{
58
58
  textValue: 'Name',
59
59
  id: 'name',
60
60
  type: 'string',
61
- allowSorting: true,
61
+ allowsSorting: true,
62
62
  minWidth: 150,
63
63
  maxWidth: 150
64
64
  }, ...mockSchema.fields.map(field => ({
65
65
  textValue: field.displayName,
66
66
  id: `${metadataFieldNamePrefix}.${field.key}`,
67
67
  type: field.type,
68
- allowSorting: true,
68
+ allowsSorting: true,
69
69
  minWidth: 150,
70
70
  maxWidth: 150
71
71
  }))];
@@ -95,6 +95,27 @@ const metadataViewV2ElementProps = {
95
95
  export const metadataViewV2 = {
96
96
  args: metadataViewV2ElementProps
97
97
  };
98
+
99
+ // @TODO Assert that rows are actually sorted in a different order, once handleSortChange is implemented
100
+ export const metadataViewV2SortsFromHeader = {
101
+ args: metadataViewV2ElementProps,
102
+ play: async ({
103
+ canvas
104
+ }) => {
105
+ await waitFor(() => {
106
+ expect(canvas.getByRole('row', {
107
+ name: /Industry/i
108
+ })).toBeInTheDocument();
109
+ });
110
+ const firstRow = canvas.getByRole('row', {
111
+ name: /Industry/i
112
+ });
113
+ const industryHeader = within(firstRow).getByRole('columnheader', {
114
+ name: 'Industry'
115
+ });
116
+ userEvent.click(industryHeader);
117
+ }
118
+ };
98
119
  export const metadataViewV2WithCustomActions = {
99
120
  args: _objectSpread(_objectSpread({}, metadataViewV2ElementProps), {}, {
100
121
  metadataViewProps: {
@@ -177,6 +198,36 @@ export const metadataViewV2WithInitialFilterValues = {
177
198
  expect(fileTypeChip).toHaveTextContent(/\+2/);
178
199
  }
179
200
  };
201
+ export const sidePanelOpenWithSingleItemSelected = {
202
+ args: _objectSpread(_objectSpread({}, metadataViewV2ElementProps), {}, {
203
+ metadataViewProps: {
204
+ columns,
205
+ tableProps: {
206
+ isSelectAllEnabled: true
207
+ }
208
+ }
209
+ }),
210
+ play: async ({
211
+ canvas
212
+ }) => {
213
+ await waitFor(() => {
214
+ expect(canvas.getByRole('row', {
215
+ name: /Child 2/i
216
+ })).toBeInTheDocument();
217
+ });
218
+
219
+ // Select the first row by clicking its checkbox
220
+ const firstRow = canvas.getByRole('row', {
221
+ name: /Child 2/i
222
+ });
223
+ const checkbox = within(firstRow).getByRole('checkbox');
224
+ await userEvent.click(checkbox);
225
+ const metadataButton = canvas.getByRole('button', {
226
+ name: 'Metadata'
227
+ });
228
+ await userEvent.click(metadataButton);
229
+ }
230
+ };
180
231
  const meta = {
181
232
  title: 'Elements/ContentExplorer/tests/MetadataView/visual',
182
233
  component: ContentExplorer,
@@ -1 +1 @@
1
- {"version":3,"file":"MetadataView-visual.stories.js","names":["http","HttpResponse","expect","userEvent","waitFor","within","Download","SignMeOthers","Sign","noop","ContentExplorer","DEFAULT_HOSTNAME_API","mockMetadata","mockSchema","mockRootFolder","scope","templateScope","templateKey","metadataScopeAndKey","metadataFieldNamePrefix","metadataQuery","from","ancestor_folder_id","sort_by","field_key","fields","key","direction","map","field","fieldsToShow","canEdit","displayName","columns","textValue","id","type","allowSorting","minWidth","maxWidth","defaultView","metadataView","args","metadataViewV2ElementProps","metadataViewProps","features","contentExplorer","metadataViewV2","metadataViewV2WithCustomActions","_objectSpread","tableProps","isSelectAllEnabled","itemActionMenuProps","actions","label","onClick","icon","subMenuTrigger","subMenuActions","play","canvas","getByRole","name","toBeInTheDocument","firstRow","ellipsesButton","click","initialFilterActionBarProps","initialFilterValues","value","metadataViewV2WithInitialFilterValues","actionBarProps","toHaveTextContent","contactRoleChip","fileTypeChip","meta","title","component","global","FEATURE_FLAGS","rootFolderId","FOLDER_ID","token","TOKEN","parameters","msw","handlers","post","json","get"],"sources":["../../../../../src/elements/content-explorer/stories/tests/MetadataView-visual.stories.tsx"],"sourcesContent":["import type { Meta, StoryObj } from '@storybook/react';\nimport { http, HttpResponse } from 'msw';\nimport { expect, userEvent, waitFor, within } from 'storybook/test';\nimport { Download, SignMeOthers } from '@box/blueprint-web-assets/icons/Fill/index';\nimport { Sign } from '@box/blueprint-web-assets/icons/Line';\nimport noop from 'lodash/noop';\n\nimport ContentExplorer from '../../ContentExplorer';\nimport { DEFAULT_HOSTNAME_API } from '../../../../constants';\nimport { mockMetadata, mockSchema } from '../../../common/__mocks__/mockMetadata';\nimport { mockRootFolder } from '../../../common/__mocks__/mockRootFolder';\n\n// The intent behind relying on mockMetadata is to allow a developer to paste in their own metadata template schema for use with live API calls.\nconst { scope: templateScope, templateKey } = mockSchema;\n\nconst metadataScopeAndKey = `${templateScope}.${templateKey}`;\nconst metadataFieldNamePrefix = `metadata.${metadataScopeAndKey}`;\n\n// This is the body of the metadata query API call.\n// https://developer.box.com/guides/metadata/queries/syntax/\nconst metadataQuery = {\n from: metadataScopeAndKey,\n ancestor_folder_id: '0',\n sort_by: [\n {\n field_key: `${metadataFieldNamePrefix}.${mockSchema.fields[0].key}`, // Default to sorting by the first field in the schema\n direction: 'asc',\n },\n ],\n fields: [\n // Default to returning all fields in the metadata template schema, and name as a standalone (non-metadata) field\n ...mockSchema.fields.map(field => `${metadataFieldNamePrefix}.${field.key}`),\n 'name',\n ],\n};\n\n// Used for metadata view v1\nconst fieldsToShow = [\n { key: `${metadataFieldNamePrefix}.name`, canEdit: false, displayName: 'Alias' },\n { key: `${metadataFieldNamePrefix}.industry`, canEdit: true },\n { key: `${metadataFieldNamePrefix}.last_contacted_at`, canEdit: true },\n { key: `${metadataFieldNamePrefix}.role`, canEdit: true },\n];\n\n// Used for metadata view v2\nconst columns = [\n {\n // Always include the name column\n textValue: 'Name',\n id: 'name',\n type: 'string',\n allowSorting: true,\n minWidth: 150,\n maxWidth: 150,\n },\n ...mockSchema.fields.map(field => ({\n textValue: field.displayName,\n id: `${metadataFieldNamePrefix}.${field.key}`,\n type: field.type,\n allowSorting: true,\n minWidth: 150,\n maxWidth: 150,\n })),\n];\n\n// Switches ContentExplorer to use Metadata View over standard, folder-based view.\nconst defaultView = 'metadata';\n\ntype Story = StoryObj<typeof ContentExplorer>;\n\nexport const metadataView: Story = {\n args: {\n metadataQuery,\n fieldsToShow,\n defaultView,\n },\n};\n\nconst metadataViewV2ElementProps = {\n metadataViewProps: {\n columns,\n },\n metadataQuery,\n fieldsToShow,\n defaultView,\n features: {\n contentExplorer: {\n metadataViewV2: true,\n },\n },\n};\n\nexport const metadataViewV2: Story = {\n args: metadataViewV2ElementProps,\n};\n\nexport const metadataViewV2WithCustomActions: Story = {\n args: {\n ...metadataViewV2ElementProps,\n metadataViewProps: {\n columns,\n tableProps: {\n isSelectAllEnabled: true,\n },\n itemActionMenuProps: {\n actions: [\n {\n label: 'Download',\n onClick: noop,\n icon: Download,\n },\n ],\n subMenuTrigger: {\n label: 'Sign',\n icon: Sign,\n },\n subMenuActions: [\n {\n label: 'Request Signature',\n onClick: noop,\n icon: SignMeOthers,\n },\n ],\n },\n },\n },\n play: async ({ canvas }) => {\n await waitFor(() => {\n expect(canvas.getByRole('row', { name: /Child 2/i })).toBeInTheDocument();\n });\n const firstRow = canvas.getByRole('row', { name: /Child 2/i });\n const ellipsesButton = within(firstRow).getByRole('button', { name: 'Action menu' });\n userEvent.click(ellipsesButton);\n },\n};\n\nconst initialFilterActionBarProps = {\n initialFilterValues: {\n 'industry-filter': { value: ['Legal'] },\n 'mimetype-filter': { value: ['boxnoteType', 'documentType', 'threedType'] },\n 'role-filter': { value: ['Developer', 'Business Owner', 'Marketing'] },\n },\n};\n\nexport const metadataViewV2WithInitialFilterValues: Story = {\n args: {\n ...metadataViewV2ElementProps,\n metadataViewProps: {\n columns,\n actionBarProps: initialFilterActionBarProps,\n },\n },\n play: async ({ canvas }) => {\n // Wait for chips to update with initial values\n await waitFor(() => {\n expect(canvas.getByRole('button', { name: /Industry/i })).toHaveTextContent(/\\(1\\)/);\n });\n // Other chips should reflect initialized values\n const contactRoleChip = canvas.getByRole('button', { name: /Contact Role/i });\n expect(contactRoleChip).toHaveTextContent(/\\(3\\)/);\n\n const fileTypeChip = canvas.getByRole('button', { name: /Box Note/i });\n expect(fileTypeChip).toHaveTextContent(/\\+2/);\n },\n};\n\nconst meta: Meta<typeof ContentExplorer> = {\n title: 'Elements/ContentExplorer/tests/MetadataView/visual',\n component: ContentExplorer,\n args: {\n features: global.FEATURE_FLAGS,\n rootFolderId: global.FOLDER_ID,\n token: global.TOKEN,\n },\n parameters: {\n msw: {\n handlers: [\n http.post(`${DEFAULT_HOSTNAME_API}/2.0/metadata_queries/execute_read`, () => {\n return HttpResponse.json(mockMetadata);\n }),\n http.get(`${DEFAULT_HOSTNAME_API}/2.0/metadata_templates/enterprise/templateName/schema`, () => {\n return HttpResponse.json(mockSchema);\n }),\n http.get(`${DEFAULT_HOSTNAME_API}/2.0/folders/:id`, () => {\n return HttpResponse.json(mockRootFolder);\n }),\n ],\n },\n },\n};\n\nexport default meta;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"MetadataView-visual.stories.js","names":["http","HttpResponse","expect","userEvent","waitFor","within","Download","SignMeOthers","Sign","noop","ContentExplorer","DEFAULT_HOSTNAME_API","mockMetadata","mockSchema","mockRootFolder","scope","templateScope","templateKey","metadataScopeAndKey","metadataFieldNamePrefix","metadataQuery","from","ancestor_folder_id","order_by","field_key","fields","key","direction","map","field","fieldsToShow","canEdit","displayName","columns","textValue","id","type","allowsSorting","minWidth","maxWidth","defaultView","metadataView","args","metadataViewV2ElementProps","metadataViewProps","features","contentExplorer","metadataViewV2","metadataViewV2SortsFromHeader","play","canvas","getByRole","name","toBeInTheDocument","firstRow","industryHeader","click","metadataViewV2WithCustomActions","_objectSpread","tableProps","isSelectAllEnabled","itemActionMenuProps","actions","label","onClick","icon","subMenuTrigger","subMenuActions","ellipsesButton","initialFilterActionBarProps","initialFilterValues","value","metadataViewV2WithInitialFilterValues","actionBarProps","toHaveTextContent","contactRoleChip","fileTypeChip","sidePanelOpenWithSingleItemSelected","checkbox","metadataButton","meta","title","component","global","FEATURE_FLAGS","rootFolderId","FOLDER_ID","token","TOKEN","parameters","msw","handlers","post","json","get"],"sources":["../../../../../src/elements/content-explorer/stories/tests/MetadataView-visual.stories.tsx"],"sourcesContent":["import type { Meta, StoryObj } from '@storybook/react';\nimport { http, HttpResponse } from 'msw';\nimport { expect, userEvent, waitFor, within } from 'storybook/test';\nimport { Download, SignMeOthers } from '@box/blueprint-web-assets/icons/Fill/index';\nimport { Sign } from '@box/blueprint-web-assets/icons/Line';\nimport noop from 'lodash/noop';\n\nimport ContentExplorer from '../../ContentExplorer';\nimport { DEFAULT_HOSTNAME_API } from '../../../../constants';\nimport { mockMetadata, mockSchema } from '../../../common/__mocks__/mockMetadata';\nimport { mockRootFolder } from '../../../common/__mocks__/mockRootFolder';\n\n// The intent behind relying on mockMetadata is to allow a developer to paste in their own metadata template schema for use with live API calls.\nconst { scope: templateScope, templateKey } = mockSchema;\n\nconst metadataScopeAndKey = `${templateScope}.${templateKey}`;\nconst metadataFieldNamePrefix = `metadata.${metadataScopeAndKey}`;\n\n// This is the body of the metadata query API call.\n// https://developer.box.com/guides/metadata/queries/syntax/\nconst metadataQuery = {\n from: metadataScopeAndKey,\n ancestor_folder_id: '0',\n order_by: [\n {\n field_key: `${metadataFieldNamePrefix}.${mockSchema.fields[0].key}`, // Default to sorting by the first field in the schema\n direction: 'asc',\n },\n ],\n fields: [\n // Default to returning all fields in the metadata template schema, and name as a standalone (non-metadata) field\n ...mockSchema.fields.map(field => `${metadataFieldNamePrefix}.${field.key}`),\n 'name',\n ],\n};\n\n// Used for metadata view v1\nconst fieldsToShow = [\n { key: `${metadataFieldNamePrefix}.name`, canEdit: false, displayName: 'Alias' },\n { key: `${metadataFieldNamePrefix}.industry`, canEdit: true },\n { key: `${metadataFieldNamePrefix}.last_contacted_at`, canEdit: true },\n { key: `${metadataFieldNamePrefix}.role`, canEdit: true },\n];\n\n// Used for metadata view v2\nconst columns = [\n {\n // Always include the name column\n textValue: 'Name',\n id: 'name',\n type: 'string',\n allowsSorting: true,\n minWidth: 150,\n maxWidth: 150,\n },\n ...mockSchema.fields.map(field => ({\n textValue: field.displayName,\n id: `${metadataFieldNamePrefix}.${field.key}`,\n type: field.type,\n allowsSorting: true,\n minWidth: 150,\n maxWidth: 150,\n })),\n];\n\n// Switches ContentExplorer to use Metadata View over standard, folder-based view.\nconst defaultView = 'metadata';\n\ntype Story = StoryObj<typeof ContentExplorer>;\n\nexport const metadataView: Story = {\n args: {\n metadataQuery,\n fieldsToShow,\n defaultView,\n },\n};\n\nconst metadataViewV2ElementProps = {\n metadataViewProps: {\n columns,\n },\n metadataQuery,\n fieldsToShow,\n defaultView,\n features: {\n contentExplorer: {\n metadataViewV2: true,\n },\n },\n};\n\nexport const metadataViewV2: Story = {\n args: metadataViewV2ElementProps,\n};\n\n// @TODO Assert that rows are actually sorted in a different order, once handleSortChange is implemented\nexport const metadataViewV2SortsFromHeader: Story = {\n args: metadataViewV2ElementProps,\n play: async ({ canvas }) => {\n await waitFor(() => {\n expect(canvas.getByRole('row', { name: /Industry/i })).toBeInTheDocument();\n });\n\n const firstRow = canvas.getByRole('row', { name: /Industry/i });\n const industryHeader = within(firstRow).getByRole('columnheader', { name: 'Industry' });\n userEvent.click(industryHeader);\n },\n};\n\nexport const metadataViewV2WithCustomActions: Story = {\n args: {\n ...metadataViewV2ElementProps,\n metadataViewProps: {\n columns,\n tableProps: {\n isSelectAllEnabled: true,\n },\n itemActionMenuProps: {\n actions: [\n {\n label: 'Download',\n onClick: noop,\n icon: Download,\n },\n ],\n subMenuTrigger: {\n label: 'Sign',\n icon: Sign,\n },\n subMenuActions: [\n {\n label: 'Request Signature',\n onClick: noop,\n icon: SignMeOthers,\n },\n ],\n },\n },\n },\n play: async ({ canvas }) => {\n await waitFor(() => {\n expect(canvas.getByRole('row', { name: /Child 2/i })).toBeInTheDocument();\n });\n const firstRow = canvas.getByRole('row', { name: /Child 2/i });\n const ellipsesButton = within(firstRow).getByRole('button', { name: 'Action menu' });\n userEvent.click(ellipsesButton);\n },\n};\n\nconst initialFilterActionBarProps = {\n initialFilterValues: {\n 'industry-filter': { value: ['Legal'] },\n 'mimetype-filter': { value: ['boxnoteType', 'documentType', 'threedType'] },\n 'role-filter': { value: ['Developer', 'Business Owner', 'Marketing'] },\n },\n};\n\nexport const metadataViewV2WithInitialFilterValues: Story = {\n args: {\n ...metadataViewV2ElementProps,\n metadataViewProps: {\n columns,\n actionBarProps: initialFilterActionBarProps,\n },\n },\n play: async ({ canvas }) => {\n // Wait for chips to update with initial values\n await waitFor(() => {\n expect(canvas.getByRole('button', { name: /Industry/i })).toHaveTextContent(/\\(1\\)/);\n });\n // Other chips should reflect initialized values\n const contactRoleChip = canvas.getByRole('button', { name: /Contact Role/i });\n expect(contactRoleChip).toHaveTextContent(/\\(3\\)/);\n\n const fileTypeChip = canvas.getByRole('button', { name: /Box Note/i });\n expect(fileTypeChip).toHaveTextContent(/\\+2/);\n },\n};\n\nexport const sidePanelOpenWithSingleItemSelected: Story = {\n args: {\n ...metadataViewV2ElementProps,\n metadataViewProps: {\n columns,\n tableProps: {\n isSelectAllEnabled: true,\n },\n },\n },\n\n play: async ({ canvas }) => {\n await waitFor(() => {\n expect(canvas.getByRole('row', { name: /Child 2/i })).toBeInTheDocument();\n });\n\n // Select the first row by clicking its checkbox\n const firstRow = canvas.getByRole('row', { name: /Child 2/i });\n const checkbox = within(firstRow).getByRole('checkbox');\n await userEvent.click(checkbox);\n\n const metadataButton = canvas.getByRole('button', { name: 'Metadata' });\n await userEvent.click(metadataButton);\n },\n};\n\nconst meta: Meta<typeof ContentExplorer> = {\n title: 'Elements/ContentExplorer/tests/MetadataView/visual',\n component: ContentExplorer,\n args: {\n features: global.FEATURE_FLAGS,\n rootFolderId: global.FOLDER_ID,\n token: global.TOKEN,\n },\n parameters: {\n msw: {\n handlers: [\n http.post(`${DEFAULT_HOSTNAME_API}/2.0/metadata_queries/execute_read`, () => {\n return HttpResponse.json(mockMetadata);\n }),\n http.get(`${DEFAULT_HOSTNAME_API}/2.0/metadata_templates/enterprise/templateName/schema`, () => {\n return HttpResponse.json(mockSchema);\n }),\n http.get(`${DEFAULT_HOSTNAME_API}/2.0/folders/:id`, () => {\n return HttpResponse.json(mockRootFolder);\n }),\n ],\n },\n },\n};\n\nexport default meta;\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,67 @@
1
+ import { useMemo } from 'react';
2
+ import { useIntl } from 'react-intl';
3
+ import messages from '../common/messages';
4
+
5
+ // Get selected item text
6
+ export function useSelectedItemText(currentCollection, selectedItemIds) {
7
+ const {
8
+ formatMessage
9
+ } = useIntl();
10
+ return useMemo(() => {
11
+ const selectedCount = selectedItemIds === 'all' ? currentCollection.items.length : selectedItemIds.size;
12
+ if (selectedCount === 0) return '';
13
+
14
+ // Case 1: Single selected item - show item name
15
+ if (selectedCount === 1) {
16
+ const selectedKey = selectedItemIds === 'all' ? currentCollection.items[0].id : selectedItemIds.values().next().value;
17
+ const selectedItem = currentCollection.items.find(item => item.id === selectedKey);
18
+ return selectedItem?.name ?? '';
19
+ }
20
+
21
+ // Case 2: Multiple selected items - show count
22
+ return formatMessage(messages.numFilesSelected, {
23
+ numSelected: selectedCount
24
+ });
25
+ }, [currentCollection.items, formatMessage, selectedItemIds]);
26
+ }
27
+
28
+ // Get template instance based on metadata template and selected items
29
+ export function getTemplateInstance(metadataTemplate, selectedItems) {
30
+ const {
31
+ displayName,
32
+ fields,
33
+ hidden,
34
+ id,
35
+ scope,
36
+ templateKey,
37
+ type
38
+ } = metadataTemplate;
39
+ const selectedItemsFields = fields.map(({
40
+ displayName: fieldDisplayName,
41
+ hidden: fieldHidden,
42
+ id: fieldId,
43
+ key,
44
+ options,
45
+ type: fieldType
46
+ }) => ({
47
+ displayName: fieldDisplayName,
48
+ hidden: fieldHidden,
49
+ id: fieldId,
50
+ key,
51
+ options,
52
+ type: fieldType,
53
+ // TODO: Add support for multiple selected items
54
+ value: selectedItems[0].metadata[scope][templateKey][key]
55
+ }));
56
+ return {
57
+ canEdit: true,
58
+ displayName,
59
+ hidden,
60
+ id,
61
+ fields: selectedItemsFields,
62
+ scope,
63
+ templateKey,
64
+ type
65
+ };
66
+ }
67
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","names":["useMemo","useIntl","messages","useSelectedItemText","currentCollection","selectedItemIds","formatMessage","selectedCount","items","length","size","selectedKey","id","values","next","value","selectedItem","find","item","name","numFilesSelected","numSelected","getTemplateInstance","metadataTemplate","selectedItems","displayName","fields","hidden","scope","templateKey","type","selectedItemsFields","map","fieldDisplayName","fieldHidden","fieldId","key","options","fieldType","metadata","canEdit"],"sources":["../../../src/elements/content-explorer/utils.ts"],"sourcesContent":["import { useMemo } from 'react';\nimport { useIntl } from 'react-intl';\n\nimport type { MetadataTemplate } from '@box/metadata-editor';\nimport type { Selection } from 'react-aria-components';\nimport type { BoxItem, Collection } from '../../common/types/core';\n\nimport messages from '../common/messages';\n\n// Get selected item text\nexport function useSelectedItemText(currentCollection: Collection, selectedItemIds: Selection): string {\n const { formatMessage } = useIntl();\n\n return useMemo(() => {\n const selectedCount = selectedItemIds === 'all' ? currentCollection.items.length : selectedItemIds.size;\n if (selectedCount === 0) return '';\n\n // Case 1: Single selected item - show item name\n if (selectedCount === 1) {\n const selectedKey =\n selectedItemIds === 'all' ? currentCollection.items[0].id : selectedItemIds.values().next().value;\n const selectedItem = currentCollection.items.find(item => item.id === selectedKey);\n return selectedItem?.name ?? '';\n }\n\n // Case 2: Multiple selected items - show count\n return formatMessage(messages.numFilesSelected, { numSelected: selectedCount });\n }, [currentCollection.items, formatMessage, selectedItemIds]);\n}\n\n// Get template instance based on metadata template and selected items\nexport function getTemplateInstance(metadataTemplate: MetadataTemplate, selectedItems: BoxItem[]) {\n const { displayName, fields, hidden, id, scope, templateKey, type } = metadataTemplate;\n\n const selectedItemsFields = fields.map(\n ({ displayName: fieldDisplayName, hidden: fieldHidden, id: fieldId, key, options, type: fieldType }) => ({\n displayName: fieldDisplayName,\n hidden: fieldHidden,\n id: fieldId,\n key,\n options,\n type: fieldType,\n // TODO: Add support for multiple selected items\n value: selectedItems[0].metadata[scope][templateKey][key],\n }),\n );\n\n return {\n canEdit: true,\n displayName,\n hidden,\n id,\n fields: selectedItemsFields,\n scope,\n templateKey,\n type,\n };\n}\n"],"mappings":"AAAA,SAASA,OAAO,QAAQ,OAAO;AAC/B,SAASC,OAAO,QAAQ,YAAY;AAMpC,OAAOC,QAAQ,MAAM,oBAAoB;;AAEzC;AACA,OAAO,SAASC,mBAAmBA,CAACC,iBAA6B,EAAEC,eAA0B,EAAU;EACnG,MAAM;IAAEC;EAAc,CAAC,GAAGL,OAAO,CAAC,CAAC;EAEnC,OAAOD,OAAO,CAAC,MAAM;IACjB,MAAMO,aAAa,GAAGF,eAAe,KAAK,KAAK,GAAGD,iBAAiB,CAACI,KAAK,CAACC,MAAM,GAAGJ,eAAe,CAACK,IAAI;IACvG,IAAIH,aAAa,KAAK,CAAC,EAAE,OAAO,EAAE;;IAElC;IACA,IAAIA,aAAa,KAAK,CAAC,EAAE;MACrB,MAAMI,WAAW,GACbN,eAAe,KAAK,KAAK,GAAGD,iBAAiB,CAACI,KAAK,CAAC,CAAC,CAAC,CAACI,EAAE,GAAGP,eAAe,CAACQ,MAAM,CAAC,CAAC,CAACC,IAAI,CAAC,CAAC,CAACC,KAAK;MACrG,MAAMC,YAAY,GAAGZ,iBAAiB,CAACI,KAAK,CAACS,IAAI,CAACC,IAAI,IAAIA,IAAI,CAACN,EAAE,KAAKD,WAAW,CAAC;MAClF,OAAOK,YAAY,EAAEG,IAAI,IAAI,EAAE;IACnC;;IAEA;IACA,OAAOb,aAAa,CAACJ,QAAQ,CAACkB,gBAAgB,EAAE;MAAEC,WAAW,EAAEd;IAAc,CAAC,CAAC;EACnF,CAAC,EAAE,CAACH,iBAAiB,CAACI,KAAK,EAAEF,aAAa,EAAED,eAAe,CAAC,CAAC;AACjE;;AAEA;AACA,OAAO,SAASiB,mBAAmBA,CAACC,gBAAkC,EAAEC,aAAwB,EAAE;EAC9F,MAAM;IAAEC,WAAW;IAAEC,MAAM;IAAEC,MAAM;IAAEf,EAAE;IAAEgB,KAAK;IAAEC,WAAW;IAAEC;EAAK,CAAC,GAAGP,gBAAgB;EAEtF,MAAMQ,mBAAmB,GAAGL,MAAM,CAACM,GAAG,CAClC,CAAC;IAAEP,WAAW,EAAEQ,gBAAgB;IAAEN,MAAM,EAAEO,WAAW;IAAEtB,EAAE,EAAEuB,OAAO;IAAEC,GAAG;IAAEC,OAAO;IAAEP,IAAI,EAAEQ;EAAU,CAAC,MAAM;IACrGb,WAAW,EAAEQ,gBAAgB;IAC7BN,MAAM,EAAEO,WAAW;IACnBtB,EAAE,EAAEuB,OAAO;IACXC,GAAG;IACHC,OAAO;IACPP,IAAI,EAAEQ,SAAS;IACf;IACAvB,KAAK,EAAES,aAAa,CAAC,CAAC,CAAC,CAACe,QAAQ,CAACX,KAAK,CAAC,CAACC,WAAW,CAAC,CAACO,GAAG;EAC5D,CAAC,CACL,CAAC;EAED,OAAO;IACHI,OAAO,EAAE,IAAI;IACbf,WAAW;IACXE,MAAM;IACNf,EAAE;IACFc,MAAM,EAAEK,mBAAmB;IAC3BH,KAAK;IACLC,WAAW;IACXC;EACJ,CAAC;AACL","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"BoxAISidebar.js","names":["React","useIntl","AgentsProvider","BoxAISidebarContent","BoxAISidebarContext","SPREADSHEET_FILE_EXTENSIONS","messages","BoxAISidebar","props","cache","contentName","elementId","fileExtension","fileID","getSuggestedQuestions","isIntelligentQueryMode","isFeedbackEnabled","isFeedbackFormEnabled","isStopResponseEnabled","items","itemSize","localizedQuestions","onFeedbackFormSubmit","onUserInteraction","recordAction","renderRemoteModule","setCacheValue","shouldFeedbackFormIncludeFeedbackText","shouldPreinitSession","setHasQuestions","rest","_objectWithoutProperties","_excluded","questions","formatMessage","contextValue","useMemo","useEffect","length","questionsWithoutInProgress","isCompleted","slice","isSpreadsheet","includes","spreadsheetNotice","welcomeMessageSpreadsheetNotice","welcomeMessageIntelligentQueryNotice","handleSuggestedQuestionsFetched","fetchedSuggestedQuestions","suggestedQuestions","createElement","value","agents","Provider","_extends","cachedSuggestedQuestions","isOpen","itemID","itemIDs","onSuggestedQuestionsFetched","restoredQuestions","restoredSession","encodedSession","restoredShouldShowLandingPage","shouldShowLandingPage","warningNotice","warningNoticeAriaLabel","welcomeMessageSpreadsheetNoticeAriaLabel"],"sources":["../../../src/elements/content-sidebar/BoxAISidebar.tsx"],"sourcesContent":["/**\n * @file Box AI Sidebar Container\n * @author Box\n */\nimport * as React from 'react';\nimport { useIntl } from 'react-intl';\nimport { type FeedbackFormData, type ItemType, SuggestedQuestionType } from '@box/box-ai-content-answers';\nimport { AgentsProvider, RecordActionType } from '@box/box-ai-agent-selector';\nimport BoxAISidebarContent from './BoxAISidebarContent';\nimport { BoxAISidebarContext } from './context/BoxAISidebarContext';\nimport { SPREADSHEET_FILE_EXTENSIONS } from '../common/content-answers/constants';\nimport type { BoxAISidebarCache, BoxAISidebarCacheSetter } from './types/BoxAISidebarTypes';\nimport messages from '../common/content-answers/messages';\n\nexport interface BoxAISidebarProps {\n contentName: string;\n cache: BoxAISidebarCache;\n createSessionRequest: (payload: Record<string, unknown>, itemID: string) => Promise<unknown>;\n elementId: string;\n fetchTimeout: Record<string, unknown>;\n fileExtension: string;\n fileID: string;\n getAgentConfig: (payload: Record<string, unknown>) => Promise<unknown>;\n getAIStudioAgents: () => Promise<unknown>;\n getAnswer: (\n payload: Record<string, unknown>,\n itemID?: string,\n itemIDs?: Array<string>,\n state?: Record<string, unknown>,\n ) => Promise<unknown>;\n getAnswerStreaming: (\n payload: Record<string, unknown>,\n itemID?: string,\n itemIDs?: Array<string>,\n abortController?: AbortController,\n state?: Record<string, unknown>,\n ) => Promise<unknown>;\n getSuggestedQuestions: (itemID: string) => Promise<unknown> | null;\n hostAppName: string;\n isAgentSelectorEnabled: boolean;\n isAIStudioAgentSelectorEnabled: boolean;\n isCitationsEnabled: boolean;\n isDebugModeEnabled: boolean;\n isFeedbackEnabled: boolean;\n isFeedbackFormEnabled: boolean;\n isIntelligentQueryMode: boolean;\n isMarkdownEnabled: boolean;\n isResetChatEnabled: boolean;\n isStopResponseEnabled?: boolean;\n isStreamingEnabled: boolean;\n items: Array<ItemType>;\n itemSize?: string;\n localizedQuestions: Array<{ id: string; label: string; prompt: string }>;\n onFeedbackFormSubmit?: (data: FeedbackFormData, onSuccess: () => void) => void;\n onUserInteraction?: () => void;\n recordAction: (params: RecordActionType) => void;\n setCacheValue: BoxAISidebarCacheSetter;\n shouldFeedbackFormIncludeFeedbackText?: boolean;\n renderRemoteModule?: (elementId: string) => React.ReactNode;\n shouldPreinitSession?: boolean;\n setHasQuestions: (hasQuestions: boolean) => void;\n}\n\nconst BoxAISidebar = (props: BoxAISidebarProps) => {\n const {\n cache,\n contentName,\n elementId,\n fileExtension,\n fileID,\n getSuggestedQuestions,\n isIntelligentQueryMode,\n isFeedbackEnabled,\n isFeedbackFormEnabled,\n isStopResponseEnabled,\n items,\n itemSize,\n localizedQuestions,\n onFeedbackFormSubmit,\n onUserInteraction,\n recordAction,\n renderRemoteModule,\n setCacheValue,\n shouldFeedbackFormIncludeFeedbackText,\n shouldPreinitSession = true,\n setHasQuestions,\n ...rest\n } = props;\n const { questions } = cache;\n const { formatMessage } = useIntl();\n const contextValue = React.useMemo(\n () => ({\n cache,\n contentName,\n elementId,\n fileExtension,\n isFeedbackEnabled,\n isFeedbackFormEnabled,\n isStopResponseEnabled,\n items,\n itemSize,\n onFeedbackFormSubmit,\n onUserInteraction,\n recordAction,\n setCacheValue,\n shouldFeedbackFormIncludeFeedbackText,\n shouldPreinitSession,\n }),\n [\n cache,\n contentName,\n elementId,\n fileExtension,\n isFeedbackEnabled,\n isFeedbackFormEnabled,\n isStopResponseEnabled,\n items,\n itemSize,\n onFeedbackFormSubmit,\n onUserInteraction,\n recordAction,\n setCacheValue,\n shouldFeedbackFormIncludeFeedbackText,\n shouldPreinitSession,\n ],\n );\n\n React.useEffect(() => {\n if (setHasQuestions) {\n setHasQuestions(questions.length > 0);\n }\n }, [questions.length, setHasQuestions]);\n\n if (renderRemoteModule) {\n return renderRemoteModule(elementId);\n }\n\n let questionsWithoutInProgress = questions;\n if (questions.length > 0 && !questions[questions.length - 1].isCompleted) {\n // pass only fully completed questions to not show loading indicator of question where we canceled API request\n questionsWithoutInProgress = questionsWithoutInProgress.slice(0, -1);\n }\n\n const isSpreadsheet = SPREADSHEET_FILE_EXTENSIONS.includes(fileExtension);\n\n let spreadsheetNotice = isSpreadsheet ? formatMessage(messages.welcomeMessageSpreadsheetNotice) : '';\n if (isIntelligentQueryMode) {\n spreadsheetNotice = formatMessage(messages.welcomeMessageIntelligentQueryNotice);\n } else if (isSpreadsheet) {\n spreadsheetNotice = formatMessage(messages.welcomeMessageSpreadsheetNotice);\n }\n\n const handleSuggestedQuestionsFetched = (fetchedSuggestedQuestions: SuggestedQuestionType[]) => {\n setCacheValue('suggestedQuestions', fetchedSuggestedQuestions);\n };\n\n const suggestedQuestions = getSuggestedQuestions === null ? localizedQuestions : [];\n\n return (\n // BoxAISidebarContent is using withApiWrapper that is not passing all provided props,\n // that's why we need to use provider to pass other props\n <AgentsProvider value={cache.agents}>\n <BoxAISidebarContext.Provider value={contextValue}>\n <BoxAISidebarContent\n cachedSuggestedQuestions={cache.suggestedQuestions}\n getSuggestedQuestions={getSuggestedQuestions}\n isOpen\n isStopResponseEnabled={isStopResponseEnabled}\n itemID={fileID}\n itemIDs={[fileID]}\n onSuggestedQuestionsFetched={handleSuggestedQuestionsFetched}\n restoredQuestions={questionsWithoutInProgress}\n restoredSession={cache.encodedSession}\n restoredShouldShowLandingPage={cache.shouldShowLandingPage}\n shouldPreinitSession={shouldPreinitSession}\n suggestedQuestions={\n cache.suggestedQuestions.length > 0 ? cache.suggestedQuestions : suggestedQuestions\n }\n warningNotice={spreadsheetNotice}\n warningNoticeAriaLabel={formatMessage(messages.welcomeMessageSpreadsheetNoticeAriaLabel)}\n {...rest}\n />\n </BoxAISidebarContext.Provider>\n </AgentsProvider>\n );\n};\n\nexport default BoxAISidebar;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"BoxAISidebar.js","names":["React","useIntl","AgentsProvider","BoxAISidebarContent","BoxAISidebarContext","SPREADSHEET_FILE_EXTENSIONS","messages","BoxAISidebar","props","cache","contentName","elementId","fileExtension","fileID","getSuggestedQuestions","isIntelligentQueryMode","isFeedbackEnabled","isFeedbackFormEnabled","isStopResponseEnabled","items","itemSize","localizedQuestions","onFeedbackFormSubmit","onUserInteraction","recordAction","renderRemoteModule","setCacheValue","shouldFeedbackFormIncludeFeedbackText","shouldPreinitSession","setHasQuestions","rest","_objectWithoutProperties","_excluded","questions","formatMessage","contextValue","useMemo","useEffect","length","questionsWithoutInProgress","isCompleted","slice","isSpreadsheet","includes","spreadsheetNotice","welcomeMessageSpreadsheetNotice","welcomeMessageIntelligentQueryNotice","handleSuggestedQuestionsFetched","fetchedSuggestedQuestions","suggestedQuestions","createElement","value","agents","Provider","_extends","cachedSuggestedQuestions","isOpen","itemID","itemIDs","onSuggestedQuestionsFetched","restoredQuestions","restoredSession","encodedSession","restoredShouldShowLandingPage","shouldShowLandingPage","warningNotice","warningNoticeAriaLabel","welcomeMessageSpreadsheetNoticeAriaLabel"],"sources":["../../../src/elements/content-sidebar/BoxAISidebar.tsx"],"sourcesContent":["/**\n * @file Box AI Sidebar Container\n * @author Box\n */\nimport * as React from 'react';\nimport { useIntl } from 'react-intl';\nimport { type FeedbackFormData, type ItemType, SuggestedQuestionType } from '@box/box-ai-content-answers';\nimport { AgentsProvider, RecordActionType } from '@box/box-ai-agent-selector';\nimport BoxAISidebarContent from './BoxAISidebarContent';\nimport { BoxAISidebarContext } from './context/BoxAISidebarContext';\nimport { SPREADSHEET_FILE_EXTENSIONS } from '../common/content-answers/constants';\nimport type { BoxAISidebarCache, BoxAISidebarCacheSetter } from './types/BoxAISidebarTypes';\nimport messages from '../common/content-answers/messages';\n\nexport interface BoxAISidebarProps {\n contentName: string;\n cache: BoxAISidebarCache;\n createSessionRequest: (payload: Record<string, unknown>, itemID: string) => Promise<unknown>;\n elementId: string;\n fetchTimeout: Record<string, unknown>;\n fileExtension: string;\n fileID: string;\n getAgentConfig: (payload: Record<string, unknown>) => Promise<unknown>;\n getAIStudioAgents: () => Promise<unknown>;\n getAnswer: (\n payload: Record<string, unknown>,\n itemID?: string,\n itemIDs?: Array<string>,\n state?: Record<string, unknown>,\n ) => Promise<unknown>;\n getAnswerStreaming: (\n payload: Record<string, unknown>,\n itemID?: string,\n itemIDs?: Array<string>,\n abortController?: AbortController,\n state?: Record<string, unknown>,\n ) => Promise<unknown>;\n getSuggestedQuestions: (itemID: string) => Promise<unknown> | null;\n hostAppName: string;\n isAgentSelectorEnabled: boolean;\n isAIStudioAgentSelectorEnabled: boolean;\n isCitationsEnabled: boolean;\n isDebugModeEnabled: boolean;\n isFeedbackEnabled: boolean;\n isFeedbackFormEnabled: boolean;\n isIntelligentQueryMode: boolean;\n isMarkdownEnabled: boolean;\n isStopResponseEnabled?: boolean;\n isStreamingEnabled: boolean;\n items: Array<ItemType>;\n itemSize?: string;\n localizedQuestions: Array<{ id: string; label: string; prompt: string }>;\n onFeedbackFormSubmit?: (data: FeedbackFormData, onSuccess: () => void) => void;\n onUserInteraction?: () => void;\n recordAction: (params: RecordActionType) => void;\n setCacheValue: BoxAISidebarCacheSetter;\n shouldFeedbackFormIncludeFeedbackText?: boolean;\n renderRemoteModule?: (elementId: string) => React.ReactNode;\n shouldPreinitSession?: boolean;\n setHasQuestions: (hasQuestions: boolean) => void;\n}\n\nconst BoxAISidebar = (props: BoxAISidebarProps) => {\n const {\n cache,\n contentName,\n elementId,\n fileExtension,\n fileID,\n getSuggestedQuestions,\n isIntelligentQueryMode,\n isFeedbackEnabled,\n isFeedbackFormEnabled,\n isStopResponseEnabled,\n items,\n itemSize,\n localizedQuestions,\n onFeedbackFormSubmit,\n onUserInteraction,\n recordAction,\n renderRemoteModule,\n setCacheValue,\n shouldFeedbackFormIncludeFeedbackText,\n shouldPreinitSession = true,\n setHasQuestions,\n ...rest\n } = props;\n const { questions } = cache;\n const { formatMessage } = useIntl();\n const contextValue = React.useMemo(\n () => ({\n cache,\n contentName,\n elementId,\n fileExtension,\n isFeedbackEnabled,\n isFeedbackFormEnabled,\n isStopResponseEnabled,\n items,\n itemSize,\n onFeedbackFormSubmit,\n onUserInteraction,\n recordAction,\n setCacheValue,\n shouldFeedbackFormIncludeFeedbackText,\n shouldPreinitSession,\n }),\n [\n cache,\n contentName,\n elementId,\n fileExtension,\n isFeedbackEnabled,\n isFeedbackFormEnabled,\n isStopResponseEnabled,\n items,\n itemSize,\n onFeedbackFormSubmit,\n onUserInteraction,\n recordAction,\n setCacheValue,\n shouldFeedbackFormIncludeFeedbackText,\n shouldPreinitSession,\n ],\n );\n\n React.useEffect(() => {\n if (setHasQuestions) {\n setHasQuestions(questions.length > 0);\n }\n }, [questions.length, setHasQuestions]);\n\n if (renderRemoteModule) {\n return renderRemoteModule(elementId);\n }\n\n let questionsWithoutInProgress = questions;\n if (questions.length > 0 && !questions[questions.length - 1].isCompleted) {\n // pass only fully completed questions to not show loading indicator of question where we canceled API request\n questionsWithoutInProgress = questionsWithoutInProgress.slice(0, -1);\n }\n\n const isSpreadsheet = SPREADSHEET_FILE_EXTENSIONS.includes(fileExtension);\n\n let spreadsheetNotice = isSpreadsheet ? formatMessage(messages.welcomeMessageSpreadsheetNotice) : '';\n if (isIntelligentQueryMode) {\n spreadsheetNotice = formatMessage(messages.welcomeMessageIntelligentQueryNotice);\n } else if (isSpreadsheet) {\n spreadsheetNotice = formatMessage(messages.welcomeMessageSpreadsheetNotice);\n }\n\n const handleSuggestedQuestionsFetched = (fetchedSuggestedQuestions: SuggestedQuestionType[]) => {\n setCacheValue('suggestedQuestions', fetchedSuggestedQuestions);\n };\n\n const suggestedQuestions = getSuggestedQuestions === null ? localizedQuestions : [];\n\n return (\n // BoxAISidebarContent is using withApiWrapper that is not passing all provided props,\n // that's why we need to use provider to pass other props\n <AgentsProvider value={cache.agents}>\n <BoxAISidebarContext.Provider value={contextValue}>\n <BoxAISidebarContent\n cachedSuggestedQuestions={cache.suggestedQuestions}\n getSuggestedQuestions={getSuggestedQuestions}\n isOpen\n isStopResponseEnabled={isStopResponseEnabled}\n itemID={fileID}\n itemIDs={[fileID]}\n onSuggestedQuestionsFetched={handleSuggestedQuestionsFetched}\n restoredQuestions={questionsWithoutInProgress}\n restoredSession={cache.encodedSession}\n restoredShouldShowLandingPage={cache.shouldShowLandingPage}\n shouldPreinitSession={shouldPreinitSession}\n suggestedQuestions={\n cache.suggestedQuestions.length > 0 ? cache.suggestedQuestions : suggestedQuestions\n }\n warningNotice={spreadsheetNotice}\n warningNoticeAriaLabel={formatMessage(messages.welcomeMessageSpreadsheetNoticeAriaLabel)}\n {...rest}\n />\n </BoxAISidebarContext.Provider>\n </AgentsProvider>\n );\n};\n\nexport default BoxAISidebar;\n"],"mappings":"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","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- const _excluded = ["createSession", "encodedSession", "onClearAction", "onSelectedAgentCallback", "getAIStudioAgents", "hasRequestInProgress", "hostAppName", "isAIStudioAgentSelectorEnabled", "isLoading", "isResetChatEnabled", "onSelectAgent", "questions", "shouldShowLandingPage", "sendQuestion", "stopQuestion"];
1
+ const _excluded = ["createSession", "encodedSession", "onClearAction", "onSelectedAgentCallback", "getAIStudioAgents", "hasRequestInProgress", "hostAppName", "isAIStudioAgentSelectorEnabled", "isLoading", "onSelectAgent", "questions", "shouldShowLandingPage", "sendQuestion", "stopQuestion"];
2
2
  function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
3
3
  function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
4
4
  function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
@@ -38,7 +38,6 @@ function BoxAISidebarContent(props) {
38
38
  hostAppName,
39
39
  isAIStudioAgentSelectorEnabled,
40
40
  isLoading,
41
- isResetChatEnabled,
42
41
  onSelectAgent,
43
42
  questions,
44
43
  shouldShowLandingPage,
@@ -172,7 +171,7 @@ function BoxAISidebarContent(props) {
172
171
  variant: "sidebar"
173
172
  })));
174
173
  };
175
- const renderActions = () => /*#__PURE__*/React.createElement(React.Fragment, null, renderBoxAISidebarTitle(), isResetChatEnabled && /*#__PURE__*/React.createElement(ClearConversationButton, {
174
+ const renderActions = () => /*#__PURE__*/React.createElement(React.Fragment, null, renderBoxAISidebarTitle(), /*#__PURE__*/React.createElement(ClearConversationButton, {
176
175
  onClick: onClearAction
177
176
  }), /*#__PURE__*/React.createElement(Tooltip, {
178
177
  content: formatMessage(messages.sidebarBoxAISwitchToModalView),
@@ -224,7 +223,6 @@ function BoxAISidebarContent(props) {
224
223
  isAIStudioAgentSelectorEnabled: isAIStudioAgentSelectorEnabled,
225
224
  isFeedbackEnabled: isFeedbackEnabled,
226
225
  isFeedbackFormEnabled: isFeedbackFormEnabled,
227
- isResetChatEnabled: isResetChatEnabled,
228
226
  isStopResponseEnabled: isStopResponseEnabled,
229
227
  items: items,
230
228
  itemSize: itemSize,
@@ -1 +1 @@
1
- {"version":3,"file":"BoxAISidebarContent.js","names":["React","flow","useIntl","classNames","BoxAiAgentSelectorWithApi","useAgents","IconButton","Tooltip","ArrowsExpand","BoxAiContentAnswers","ClearConversationButton","IntelligenceModal","withApiWrapper","SidebarContent","withAPIContext","withErrorBoundary","withLogger","ORIGIN_BOXAI_SIDEBAR","SIDEBAR_VIEW_BOXAI","EVENT_JS_READY","mark","BoxAISidebarContext","BoxAISidebarTitle","messages","MARK_NAME_JS_READY","BoxAISidebarContent","props","createSession","encodedSession","onClearAction","onSelectedAgentCallback","getAIStudioAgents","hasRequestInProgress","hostAppName","isAIStudioAgentSelectorEnabled","isLoading","isResetChatEnabled","onSelectAgent","questions","shouldShowLandingPage","sendQuestion","stopQuestion","rest","_objectWithoutProperties","_excluded","formatMessage","isSessionInitiated","useRef","isModalOpen","setIsModalOpen","useState","cache","contentName","elementId","fileExtension","isFeedbackEnabled","isFeedbackFormEnabled","isStopResponseEnabled","items","itemSize","onFeedbackFormSubmit","onUserInteraction","recordAction","setCacheValue","shouldFeedbackFormIncludeFeedbackText","shouldPreinitSession","useContext","agents","requestState","selectedAgent","cacheQuestions","handleUserIntentToUseAI","userHasInteracted","handleModalClose","handleSwitchToModalClick","useEffect","length","isCompleted","prompt","action","component","feature","target","data","map","item","status","fileType","lastQuestion","current","id","renderBoxAISidebarTitle","createElement","className","disabled","fetcher","onAgentsListOpen","shouldHideAgentSelectorOnLoad","variant","renderActions","Fragment","onClick","content","sidebarBoxAISwitchToModalView","icon","size","actions","sidebarView","_extends","contentType","sidebarBoxAIContent","onUserIntentToUseAI","showLoadingIndicator","submitQuestion","extension","onOpenChange","open","undefined","stopPropagationOnEsc","shouldRenderProviders","BoxAISidebarComponent","BoxAISidebarContentDefaultExport"],"sources":["../../../src/elements/content-sidebar/BoxAISidebarContent.tsx"],"sourcesContent":["/**\n * @file Box AI sidebar component\n * @author Box\n */\nimport * as React from 'react';\nimport flow from 'lodash/flow';\nimport { useIntl } from 'react-intl';\nimport classNames from 'classnames';\nimport { BoxAiAgentSelectorWithApi, useAgents, type AgentType } from '@box/box-ai-agent-selector';\nimport { IconButton, Tooltip } from '@box/blueprint-web';\nimport { ArrowsExpand } from '@box/blueprint-web-assets/icons/Fill';\nimport {\n BoxAiContentAnswers,\n ClearConversationButton,\n IntelligenceModal,\n withApiWrapper,\n type ApiWrapperWithInjectedProps,\n} from '@box/box-ai-content-answers';\nimport SidebarContent from './SidebarContent';\nimport { withAPIContext } from '../common/api-context';\nimport { withErrorBoundary } from '../common/error-boundary';\nimport { withLogger } from '../common/logger';\nimport { ORIGIN_BOXAI_SIDEBAR, SIDEBAR_VIEW_BOXAI } from '../../constants';\nimport { EVENT_JS_READY } from '../common/logger/constants';\nimport { mark } from '../../utils/performance';\nimport { BoxAISidebarContext } from './context/BoxAISidebarContext';\nimport BoxAISidebarTitle from './BoxAISidebarTitle';\n\nimport messages from '../common/messages';\n\nimport './BoxAISidebar.scss';\n\nconst MARK_NAME_JS_READY: string = `${ORIGIN_BOXAI_SIDEBAR}_${EVENT_JS_READY}`;\n\nmark(MARK_NAME_JS_READY);\n\nfunction BoxAISidebarContent(\n props: ApiWrapperWithInjectedProps & {\n onSelectedAgentCallback: (selectedAgent: AgentType) => void;\n shouldShowLandingPage: boolean;\n },\n) {\n const {\n createSession,\n encodedSession,\n onClearAction,\n onSelectedAgentCallback,\n getAIStudioAgents,\n hasRequestInProgress,\n hostAppName,\n isAIStudioAgentSelectorEnabled,\n isLoading,\n isResetChatEnabled,\n onSelectAgent,\n questions,\n shouldShowLandingPage,\n sendQuestion,\n stopQuestion,\n ...rest\n } = props;\n const { formatMessage } = useIntl();\n const isSessionInitiated = React.useRef<boolean>(false);\n const [isModalOpen, setIsModalOpen] = React.useState(false);\n const {\n cache,\n contentName,\n elementId,\n fileExtension,\n isFeedbackEnabled,\n isFeedbackFormEnabled,\n isStopResponseEnabled,\n items,\n itemSize,\n onFeedbackFormSubmit,\n onUserInteraction,\n recordAction,\n setCacheValue,\n shouldFeedbackFormIncludeFeedbackText,\n shouldPreinitSession,\n } = React.useContext(BoxAISidebarContext);\n const { agents, requestState, selectedAgent } = useAgents();\n const { questions: cacheQuestions } = cache;\n\n if (cache.shouldShowLandingPage !== shouldShowLandingPage) {\n setCacheValue('shouldShowLandingPage', shouldShowLandingPage);\n }\n\n if (cache.encodedSession !== encodedSession) {\n setCacheValue('encodedSession', encodedSession);\n }\n\n if (cache.questions !== questions) {\n setCacheValue('questions', questions);\n }\n\n if (cache.agents.selectedAgent !== selectedAgent) {\n setCacheValue('agents', { agents, requestState, selectedAgent });\n }\n\n const handleUserIntentToUseAI = (userHasInteracted: boolean = false) => {\n // Create session if not already created or loading\n if (!shouldPreinitSession && !encodedSession && !isLoading && createSession) {\n createSession(true, false);\n }\n if (userHasInteracted && onUserInteraction) {\n onUserInteraction();\n }\n };\n\n const handleModalClose = () => {\n setIsModalOpen(false);\n };\n\n const handleSwitchToModalClick = () => {\n handleUserIntentToUseAI();\n setIsModalOpen(true);\n };\n\n React.useEffect(() => {\n if (shouldPreinitSession && !encodedSession && createSession) {\n createSession(true, true);\n }\n\n if (\n encodedSession &&\n cacheQuestions.length > 0 &&\n cacheQuestions[cacheQuestions.length - 1].isCompleted === false\n ) {\n // if we have cache with question that is not completed resend it to trigger an API\n sendQuestion({ prompt: cacheQuestions[cacheQuestions.length - 1].prompt });\n }\n\n if (recordAction) {\n recordAction({\n action: 'programmatic',\n component: 'sidebar',\n feature: 'answers',\n target: 'loaded',\n data: {\n items: items.map(item => {\n return { status: item.status, fileType: item.fileType };\n }),\n },\n });\n }\n\n return () => {\n // stop API request on unmount (e.g. during switching to another tab)\n stopQuestion();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Resend the last question (if it was sent before session loaded) after (re-)initializing session\n React.useEffect(() => {\n const lastQuestion = cacheQuestions[cacheQuestions.length - 1];\n if (!shouldPreinitSession && !isSessionInitiated.current && encodedSession && lastQuestion?.isLoading) {\n sendQuestion(lastQuestion, selectedAgent, false);\n isSessionInitiated.current = true;\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [encodedSession]);\n\n React.useEffect(() => {\n onSelectedAgentCallback?.(selectedAgent);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectedAgent?.id]);\n\n const renderBoxAISidebarTitle = () => {\n return (\n <div className=\"bcs-BoxAISidebar-title-part\">\n <BoxAISidebarTitle isAIStudioAgentSelectorEnabled={isAIStudioAgentSelectorEnabled} />\n {isAIStudioAgentSelectorEnabled && (\n <div className=\"bcs-BoxAISidebar-agentSelector\">\n <BoxAiAgentSelectorWithApi\n disabled={hasRequestInProgress}\n fetcher={getAIStudioAgents}\n hostAppName={hostAppName}\n onAgentsListOpen={handleUserIntentToUseAI}\n onSelectAgent={onSelectAgent}\n recordAction={recordAction}\n shouldHideAgentSelectorOnLoad\n variant=\"sidebar\"\n />\n </div>\n )}\n </div>\n );\n };\n\n const renderActions = () => (\n <>\n {renderBoxAISidebarTitle()}\n {isResetChatEnabled && <ClearConversationButton onClick={onClearAction} />}\n <Tooltip content={formatMessage(messages.sidebarBoxAISwitchToModalView)} variant=\"standard\">\n <IconButton\n aria-label={formatMessage(messages.sidebarBoxAISwitchToModalView)}\n className=\"bcs-BoxAISidebar-expand\"\n data-target-id=\"IconButton-expandBoxAISidebar\"\n icon={ArrowsExpand}\n onClick={handleSwitchToModalClick}\n size=\"small\"\n />\n </Tooltip>\n </>\n );\n\n return (\n <>\n <SidebarContent\n actions={renderActions()}\n className={classNames('bcs-BoxAISidebar', { 'with-modal-open': isModalOpen })}\n elementId={elementId}\n sidebarView={SIDEBAR_VIEW_BOXAI}\n >\n <div className=\"bcs-BoxAISidebar-content\">\n <BoxAiContentAnswers\n className=\"bcs-BoxAISidebar-contentAnswers\"\n contentName={contentName}\n contentType={formatMessage(messages.sidebarBoxAIContent)}\n hostAppName={hostAppName}\n isAIStudioAgentSelectorEnabled={isAIStudioAgentSelectorEnabled}\n isFeedbackEnabled={isFeedbackEnabled}\n isFeedbackFormEnabled={isFeedbackFormEnabled}\n isStopResponseEnabled={isStopResponseEnabled}\n items={items}\n questions={questions}\n onFeedbackFormSubmit={onFeedbackFormSubmit}\n onUserIntentToUseAI={handleUserIntentToUseAI}\n shouldFeedbackFormIncludeFeedbackText={shouldFeedbackFormIncludeFeedbackText}\n shouldShowLandingPage={cache.shouldShowLandingPage}\n showLoadingIndicator={isLoading && shouldPreinitSession}\n stopQuestion={stopQuestion}\n submitQuestion={sendQuestion}\n variant=\"sidebar\"\n recordAction={recordAction}\n {...rest}\n />\n </div>\n </SidebarContent>\n <IntelligenceModal\n contentName={contentName}\n contentType={formatMessage(messages.sidebarBoxAIContent)}\n extension={fileExtension}\n getAIStudioAgents={getAIStudioAgents}\n hasRequestInProgress={hasRequestInProgress}\n hostAppName={hostAppName}\n isAIStudioAgentSelectorEnabled={isAIStudioAgentSelectorEnabled}\n isFeedbackEnabled={isFeedbackEnabled}\n isFeedbackFormEnabled={isFeedbackFormEnabled}\n isResetChatEnabled={isResetChatEnabled}\n isStopResponseEnabled={isStopResponseEnabled}\n items={items}\n itemSize={itemSize}\n onClearAction={onClearAction}\n onFeedbackFormSubmit={onFeedbackFormSubmit}\n onOpenChange={handleModalClose}\n onSelectAgent={onSelectAgent}\n onUserIntentToUseAI={handleUserIntentToUseAI}\n open={isModalOpen}\n questions={questions}\n recordAction={isModalOpen ? recordAction : undefined}\n shouldFeedbackFormIncludeFeedbackText={shouldFeedbackFormIncludeFeedbackText}\n shouldShowLandingPage={cache.shouldShowLandingPage}\n showLoadingIndicator={false}\n stopPropagationOnEsc\n stopQuestion={stopQuestion}\n submitQuestion={sendQuestion}\n variant=\"collapsible\"\n {...rest}\n shouldRenderProviders={false}\n />\n </>\n );\n}\n\nexport { BoxAISidebarContent as BoxAISidebarComponent };\n\nconst BoxAISidebarContentDefaultExport: typeof withAPIContext = flow([\n withLogger(ORIGIN_BOXAI_SIDEBAR),\n withErrorBoundary(ORIGIN_BOXAI_SIDEBAR),\n withAPIContext,\n withApiWrapper, // returns only props for Box AI, keep it at the end\n])(BoxAISidebarContent);\n\nexport default BoxAISidebarContentDefaultExport;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"BoxAISidebarContent.js","names":["React","flow","useIntl","classNames","BoxAiAgentSelectorWithApi","useAgents","IconButton","Tooltip","ArrowsExpand","BoxAiContentAnswers","ClearConversationButton","IntelligenceModal","withApiWrapper","SidebarContent","withAPIContext","withErrorBoundary","withLogger","ORIGIN_BOXAI_SIDEBAR","SIDEBAR_VIEW_BOXAI","EVENT_JS_READY","mark","BoxAISidebarContext","BoxAISidebarTitle","messages","MARK_NAME_JS_READY","BoxAISidebarContent","props","createSession","encodedSession","onClearAction","onSelectedAgentCallback","getAIStudioAgents","hasRequestInProgress","hostAppName","isAIStudioAgentSelectorEnabled","isLoading","onSelectAgent","questions","shouldShowLandingPage","sendQuestion","stopQuestion","rest","_objectWithoutProperties","_excluded","formatMessage","isSessionInitiated","useRef","isModalOpen","setIsModalOpen","useState","cache","contentName","elementId","fileExtension","isFeedbackEnabled","isFeedbackFormEnabled","isStopResponseEnabled","items","itemSize","onFeedbackFormSubmit","onUserInteraction","recordAction","setCacheValue","shouldFeedbackFormIncludeFeedbackText","shouldPreinitSession","useContext","agents","requestState","selectedAgent","cacheQuestions","handleUserIntentToUseAI","userHasInteracted","handleModalClose","handleSwitchToModalClick","useEffect","length","isCompleted","prompt","action","component","feature","target","data","map","item","status","fileType","lastQuestion","current","id","renderBoxAISidebarTitle","createElement","className","disabled","fetcher","onAgentsListOpen","shouldHideAgentSelectorOnLoad","variant","renderActions","Fragment","onClick","content","sidebarBoxAISwitchToModalView","icon","size","actions","sidebarView","_extends","contentType","sidebarBoxAIContent","onUserIntentToUseAI","showLoadingIndicator","submitQuestion","extension","onOpenChange","open","undefined","stopPropagationOnEsc","shouldRenderProviders","BoxAISidebarComponent","BoxAISidebarContentDefaultExport"],"sources":["../../../src/elements/content-sidebar/BoxAISidebarContent.tsx"],"sourcesContent":["/**\n * @file Box AI sidebar component\n * @author Box\n */\nimport * as React from 'react';\nimport flow from 'lodash/flow';\nimport { useIntl } from 'react-intl';\nimport classNames from 'classnames';\nimport { BoxAiAgentSelectorWithApi, useAgents, type AgentType } from '@box/box-ai-agent-selector';\nimport { IconButton, Tooltip } from '@box/blueprint-web';\nimport { ArrowsExpand } from '@box/blueprint-web-assets/icons/Fill';\nimport {\n BoxAiContentAnswers,\n ClearConversationButton,\n IntelligenceModal,\n withApiWrapper,\n type ApiWrapperWithInjectedProps,\n} from '@box/box-ai-content-answers';\nimport SidebarContent from './SidebarContent';\nimport { withAPIContext } from '../common/api-context';\nimport { withErrorBoundary } from '../common/error-boundary';\nimport { withLogger } from '../common/logger';\nimport { ORIGIN_BOXAI_SIDEBAR, SIDEBAR_VIEW_BOXAI } from '../../constants';\nimport { EVENT_JS_READY } from '../common/logger/constants';\nimport { mark } from '../../utils/performance';\nimport { BoxAISidebarContext } from './context/BoxAISidebarContext';\nimport BoxAISidebarTitle from './BoxAISidebarTitle';\n\nimport messages from '../common/messages';\n\nimport './BoxAISidebar.scss';\n\nconst MARK_NAME_JS_READY: string = `${ORIGIN_BOXAI_SIDEBAR}_${EVENT_JS_READY}`;\n\nmark(MARK_NAME_JS_READY);\n\nfunction BoxAISidebarContent(\n props: ApiWrapperWithInjectedProps & {\n onSelectedAgentCallback: (selectedAgent: AgentType) => void;\n shouldShowLandingPage: boolean;\n },\n) {\n const {\n createSession,\n encodedSession,\n onClearAction,\n onSelectedAgentCallback,\n getAIStudioAgents,\n hasRequestInProgress,\n hostAppName,\n isAIStudioAgentSelectorEnabled,\n isLoading,\n onSelectAgent,\n questions,\n shouldShowLandingPage,\n sendQuestion,\n stopQuestion,\n ...rest\n } = props;\n const { formatMessage } = useIntl();\n const isSessionInitiated = React.useRef<boolean>(false);\n const [isModalOpen, setIsModalOpen] = React.useState(false);\n const {\n cache,\n contentName,\n elementId,\n fileExtension,\n isFeedbackEnabled,\n isFeedbackFormEnabled,\n isStopResponseEnabled,\n items,\n itemSize,\n onFeedbackFormSubmit,\n onUserInteraction,\n recordAction,\n setCacheValue,\n shouldFeedbackFormIncludeFeedbackText,\n shouldPreinitSession,\n } = React.useContext(BoxAISidebarContext);\n const { agents, requestState, selectedAgent } = useAgents();\n const { questions: cacheQuestions } = cache;\n\n if (cache.shouldShowLandingPage !== shouldShowLandingPage) {\n setCacheValue('shouldShowLandingPage', shouldShowLandingPage);\n }\n\n if (cache.encodedSession !== encodedSession) {\n setCacheValue('encodedSession', encodedSession);\n }\n\n if (cache.questions !== questions) {\n setCacheValue('questions', questions);\n }\n\n if (cache.agents.selectedAgent !== selectedAgent) {\n setCacheValue('agents', { agents, requestState, selectedAgent });\n }\n\n const handleUserIntentToUseAI = (userHasInteracted: boolean = false) => {\n // Create session if not already created or loading\n if (!shouldPreinitSession && !encodedSession && !isLoading && createSession) {\n createSession(true, false);\n }\n if (userHasInteracted && onUserInteraction) {\n onUserInteraction();\n }\n };\n\n const handleModalClose = () => {\n setIsModalOpen(false);\n };\n\n const handleSwitchToModalClick = () => {\n handleUserIntentToUseAI();\n setIsModalOpen(true);\n };\n\n React.useEffect(() => {\n if (shouldPreinitSession && !encodedSession && createSession) {\n createSession(true, true);\n }\n\n if (\n encodedSession &&\n cacheQuestions.length > 0 &&\n cacheQuestions[cacheQuestions.length - 1].isCompleted === false\n ) {\n // if we have cache with question that is not completed resend it to trigger an API\n sendQuestion({ prompt: cacheQuestions[cacheQuestions.length - 1].prompt });\n }\n\n if (recordAction) {\n recordAction({\n action: 'programmatic',\n component: 'sidebar',\n feature: 'answers',\n target: 'loaded',\n data: {\n items: items.map(item => {\n return { status: item.status, fileType: item.fileType };\n }),\n },\n });\n }\n\n return () => {\n // stop API request on unmount (e.g. during switching to another tab)\n stopQuestion();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Resend the last question (if it was sent before session loaded) after (re-)initializing session\n React.useEffect(() => {\n const lastQuestion = cacheQuestions[cacheQuestions.length - 1];\n if (!shouldPreinitSession && !isSessionInitiated.current && encodedSession && lastQuestion?.isLoading) {\n sendQuestion(lastQuestion, selectedAgent, false);\n isSessionInitiated.current = true;\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [encodedSession]);\n\n React.useEffect(() => {\n onSelectedAgentCallback?.(selectedAgent);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectedAgent?.id]);\n\n const renderBoxAISidebarTitle = () => {\n return (\n <div className=\"bcs-BoxAISidebar-title-part\">\n <BoxAISidebarTitle isAIStudioAgentSelectorEnabled={isAIStudioAgentSelectorEnabled} />\n {isAIStudioAgentSelectorEnabled && (\n <div className=\"bcs-BoxAISidebar-agentSelector\">\n <BoxAiAgentSelectorWithApi\n disabled={hasRequestInProgress}\n fetcher={getAIStudioAgents}\n hostAppName={hostAppName}\n onAgentsListOpen={handleUserIntentToUseAI}\n onSelectAgent={onSelectAgent}\n recordAction={recordAction}\n shouldHideAgentSelectorOnLoad\n variant=\"sidebar\"\n />\n </div>\n )}\n </div>\n );\n };\n\n const renderActions = () => (\n <>\n {renderBoxAISidebarTitle()}\n <ClearConversationButton onClick={onClearAction} />\n <Tooltip content={formatMessage(messages.sidebarBoxAISwitchToModalView)} variant=\"standard\">\n <IconButton\n aria-label={formatMessage(messages.sidebarBoxAISwitchToModalView)}\n className=\"bcs-BoxAISidebar-expand\"\n data-target-id=\"IconButton-expandBoxAISidebar\"\n icon={ArrowsExpand}\n onClick={handleSwitchToModalClick}\n size=\"small\"\n />\n </Tooltip>\n </>\n );\n\n return (\n <>\n <SidebarContent\n actions={renderActions()}\n className={classNames('bcs-BoxAISidebar', { 'with-modal-open': isModalOpen })}\n elementId={elementId}\n sidebarView={SIDEBAR_VIEW_BOXAI}\n >\n <div className=\"bcs-BoxAISidebar-content\">\n <BoxAiContentAnswers\n className=\"bcs-BoxAISidebar-contentAnswers\"\n contentName={contentName}\n contentType={formatMessage(messages.sidebarBoxAIContent)}\n hostAppName={hostAppName}\n isAIStudioAgentSelectorEnabled={isAIStudioAgentSelectorEnabled}\n isFeedbackEnabled={isFeedbackEnabled}\n isFeedbackFormEnabled={isFeedbackFormEnabled}\n isStopResponseEnabled={isStopResponseEnabled}\n items={items}\n questions={questions}\n onFeedbackFormSubmit={onFeedbackFormSubmit}\n onUserIntentToUseAI={handleUserIntentToUseAI}\n shouldFeedbackFormIncludeFeedbackText={shouldFeedbackFormIncludeFeedbackText}\n shouldShowLandingPage={cache.shouldShowLandingPage}\n showLoadingIndicator={isLoading && shouldPreinitSession}\n stopQuestion={stopQuestion}\n submitQuestion={sendQuestion}\n variant=\"sidebar\"\n recordAction={recordAction}\n {...rest}\n />\n </div>\n </SidebarContent>\n <IntelligenceModal\n contentName={contentName}\n contentType={formatMessage(messages.sidebarBoxAIContent)}\n extension={fileExtension}\n getAIStudioAgents={getAIStudioAgents}\n hasRequestInProgress={hasRequestInProgress}\n hostAppName={hostAppName}\n isAIStudioAgentSelectorEnabled={isAIStudioAgentSelectorEnabled}\n isFeedbackEnabled={isFeedbackEnabled}\n isFeedbackFormEnabled={isFeedbackFormEnabled}\n isStopResponseEnabled={isStopResponseEnabled}\n items={items}\n itemSize={itemSize}\n onClearAction={onClearAction}\n onFeedbackFormSubmit={onFeedbackFormSubmit}\n onOpenChange={handleModalClose}\n onSelectAgent={onSelectAgent}\n onUserIntentToUseAI={handleUserIntentToUseAI}\n open={isModalOpen}\n questions={questions}\n recordAction={isModalOpen ? recordAction : undefined}\n shouldFeedbackFormIncludeFeedbackText={shouldFeedbackFormIncludeFeedbackText}\n shouldShowLandingPage={cache.shouldShowLandingPage}\n showLoadingIndicator={false}\n stopPropagationOnEsc\n stopQuestion={stopQuestion}\n submitQuestion={sendQuestion}\n variant=\"collapsible\"\n {...rest}\n shouldRenderProviders={false}\n />\n </>\n );\n}\n\nexport { BoxAISidebarContent as BoxAISidebarComponent };\n\nconst BoxAISidebarContentDefaultExport: typeof withAPIContext = flow([\n withLogger(ORIGIN_BOXAI_SIDEBAR),\n withErrorBoundary(ORIGIN_BOXAI_SIDEBAR),\n withAPIContext,\n withApiWrapper, // returns only props for Box AI, keep it at the end\n])(BoxAISidebarContent);\n\nexport default BoxAISidebarContentDefaultExport;\n"],"mappings":"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","ignoreList":[]}
@@ -43,7 +43,6 @@ export default {
43
43
  isFeedbackEnabled: true,
44
44
  isIntelligentQueryMode: false,
45
45
  isMarkdownEnabled: true,
46
- isResetChatEnabled: true,
47
46
  isStopResponseEnabled: true,
48
47
  isStreamingEnabled: false,
49
48
  items: [{
@@ -1 +1 @@
1
- {"version":3,"file":"BoxAISidebar.stories.js","names":["ContentSidebar","mockFeatures","basic","withFileTypeNotSupported","args","features","boxai","sidebar","disabledTooltip","enabled","showOnlyNavButton","title","component","fileId","global","FILE_ID","token","TOKEN","boxAISidebarProps","createSessionRequest","encodedSession","fetchTimeout","initial","getAgentConfig","getAIStudioAgents","getAnswer","getAnswerStreaming","getSuggestedQuestions","hostAppName","isAgentSelectorEnabled","isAIStudioAgentSelectorEnabled","isCitationsEnabled","isDebugModeEnabled","isFeedbackEnabled","isIntelligentQueryMode","isMarkdownEnabled","isResetChatEnabled","isStopResponseEnabled","isStreamingEnabled","items","id","name","type","fileType","status","recordAction"],"sources":["../../../../src/elements/content-sidebar/stories/BoxAISidebar.stories.tsx"],"sourcesContent":["import ContentSidebar from '../ContentSidebar';\n\nconst mockFeatures = {\n 'boxai.sidebar.enabled': true,\n};\n\nexport const basic = {};\n\nexport const withFileTypeNotSupported = {\n args: {\n features: {\n boxai: {\n sidebar: {\n disabledTooltip: 'Box AI is not currently supported for this file type',\n enabled: true,\n showOnlyNavButton: true,\n },\n },\n },\n },\n};\n\nexport default {\n title: 'Elements/ContentSidebar/BoxAISidebar',\n component: ContentSidebar,\n args: {\n features: mockFeatures,\n fileId: global.FILE_ID,\n token: global.TOKEN,\n boxAISidebarProps: {\n createSessionRequest: () => ({ encodedSession: '1234' }),\n fetchTimeout: { initial: 20000 },\n getAgentConfig: () => ({}),\n getAIStudioAgents: () => ({}),\n getAnswer: () => ({}),\n getAnswerStreaming: () => ({}),\n getSuggestedQuestions: null,\n hostAppName: 'storybook-test',\n isAgentSelectorEnabled: false,\n isAIStudioAgentSelectorEnabled: true,\n isCitationsEnabled: true,\n isDebugModeEnabled: true,\n isFeedbackEnabled: true,\n isIntelligentQueryMode: false,\n isMarkdownEnabled: true,\n isResetChatEnabled: true,\n isStopResponseEnabled: true,\n isStreamingEnabled: false,\n items: [{ id: '123', name: 'Document (PDF).pdf', type: 'file', fileType: 'pdf', status: 'supported' }],\n recordAction: () => ({}),\n },\n },\n};\n"],"mappings":"AAAA,OAAOA,cAAc,MAAM,mBAAmB;AAE9C,MAAMC,YAAY,GAAG;EACjB,uBAAuB,EAAE;AAC7B,CAAC;AAED,OAAO,MAAMC,KAAK,GAAG,CAAC,CAAC;AAEvB,OAAO,MAAMC,wBAAwB,GAAG;EACpCC,IAAI,EAAE;IACFC,QAAQ,EAAE;MACNC,KAAK,EAAE;QACHC,OAAO,EAAE;UACLC,eAAe,EAAE,sDAAsD;UACvEC,OAAO,EAAE,IAAI;UACbC,iBAAiB,EAAE;QACvB;MACJ;IACJ;EACJ;AACJ,CAAC;AAED,eAAe;EACXC,KAAK,EAAE,sCAAsC;EAC7CC,SAAS,EAAEZ,cAAc;EACzBI,IAAI,EAAE;IACFC,QAAQ,EAAEJ,YAAY;IACtBY,MAAM,EAAEC,MAAM,CAACC,OAAO;IACtBC,KAAK,EAAEF,MAAM,CAACG,KAAK;IACnBC,iBAAiB,EAAE;MACfC,oBAAoB,EAAEA,CAAA,MAAO;QAAEC,cAAc,EAAE;MAAO,CAAC,CAAC;MACxDC,YAAY,EAAE;QAAEC,OAAO,EAAE;MAAM,CAAC;MAChCC,cAAc,EAAEA,CAAA,MAAO,CAAC,CAAC,CAAC;MAC1BC,iBAAiB,EAAEA,CAAA,MAAO,CAAC,CAAC,CAAC;MAC7BC,SAAS,EAAEA,CAAA,MAAO,CAAC,CAAC,CAAC;MACrBC,kBAAkB,EAAEA,CAAA,MAAO,CAAC,CAAC,CAAC;MAC9BC,qBAAqB,EAAE,IAAI;MAC3BC,WAAW,EAAE,gBAAgB;MAC7BC,sBAAsB,EAAE,KAAK;MAC7BC,8BAA8B,EAAE,IAAI;MACpCC,kBAAkB,EAAE,IAAI;MACxBC,kBAAkB,EAAE,IAAI;MACxBC,iBAAiB,EAAE,IAAI;MACvBC,sBAAsB,EAAE,KAAK;MAC7BC,iBAAiB,EAAE,IAAI;MACvBC,kBAAkB,EAAE,IAAI;MACxBC,qBAAqB,EAAE,IAAI;MAC3BC,kBAAkB,EAAE,KAAK;MACzBC,KAAK,EAAE,CAAC;QAAEC,EAAE,EAAE,KAAK;QAAEC,IAAI,EAAE,oBAAoB;QAAEC,IAAI,EAAE,MAAM;QAAEC,QAAQ,EAAE,KAAK;QAAEC,MAAM,EAAE;MAAY,CAAC,CAAC;MACtGC,YAAY,EAAEA,CAAA,MAAO,CAAC,CAAC;IAC3B;EACJ;AACJ,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"BoxAISidebar.stories.js","names":["ContentSidebar","mockFeatures","basic","withFileTypeNotSupported","args","features","boxai","sidebar","disabledTooltip","enabled","showOnlyNavButton","title","component","fileId","global","FILE_ID","token","TOKEN","boxAISidebarProps","createSessionRequest","encodedSession","fetchTimeout","initial","getAgentConfig","getAIStudioAgents","getAnswer","getAnswerStreaming","getSuggestedQuestions","hostAppName","isAgentSelectorEnabled","isAIStudioAgentSelectorEnabled","isCitationsEnabled","isDebugModeEnabled","isFeedbackEnabled","isIntelligentQueryMode","isMarkdownEnabled","isStopResponseEnabled","isStreamingEnabled","items","id","name","type","fileType","status","recordAction"],"sources":["../../../../src/elements/content-sidebar/stories/BoxAISidebar.stories.tsx"],"sourcesContent":["import ContentSidebar from '../ContentSidebar';\n\nconst mockFeatures = {\n 'boxai.sidebar.enabled': true,\n};\n\nexport const basic = {};\n\nexport const withFileTypeNotSupported = {\n args: {\n features: {\n boxai: {\n sidebar: {\n disabledTooltip: 'Box AI is not currently supported for this file type',\n enabled: true,\n showOnlyNavButton: true,\n },\n },\n },\n },\n};\n\nexport default {\n title: 'Elements/ContentSidebar/BoxAISidebar',\n component: ContentSidebar,\n args: {\n features: mockFeatures,\n fileId: global.FILE_ID,\n token: global.TOKEN,\n boxAISidebarProps: {\n createSessionRequest: () => ({ encodedSession: '1234' }),\n fetchTimeout: { initial: 20000 },\n getAgentConfig: () => ({}),\n getAIStudioAgents: () => ({}),\n getAnswer: () => ({}),\n getAnswerStreaming: () => ({}),\n getSuggestedQuestions: null,\n hostAppName: 'storybook-test',\n isAgentSelectorEnabled: false,\n isAIStudioAgentSelectorEnabled: true,\n isCitationsEnabled: true,\n isDebugModeEnabled: true,\n isFeedbackEnabled: true,\n isIntelligentQueryMode: false,\n isMarkdownEnabled: true,\n isStopResponseEnabled: true,\n isStreamingEnabled: false,\n items: [{ id: '123', name: 'Document (PDF).pdf', type: 'file', fileType: 'pdf', status: 'supported' }],\n recordAction: () => ({}),\n },\n },\n};\n"],"mappings":"AAAA,OAAOA,cAAc,MAAM,mBAAmB;AAE9C,MAAMC,YAAY,GAAG;EACjB,uBAAuB,EAAE;AAC7B,CAAC;AAED,OAAO,MAAMC,KAAK,GAAG,CAAC,CAAC;AAEvB,OAAO,MAAMC,wBAAwB,GAAG;EACpCC,IAAI,EAAE;IACFC,QAAQ,EAAE;MACNC,KAAK,EAAE;QACHC,OAAO,EAAE;UACLC,eAAe,EAAE,sDAAsD;UACvEC,OAAO,EAAE,IAAI;UACbC,iBAAiB,EAAE;QACvB;MACJ;IACJ;EACJ;AACJ,CAAC;AAED,eAAe;EACXC,KAAK,EAAE,sCAAsC;EAC7CC,SAAS,EAAEZ,cAAc;EACzBI,IAAI,EAAE;IACFC,QAAQ,EAAEJ,YAAY;IACtBY,MAAM,EAAEC,MAAM,CAACC,OAAO;IACtBC,KAAK,EAAEF,MAAM,CAACG,KAAK;IACnBC,iBAAiB,EAAE;MACfC,oBAAoB,EAAEA,CAAA,MAAO;QAAEC,cAAc,EAAE;MAAO,CAAC,CAAC;MACxDC,YAAY,EAAE;QAAEC,OAAO,EAAE;MAAM,CAAC;MAChCC,cAAc,EAAEA,CAAA,MAAO,CAAC,CAAC,CAAC;MAC1BC,iBAAiB,EAAEA,CAAA,MAAO,CAAC,CAAC,CAAC;MAC7BC,SAAS,EAAEA,CAAA,MAAO,CAAC,CAAC,CAAC;MACrBC,kBAAkB,EAAEA,CAAA,MAAO,CAAC,CAAC,CAAC;MAC9BC,qBAAqB,EAAE,IAAI;MAC3BC,WAAW,EAAE,gBAAgB;MAC7BC,sBAAsB,EAAE,KAAK;MAC7BC,8BAA8B,EAAE,IAAI;MACpCC,kBAAkB,EAAE,IAAI;MACxBC,kBAAkB,EAAE,IAAI;MACxBC,iBAAiB,EAAE,IAAI;MACvBC,sBAAsB,EAAE,KAAK;MAC7BC,iBAAiB,EAAE,IAAI;MACvBC,qBAAqB,EAAE,IAAI;MAC3BC,kBAAkB,EAAE,KAAK;MACzBC,KAAK,EAAE,CAAC;QAAEC,EAAE,EAAE,KAAK;QAAEC,IAAI,EAAE,oBAAoB;QAAEC,IAAI,EAAE,MAAM;QAAEC,QAAQ,EAAE,KAAK;QAAEC,MAAM,EAAE;MAAY,CAAC,CAAC;MACtGC,YAAY,EAAEA,CAAA,MAAO,CAAC,CAAC;IAC3B;EACJ;AACJ,CAAC","ignoreList":[]}
@@ -50,7 +50,6 @@ const meta = {
50
50
  isDebugModeEnabled: true,
51
51
  isIntelligentQueryMode: false,
52
52
  isMarkdownEnabled: true,
53
- isResetChatEnabled: true,
54
53
  isStopResponseEnabled: true,
55
54
  isStreamingEnabled: false,
56
55
  items: [{