@box/uploads-manager 2.3.2 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- import uploads_item_messages_default from"../uploads-item.messages.js";import{t as uploads_item_module_default}from"../../../../chunks/uploads-item.module.js";import{Text}from"@box/blueprint-web";import{AlertCircle,CheckmarkCircle,XMarkCircle}from"@box/blueprint-web-assets/icons/Medium";import{useIntl}from"react-intl";import{jsx,jsxs}from"react/jsx-runtime";function StatusLine({item}){let intl=useIntl(),{status,progress,isFolder,errorMessage,versionNumber}=item,showVersion=versionNumber&&Number(versionNumber)>1;if(status===`pending`||status===`uploading`||status===`staged`)return isFolder?null:jsx(Text,{as:`span`,color:`textOnLightSecondary`,variant:`bodySmall`,children:intl.formatMessage(uploads_item_messages_default.itemStatusUploading,{progress})});if(status===`complete`)return jsxs(`div`,{className:uploads_item_module_default.statusLine,children:[jsx(CheckmarkCircle,{"aria-hidden":!0,className:`${uploads_item_module_default.statusIcon} ${uploads_item_module_default.statusCompleted}`,color:`currentColor`,role:`presentation`}),jsx(Text,{as:`span`,className:uploads_item_module_default.statusCompleted,variant:`bodySmall`,children:intl.formatMessage(uploads_item_messages_default.itemStatusCompleted)}),showVersion&&jsx(Text,{as:`span`,variant:`bodySmall`,color:`textOnLightSecondary`,children:intl.formatMessage(uploads_item_messages_default.itemStatusVersionSuffix,{versionNumber})})]});if(status===`error`){let errorText=errorMessage?intl.formatMessage(uploads_item_messages_default.itemStatusError,{errorMessage}):intl.formatMessage(uploads_item_messages_default.itemStatusErrorNoMessage);return jsxs(`div`,{className:uploads_item_module_default.statusLine,children:[jsx(AlertCircle,{"aria-hidden":!0,className:`${uploads_item_module_default.statusIcon} ${uploads_item_module_default.statusError}`,color:`currentColor`,role:`presentation`}),jsx(Text,{as:`span`,color:`textOnLightError`,variant:`bodySmall`,children:errorText})]})}return status===`canceled`?jsxs(`div`,{className:uploads_item_module_default.statusLine,children:[jsx(XMarkCircle,{"aria-hidden":!0,className:uploads_item_module_default.statusIcon,color:`currentColor`,role:`presentation`}),jsx(Text,{as:`span`,color:`textOnLightSecondary`,variant:`bodySmall`,children:intl.formatMessage(uploads_item_messages_default.itemStatusCanceled)})]}):null}export{StatusLine};
1
+ import uploads_item_messages_default from"../uploads-item.messages.js";import{t as uploads_item_module_default}from"../../../../chunks/uploads-item.module.js";import{formatBytesProgress}from"../../utils/formatBytesProgress.js";import{formatTimeRemaining}from"../../utils/formatTimeRemaining.js";import{Text}from"@box/blueprint-web";import{AlertCircle,CheckmarkCircle,XMarkCircle}from"@box/blueprint-web-assets/icons/Medium";import{useIntl}from"react-intl";import{jsx,jsxs}from"react/jsx-runtime";function StatusLine({item}){let intl=useIntl(),{status,progress,isFolder,errorMessage,versionNumber,bytesUploaded,totalBytes,remainingMs}=item,showVersion=versionNumber&&Number(versionNumber)>1;if(status===`pending`||status===`uploading`||status===`staged`){if(isFolder)return null;let size=formatBytesProgress(intl,bytesUploaded,totalBytes),time=remainingMs===void 0?null:formatTimeRemaining(intl,remainingMs),statusText;return statusText=size&&time?intl.formatMessage(uploads_item_messages_default.itemStatusUploadingSizeWithTime,{size,time}):size?intl.formatMessage(uploads_item_messages_default.itemStatusUploadingSize,{size}):intl.formatMessage(uploads_item_messages_default.itemStatusUploading,{progress}),jsx(Text,{as:`span`,color:`textOnLightSecondary`,variant:`bodySmall`,children:statusText})}if(status===`complete`)return jsxs(`div`,{className:uploads_item_module_default.statusLine,children:[jsx(CheckmarkCircle,{"aria-hidden":!0,className:`${uploads_item_module_default.statusIcon} ${uploads_item_module_default.statusCompleted}`,color:`currentColor`,role:`presentation`}),jsx(Text,{as:`span`,className:uploads_item_module_default.statusCompleted,variant:`bodySmall`,children:intl.formatMessage(uploads_item_messages_default.itemStatusCompleted)}),showVersion&&jsx(Text,{as:`span`,variant:`bodySmall`,color:`textOnLightSecondary`,children:intl.formatMessage(uploads_item_messages_default.itemStatusVersionSuffix,{versionNumber})})]});if(status===`error`){let errorText=errorMessage?intl.formatMessage(uploads_item_messages_default.itemStatusError,{errorMessage}):intl.formatMessage(uploads_item_messages_default.itemStatusErrorNoMessage);return jsxs(`div`,{className:uploads_item_module_default.statusLine,children:[jsx(AlertCircle,{"aria-hidden":!0,className:`${uploads_item_module_default.statusIcon} ${uploads_item_module_default.statusError}`,color:`currentColor`,role:`presentation`}),jsx(Text,{as:`span`,color:`textOnLightError`,variant:`bodySmall`,children:errorText})]})}return status===`canceled`?jsxs(`div`,{className:uploads_item_module_default.statusLine,children:[jsx(XMarkCircle,{"aria-hidden":!0,className:uploads_item_module_default.statusIcon,color:`currentColor`,role:`presentation`}),jsx(Text,{as:`span`,color:`textOnLightSecondary`,variant:`bodySmall`,children:intl.formatMessage(uploads_item_messages_default.itemStatusCanceled)})]}):null}export{StatusLine};
@@ -1 +1 @@
1
- import{defineMessages}from"react-intl";var uploads_item_messages_default=defineMessages({itemStatusUploading:{id:`groupSharedFeatures.uploadsManager.itemList.itemStatusUploading`,defaultMessage:`Uploading · {progress}%`},itemStatusCompleted:{id:`groupSharedFeatures.uploadsManager.itemList.itemStatusCompleted`,defaultMessage:`Completed`},itemStatusCompletedWithVersion:{id:`groupSharedFeatures.uploadsManager.itemList.itemStatusCompletedWithVersion`,defaultMessage:`Completed · Version {versionNumber}`},itemStatusVersionSuffix:{id:`groupSharedFeatures.uploadsManager.itemList.itemStatusVersionSuffix`,defaultMessage:`· Version {versionNumber}`},itemStatusCanceled:{id:`groupSharedFeatures.uploadsManager.itemList.itemStatusCanceled`,defaultMessage:`Canceled`},itemStatusError:{id:`groupSharedFeatures.uploadsManager.itemList.itemStatusError`,defaultMessage:`Error: {errorMessage}`},itemStatusErrorNoMessage:{id:`groupSharedFeatures.uploadsManager.itemList.itemStatusErrorNoMessage`,defaultMessage:`Error`},itemProgressAriaLabel:{id:`groupSharedFeatures.uploadsManager.itemList.itemProgressAriaLabel`,defaultMessage:`Uploading {name}, {progress}% complete`},itemActionCancel:{id:`groupSharedFeatures.uploadsManager.itemList.itemActionCancel`,defaultMessage:`Cancel`},itemActionCancelAriaLabel:{id:`groupSharedFeatures.uploadsManager.itemList.itemActionCancelAriaLabel`,defaultMessage:`Cancel upload`},itemActionRetry:{id:`groupSharedFeatures.uploadsManager.itemList.itemActionRetry`,defaultMessage:`Retry`},itemActionRetryAriaLabel:{id:`groupSharedFeatures.uploadsManager.itemList.itemActionRetryAriaLabel`,defaultMessage:`Retry upload`},itemActionRemove:{id:`groupSharedFeatures.uploadsManager.itemList.itemActionRemove`,defaultMessage:`Remove`},itemActionRemoveAriaLabel:{id:`groupSharedFeatures.uploadsManager.itemList.itemActionRemoveAriaLabel`,defaultMessage:`Remove`},itemActionOpen:{id:`groupSharedFeatures.uploadsManager.itemList.itemActionOpen`,defaultMessage:`Open`},itemActionOpenAriaLabel:{id:`groupSharedFeatures.uploadsManager.itemList.itemActionOpenAriaLabel`,defaultMessage:`Open`},itemActionShare:{id:`groupSharedFeatures.uploadsManager.itemList.itemActionShare`,defaultMessage:`Share`},itemActionShareAriaLabel:{id:`groupSharedFeatures.uploadsManager.itemList.itemActionShareAriaLabel`,defaultMessage:`Share`}});export{uploads_item_messages_default as default};
1
+ import{defineMessages}from"react-intl";var uploads_item_messages_default=defineMessages({itemStatusUploading:{id:`groupSharedFeatures.uploadsManager.itemList.itemStatusUploading`,defaultMessage:`Uploading · {progress}%`},itemStatusUploadingSize:{id:`groupSharedFeatures.uploadsManager.itemList.itemStatusUploadingSize`,defaultMessage:`{size}`},itemStatusUploadingSizeWithTime:{id:`groupSharedFeatures.uploadsManager.itemList.itemStatusUploadingSizeWithTime`,defaultMessage:`{size} · {time} left`},itemStatusCompleted:{id:`groupSharedFeatures.uploadsManager.itemList.itemStatusCompleted`,defaultMessage:`Completed`},itemStatusCompletedWithVersion:{id:`groupSharedFeatures.uploadsManager.itemList.itemStatusCompletedWithVersion`,defaultMessage:`Completed · Version {versionNumber}`},itemStatusVersionSuffix:{id:`groupSharedFeatures.uploadsManager.itemList.itemStatusVersionSuffix`,defaultMessage:`· Version {versionNumber}`},itemStatusCanceled:{id:`groupSharedFeatures.uploadsManager.itemList.itemStatusCanceled`,defaultMessage:`Canceled`},itemStatusError:{id:`groupSharedFeatures.uploadsManager.itemList.itemStatusError`,defaultMessage:`Error: {errorMessage}`},itemStatusErrorNoMessage:{id:`groupSharedFeatures.uploadsManager.itemList.itemStatusErrorNoMessage`,defaultMessage:`Error`},itemProgressAriaLabel:{id:`groupSharedFeatures.uploadsManager.itemList.itemProgressAriaLabel`,defaultMessage:`Uploading {name}, {progress}% complete`},itemActionCancel:{id:`groupSharedFeatures.uploadsManager.itemList.itemActionCancel`,defaultMessage:`Cancel`},itemActionCancelAriaLabel:{id:`groupSharedFeatures.uploadsManager.itemList.itemActionCancelAriaLabel`,defaultMessage:`Cancel upload`},itemActionRetry:{id:`groupSharedFeatures.uploadsManager.itemList.itemActionRetry`,defaultMessage:`Retry`},itemActionRetryAriaLabel:{id:`groupSharedFeatures.uploadsManager.itemList.itemActionRetryAriaLabel`,defaultMessage:`Retry upload`},itemActionRemove:{id:`groupSharedFeatures.uploadsManager.itemList.itemActionRemove`,defaultMessage:`Remove`},itemActionRemoveAriaLabel:{id:`groupSharedFeatures.uploadsManager.itemList.itemActionRemoveAriaLabel`,defaultMessage:`Remove`},itemActionOpen:{id:`groupSharedFeatures.uploadsManager.itemList.itemActionOpen`,defaultMessage:`Open`},itemActionOpenAriaLabel:{id:`groupSharedFeatures.uploadsManager.itemList.itemActionOpenAriaLabel`,defaultMessage:`Open`},itemActionShare:{id:`groupSharedFeatures.uploadsManager.itemList.itemActionShare`,defaultMessage:`Share`},itemActionShareAriaLabel:{id:`groupSharedFeatures.uploadsManager.itemList.itemActionShareAriaLabel`,defaultMessage:`Share`}});export{uploads_item_messages_default as default};
@@ -0,0 +1 @@
1
+ var BYTES_PER_UNIT=1024,UNITS=[`B`,`KB`,`MB`,`GB`,`TB`,`PB`];function formatBytesProgress(intl,bytesUploaded,totalBytes){if(totalBytes===void 0||totalBytes<=0||!Number.isFinite(totalBytes))return null;let uploaded=Number.isFinite(bytesUploaded)?Math.max(0,bytesUploaded):0,exponent=Math.min(Math.floor(Math.log(totalBytes)/Math.log(BYTES_PER_UNIT)),UNITS.length-1),divisor=BYTES_PER_UNIT**exponent,fractionDigits={minimumFractionDigits:1,maximumFractionDigits:1};return`${intl.formatNumber(uploaded/divisor,fractionDigits)} / ${intl.formatNumber(totalBytes/divisor,fractionDigits)} ${UNITS[exponent]}`}export{formatBytesProgress};
@@ -0,0 +1 @@
1
+ var MS_PER_SECOND=1e3,SECONDS_PER_MINUTE=60,SECONDS_PER_HOUR=3600;function formatTimeRemaining(intl,remainingMs){if(!Number.isFinite(remainingMs)||remainingMs<0)return null;let remainingSeconds=remainingMs/MS_PER_SECOND,value,unit;if(remainingSeconds<SECONDS_PER_MINUTE){let rounded=Math.round(remainingSeconds);if(rounded<=0)return null;value=rounded,unit=`second`}else remainingSeconds<SECONDS_PER_HOUR?(value=Math.round(remainingSeconds/SECONDS_PER_MINUTE),unit=`minute`):(value=Math.round(remainingSeconds/SECONDS_PER_HOUR),unit=`hour`);return intl.formatNumber(value,{style:`unit`,unit,unitDisplay:`short`})}export{formatTimeRemaining};
@@ -35,6 +35,25 @@ export interface UploadItem {
35
35
  * Only meaningful when status is `uploading` or `staged`.
36
36
  */
37
37
  progress: number;
38
+ /**
39
+ * Number of bytes uploaded so far.
40
+ * When provided together with `totalBytes`, the item row shows a
41
+ * byte-count detail (e.g. `2.4 / 5.3 MB`) instead of the plain percentage.
42
+ * Only meaningful when status is `pending`, `uploading`, or `staged`.
43
+ */
44
+ bytesUploaded?: number;
45
+ /**
46
+ * Total size of the upload in bytes.
47
+ * Required (alongside `bytesUploaded`) to render the `X / TOTAL` detail.
48
+ */
49
+ totalBytes?: number;
50
+ /**
51
+ * Estimated time remaining for this upload, in milliseconds.
52
+ * When provided (and finite), the item row appends a `· N sec left` hint.
53
+ * Omit or pass a non-finite value while the estimate is not yet available
54
+ * (e.g. before the first progress tick).
55
+ */
56
+ remainingMs?: number;
38
57
  /** Current status of this upload item */
39
58
  status: UploadItemStatus;
40
59
  /**
@@ -4,6 +4,16 @@ declare const _default: {
4
4
  defaultMessage: string;
5
5
  description: string;
6
6
  };
7
+ itemStatusUploadingSize: {
8
+ id: string;
9
+ defaultMessage: string;
10
+ description: string;
11
+ };
12
+ itemStatusUploadingSizeWithTime: {
13
+ id: string;
14
+ defaultMessage: string;
15
+ description: string;
16
+ };
7
17
  itemStatusCompleted: {
8
18
  id: string;
9
19
  defaultMessage: string;
@@ -0,0 +1,2 @@
1
+ import { IntlShape } from 'react-intl';
2
+ export declare function formatBytesProgress(intl: IntlShape, bytesUploaded: number | undefined, totalBytes: number | undefined): string | null;
@@ -0,0 +1,2 @@
1
+ import { IntlShape } from 'react-intl';
2
+ export declare function formatTimeRemaining(intl: IntlShape, remainingMs: number): string | null;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@box/uploads-manager",
3
- "version": "2.3.2",
3
+ "version": "2.4.0",
4
4
  "license": "SEE LICENSE IN LICENSE",
5
5
  "peerDependencies": {
6
6
  "@box/blueprint-web": "^16.14.2",