@aquera/nile-elements 0.1.67-beta-1.9 → 0.1.67-beta-2.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.
- package/README.md +1 -23
- package/demo/index.html +61 -1
- package/dist/index.cjs.js +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/index.js +5640 -7857
- package/dist/internal/form.cjs.js +1 -1
- package/dist/internal/form.cjs.js.map +1 -1
- package/dist/internal/form.esm.js +1 -1
- package/dist/internal/resizable-table-styles.cjs.js +1 -1
- package/dist/internal/resizable-table-styles.cjs.js.map +1 -1
- package/dist/internal/resizable-table-styles.esm.js +3 -15
- package/dist/nile-accordion/nile-accordian.test.cjs.js +1 -1
- package/dist/nile-accordion/nile-accordian.test.esm.js +1 -1
- package/dist/nile-auto-complete/index.cjs.js +1 -1
- package/dist/nile-auto-complete/index.esm.js +1 -1
- package/dist/nile-auto-complete/nile-auto-complete.cjs.js +17 -1
- package/dist/nile-auto-complete/nile-auto-complete.cjs.js.map +1 -1
- package/dist/nile-auto-complete/nile-auto-complete.esm.js +29 -8
- package/dist/nile-auto-complete/nile-auto-complete.test.cjs.js +1 -1
- package/dist/nile-auto-complete/nile-auto-complete.test.cjs.js.map +1 -1
- package/dist/nile-auto-complete/nile-auto-complete.test.esm.js +1 -1
- package/dist/nile-avatar/nile-avatar.test.cjs.js +1 -1
- package/dist/nile-avatar/nile-avatar.test.esm.js +1 -1
- package/dist/nile-badge/nile-badge.test.cjs.js +1 -1
- package/dist/nile-badge/nile-badge.test.esm.js +1 -1
- package/dist/nile-button/nile-button.test.cjs.js +1 -1
- package/dist/nile-button/nile-button.test.esm.js +1 -1
- package/dist/nile-button-toggle-group/nile-button-toggle-group.test.cjs.js +1 -1
- package/dist/nile-button-toggle-group/nile-button-toggle-group.test.esm.js +1 -1
- package/dist/nile-calendar/nile-calendar.test.cjs.js +1 -1
- package/dist/nile-calendar/nile-calendar.test.cjs.js.map +1 -1
- package/dist/nile-calendar/nile-calendar.test.esm.js +1 -1
- package/dist/nile-card/nile-card.test.cjs.js +1 -1
- package/dist/nile-card/nile-card.test.esm.js +1 -1
- package/dist/nile-checkbox/nile-checkbox.test.cjs.js +1 -1
- package/dist/nile-checkbox/nile-checkbox.test.esm.js +1 -1
- package/dist/nile-chip/nile-chip.cjs.js +1 -1
- package/dist/nile-chip/nile-chip.cjs.js.map +1 -1
- package/dist/nile-chip/nile-chip.esm.js +1 -1
- package/dist/nile-chip/nile-chip.test.cjs.js +1 -1
- package/dist/nile-chip/nile-chip.test.cjs.js.map +1 -1
- package/dist/nile-chip/nile-chip.test.esm.js +1 -1
- package/dist/nile-code-editor/extensionSetup.cjs.js +5 -5
- package/dist/nile-code-editor/extensionSetup.cjs.js.map +1 -1
- package/dist/nile-code-editor/extensionSetup.esm.js +1 -1
- package/dist/nile-code-editor/nile-code-editor.cjs.js +2 -2
- package/dist/nile-code-editor/nile-code-editor.cjs.js.map +1 -1
- package/dist/nile-code-editor/nile-code-editor.esm.js +3 -3
- package/dist/nile-code-editor/theme.cjs.js +1 -1
- package/dist/nile-code-editor/theme.cjs.js.map +1 -1
- package/dist/nile-code-editor/theme.esm.js +1 -1
- package/dist/nile-dialog/nile-dialog.test.cjs.js +1 -1
- package/dist/nile-dialog/nile-dialog.test.esm.js +1 -1
- package/dist/nile-drawer/nile-drawer.test.cjs.js +1 -1
- package/dist/nile-drawer/nile-drawer.test.esm.js +1 -1
- package/dist/nile-dropdown/nile-dropdown.test.cjs.js +1 -1
- package/dist/nile-dropdown/nile-dropdown.test.esm.js +1 -1
- package/dist/nile-empty-state/nile-empty-state.test.cjs.js +1 -1
- package/dist/nile-empty-state/nile-empty-state.test.esm.js +1 -1
- package/dist/nile-error-message/nile-error-message.test.cjs.js +1 -1
- package/dist/nile-error-message/nile-error-message.test.esm.js +1 -1
- package/dist/nile-filter-chip/nile-filter-chip.test.cjs.js +1 -1
- package/dist/nile-filter-chip/nile-filter-chip.test.esm.js +1 -1
- package/dist/nile-form-group/nile-form-group.test.cjs.js +1 -1
- package/dist/nile-form-group/nile-form-group.test.esm.js +1 -1
- package/dist/nile-form-help-text/nile-form-help-text.test.cjs.js +1 -1
- package/dist/nile-form-help-text/nile-form-help-text.test.esm.js +1 -1
- package/dist/nile-hero/nile-hero.test.cjs.js +1 -1
- package/dist/nile-hero/nile-hero.test.esm.js +1 -1
- package/dist/nile-icon/nile-icon.test.cjs.js +1 -1
- package/dist/nile-icon/nile-icon.test.esm.js +1 -1
- package/dist/nile-input/nile-input.test.cjs.js +1 -1
- package/dist/nile-input/nile-input.test.esm.js +1 -1
- package/dist/nile-link/nile-link.test.cjs.js +1 -1
- package/dist/nile-link/nile-link.test.esm.js +1 -1
- package/dist/nile-loader/nile-loader.test.cjs.js +1 -1
- package/dist/nile-loader/nile-loader.test.esm.js +1 -1
- package/dist/nile-option/nile-option.cjs.js +1 -1
- package/dist/nile-option/nile-option.cjs.js.map +1 -1
- package/dist/nile-option/nile-option.esm.js +3 -3
- package/dist/nile-popover/index.cjs.js +1 -1
- package/dist/nile-popover/index.esm.js +1 -1
- package/dist/nile-popover/nile-popover.cjs.js +11 -3
- package/dist/nile-popover/nile-popover.cjs.js.map +1 -1
- package/dist/nile-popover/nile-popover.esm.js +13 -7
- package/dist/nile-popover/nile-popover.test.cjs.js +1 -1
- package/dist/nile-popover/nile-popover.test.cjs.js.map +1 -1
- package/dist/nile-popover/nile-popover.test.esm.js +3 -3
- package/dist/nile-popup/nile-popup.test.cjs.js +1 -1
- package/dist/nile-popup/nile-popup.test.esm.js +1 -1
- package/dist/nile-progress-bar/nile-progress-bar.test.cjs.js +1 -1
- package/dist/nile-progress-bar/nile-progress-bar.test.esm.js +1 -1
- package/dist/nile-radio/nile-radio.test.cjs.js +1 -1
- package/dist/nile-radio/nile-radio.test.esm.js +1 -1
- package/dist/nile-radio-group/nile-radio-group.test.cjs.js +1 -1
- package/dist/nile-radio-group/nile-radio-group.test.esm.js +1 -1
- package/dist/nile-select/index.cjs.js +1 -1
- package/dist/nile-select/index.esm.js +1 -1
- package/dist/nile-select/nile-select.cjs.js +1 -1
- package/dist/nile-select/nile-select.cjs.js.map +1 -1
- package/dist/nile-select/nile-select.esm.js +9 -9
- package/dist/nile-select/nile-select.test.cjs.js +1 -1
- package/dist/nile-select/nile-select.test.cjs.js.map +1 -1
- package/dist/nile-select/nile-select.test.esm.js +2 -2
- package/dist/nile-slide-toggle/nile-slide-toggle.test.cjs.js +1 -1
- package/dist/nile-slide-toggle/nile-slide-toggle.test.esm.js +1 -1
- package/dist/nile-tab-group/nile-tab-group.test.cjs.js +1 -1
- package/dist/nile-tab-group/nile-tab-group.test.esm.js +1 -1
- package/dist/nile-table-cell-item/nile-table-cell-item.css.cjs.js +1 -1
- package/dist/nile-table-cell-item/nile-table-cell-item.css.cjs.js.map +1 -1
- package/dist/nile-table-cell-item/nile-table-cell-item.css.esm.js +6 -2
- package/dist/nile-table-header-item/nile-table-header-item.css.cjs.js +1 -1
- package/dist/nile-table-header-item/nile-table-header-item.css.cjs.js.map +1 -1
- package/dist/nile-table-header-item/nile-table-header-item.css.esm.js +4 -2
- package/dist/nile-table-row/nile-table-row.cjs.js +1 -1
- package/dist/nile-table-row/nile-table-row.cjs.js.map +1 -1
- package/dist/nile-table-row/nile-table-row.css.cjs.js +1 -1
- package/dist/nile-table-row/nile-table-row.css.cjs.js.map +1 -1
- package/dist/nile-table-row/nile-table-row.css.esm.js +51 -0
- package/dist/nile-table-row/nile-table-row.esm.js +26 -6
- package/dist/nile-textarea/nile-textarea.test.cjs.js +1 -1
- package/dist/nile-textarea/nile-textarea.test.esm.js +1 -1
- package/dist/src/index.d.ts +0 -4
- package/dist/src/index.js +0 -4
- package/dist/src/index.js.map +1 -1
- package/dist/src/internal/form.js +3 -3
- package/dist/src/internal/form.js.map +1 -1
- package/dist/src/internal/resizable-table-styles.js +0 -12
- package/dist/src/internal/resizable-table-styles.js.map +1 -1
- package/dist/src/nile-chip/nile-chip.js +1 -10
- package/dist/src/nile-chip/nile-chip.js.map +1 -1
- package/dist/src/nile-code-editor/nile-code-editor.d.ts +0 -3
- package/dist/src/nile-code-editor/nile-code-editor.js +3 -23
- package/dist/src/nile-code-editor/nile-code-editor.js.map +1 -1
- package/dist/src/nile-code-editor/theme.d.ts +0 -6
- package/dist/src/nile-code-editor/theme.js +2 -8
- package/dist/src/nile-code-editor/theme.js.map +1 -1
- package/dist/src/nile-option/nile-option.d.ts +1 -4
- package/dist/src/nile-option/nile-option.js +15 -27
- package/dist/src/nile-option/nile-option.js.map +1 -1
- package/dist/src/nile-select/nile-select.d.ts +3 -20
- package/dist/src/nile-select/nile-select.js +22 -123
- package/dist/src/nile-select/nile-select.js.map +1 -1
- package/dist/src/nile-table-cell-item/nile-table-cell-item.css.js +4 -0
- package/dist/src/nile-table-cell-item/nile-table-cell-item.css.js.map +1 -1
- package/dist/src/nile-table-header-item/nile-table-header-item.css.js +2 -0
- package/dist/src/nile-table-header-item/nile-table-header-item.css.js.map +1 -1
- package/dist/src/nile-table-row/nile-table-row-expandable.d.ts +37 -0
- package/dist/src/nile-table-row/nile-table-row-expandable.js +105 -0
- package/dist/src/nile-table-row/nile-table-row-expandable.js.map +1 -0
- package/dist/src/nile-table-row/nile-table-row.css.js +51 -0
- package/dist/src/nile-table-row/nile-table-row.css.js.map +1 -1
- package/dist/src/nile-table-row/nile-table-row.d.ts +4 -0
- package/dist/src/nile-table-row/nile-table-row.js +58 -11
- package/dist/src/nile-table-row/nile-table-row.js.map +1 -1
- package/dist/src/nile-table-row-expandable/index.d.ts +1 -0
- package/dist/src/nile-table-row-expandable/index.js +2 -0
- package/dist/src/nile-table-row-expandable/index.js.map +1 -0
- package/dist/src/nile-table-row-expandable/nile-table-row-expandable.css.d.ts +12 -0
- package/dist/src/nile-table-row-expandable/nile-table-row-expandable.css.js +17 -0
- package/dist/src/nile-table-row-expandable/nile-table-row-expandable.css.js.map +1 -0
- package/dist/src/nile-table-row-expandable/nile-table-row-expandable.d.ts +37 -0
- package/dist/src/nile-table-row-expandable/nile-table-row-expandable.js +103 -0
- package/dist/src/nile-table-row-expandable/nile-table-row-expandable.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -4
- package/src/index.ts +1 -5
- package/src/internal/form.ts +3 -3
- package/src/internal/resizable-table-styles.ts +0 -12
- package/src/nile-chip/nile-chip.ts +1 -9
- package/src/nile-code-editor/nile-code-editor.ts +4 -25
- package/src/nile-code-editor/theme.ts +2 -8
- package/src/nile-option/nile-option.ts +12 -22
- package/src/nile-select/nile-select.ts +15 -139
- package/src/nile-table-cell-item/nile-table-cell-item.css.ts +4 -0
- package/src/nile-table-header-item/nile-table-header-item.css.ts +2 -0
- package/src/nile-table-row/nile-table-row.css.ts +51 -0
- package/src/nile-table-row/nile-table-row.ts +50 -7
- package/vscode-html-custom-data.json +23 -400
- package/src/nile-file-preview/index.ts +0 -1
- package/src/nile-file-preview/nile-file-preview.css.ts +0 -589
- package/src/nile-file-preview/nile-file-preview.template.ts +0 -259
- package/src/nile-file-preview/nile-file-preview.test.ts +0 -38
- package/src/nile-file-preview/nile-file-preview.ts +0 -205
- package/src/nile-file-preview/types/index.ts +0 -2
- package/src/nile-file-preview/types/nile-file-preview.enums.ts +0 -32
- package/src/nile-file-preview/types/nile-file-preview.interface.ts +0 -4
- package/src/nile-file-preview/utils/index.ts +0 -1
- package/src/nile-file-preview/utils/nile-file-preview.util.ts +0 -72
- package/src/nile-file-upload/index.ts +0 -1
- package/src/nile-file-upload/nile-file-upload.css.ts +0 -624
- package/src/nile-file-upload/nile-file-upload.template.ts +0 -217
- package/src/nile-file-upload/nile-file-upload.test.ts +0 -38
- package/src/nile-file-upload/nile-file-upload.ts +0 -161
- package/src/nile-file-upload/types/file-upload.enums.ts +0 -46
- package/src/nile-file-upload/types/file-upload.type.ts +0 -5
- package/src/nile-file-upload/types/index.ts +0 -2
- package/src/nile-file-upload/utils/drag-drop.util.ts +0 -106
- package/src/nile-file-upload/utils/file-validation.util.ts +0 -216
- package/src/nile-option-group/index.ts +0 -1
- package/src/nile-option-group/nile-option-group.css.ts +0 -60
- package/src/nile-option-group/nile-option-group.interface.ts +0 -24
- package/src/nile-option-group/nile-option-group.ts +0 -84
- package/src/nile-select/nile-select.interface.ts +0 -5
- package/src/nile-select/virtual-scroll-helper.ts +0 -56
- package/src/nile-virtual-select/index.ts +0 -1
- package/src/nile-virtual-select/nile-virtual-select.css.ts +0 -491
- package/src/nile-virtual-select/nile-virtual-select.test.ts +0 -774
- package/src/nile-virtual-select/nile-virtual-select.ts +0 -1314
- package/src/nile-virtual-select/renderer.ts +0 -102
- package/src/nile-virtual-select/search-manager.ts +0 -50
- package/src/nile-virtual-select/selection-manager.ts +0 -75
- package/src/nile-virtual-select/types.ts +0 -54
@@ -1,259 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* Template File for nile-preview component
|
3
|
-
*/
|
4
|
-
|
5
|
-
import './nile-file-preview.css';
|
6
|
-
import { html, TemplateResult } from 'lit';
|
7
|
-
import { FilePreviewErrorMessages, RemoveFileDetail } from './types';
|
8
|
-
import { removeFile, cancelFileUpload } from './utils';
|
9
|
-
import { formatFileSize, truncateString, getFileType } from './utils/nile-file-preview.util';
|
10
|
-
import { NileFilePreview } from './nile-file-preview';
|
11
|
-
|
12
|
-
export function getHorizontalUploadingState(
|
13
|
-
file: File,
|
14
|
-
uploadStatus: number
|
15
|
-
): TemplateResult {
|
16
|
-
return html`
|
17
|
-
<div class="uploading" part="horizontal-uploading-state">
|
18
|
-
<nile-loader width="24" height="24"></nile-loader>
|
19
|
-
<div class="progress-bar-container">
|
20
|
-
<div class="progress-bar-percent">
|
21
|
-
<p>Uploading File...</p>
|
22
|
-
<p>${uploadStatus}%</p>
|
23
|
-
</div>
|
24
|
-
<nile-progress-bar
|
25
|
-
part="horizontal-progress-bar"
|
26
|
-
value="${uploadStatus}"
|
27
|
-
></nile-progress-bar>
|
28
|
-
<p class="horizontal-file-name">${file.name}</p>
|
29
|
-
</div>
|
30
|
-
<slot @click=${(e: CustomEvent<RemoveFileDetail>) => cancelFileUpload(file, e)} name="cancelIcon">
|
31
|
-
<nile-icon
|
32
|
-
name="close"
|
33
|
-
size="14"
|
34
|
-
class="icon"
|
35
|
-
></nile-icon>
|
36
|
-
</slot>
|
37
|
-
</div>
|
38
|
-
`;
|
39
|
-
}
|
40
|
-
|
41
|
-
export function getHorizontalPreviewState(
|
42
|
-
url: string,
|
43
|
-
file: File,
|
44
|
-
originalUrl: string
|
45
|
-
): TemplateResult {
|
46
|
-
return html`
|
47
|
-
<div class="preview horizontal-div" part="horizontal-preview-state">
|
48
|
-
<div class="preview-inner">
|
49
|
-
<div class="preview-image-container">
|
50
|
-
<img
|
51
|
-
class="image-preview"
|
52
|
-
src=${url}
|
53
|
-
alt=${file.name}
|
54
|
-
/>
|
55
|
-
</div>
|
56
|
-
<div class="preview-file-info">
|
57
|
-
<p>${file.name}</p>
|
58
|
-
<p>${getFileType(file.type)} • ${formatFileSize(Number(file.size))}</p>
|
59
|
-
</div>
|
60
|
-
</div>
|
61
|
-
<div class="preview-actions">
|
62
|
-
<slot @click=${(e: CustomEvent<RemoveFileDetail>) => removeFile(file, e, originalUrl)} name="cancel-icon">
|
63
|
-
<nile-icon
|
64
|
-
name="trash"
|
65
|
-
size="14"
|
66
|
-
class="icon"
|
67
|
-
></nile-icon>
|
68
|
-
</slot>
|
69
|
-
</div>
|
70
|
-
</div>
|
71
|
-
`;
|
72
|
-
}
|
73
|
-
|
74
|
-
export function getHorizontalNoPreviewState(
|
75
|
-
file: File,
|
76
|
-
originalUrl: string
|
77
|
-
): TemplateResult {
|
78
|
-
return html`
|
79
|
-
<div class="no-preview horizontal-div" part="horizontal-no-preview-state">
|
80
|
-
<div class="no-preview-container">
|
81
|
-
<div class="document-icon">
|
82
|
-
<nile-icon name="general" size="20" color="var(--nile-colors-blue-500)"></nile-icon>
|
83
|
-
</div>
|
84
|
-
<div class="preview-file-info">
|
85
|
-
<p>${file.name}</p>
|
86
|
-
<p>${getFileType(file.type)} • ${formatFileSize(Number(file.size))}</p>
|
87
|
-
</div>
|
88
|
-
</div>
|
89
|
-
<div>
|
90
|
-
<slot @click=${(e: CustomEvent<RemoveFileDetail>) => removeFile(file, e, originalUrl)} name="cancelIcon">
|
91
|
-
<nile-icon
|
92
|
-
name="trash"
|
93
|
-
size="14"
|
94
|
-
class="icon"
|
95
|
-
></nile-icon>
|
96
|
-
</slot>
|
97
|
-
</div>
|
98
|
-
</div>
|
99
|
-
`;
|
100
|
-
}
|
101
|
-
|
102
|
-
export function getHorizontalErrorState(
|
103
|
-
file: File,
|
104
|
-
errorMessage: string,
|
105
|
-
originalUrl: string,
|
106
|
-
nileFilePreview: NileFilePreview
|
107
|
-
): TemplateResult {
|
108
|
-
truncateString(nileFilePreview);
|
109
|
-
return html`
|
110
|
-
<div class="error horizontal-div" part="horizontal-error-state">
|
111
|
-
<div class="error-container">
|
112
|
-
<div class="error-icon">
|
113
|
-
<nile-icon name="info-icon" size="20" color="var(--nile-colors-red-700)"></nile-icon>
|
114
|
-
</div>
|
115
|
-
<div class="file-info">
|
116
|
-
<p class="horizontal-file-name">${file.name}</p>
|
117
|
-
${
|
118
|
-
nileFilePreview.isStringTruncated
|
119
|
-
? html`<nile-tooltip content=${errorMessage}>
|
120
|
-
<span>${errorMessage}</span>
|
121
|
-
</nile-tooltip>`
|
122
|
-
: html`<span>${errorMessage}</span>`
|
123
|
-
}
|
124
|
-
</div>
|
125
|
-
</div>
|
126
|
-
<slot @click=${(e: CustomEvent<RemoveFileDetail>) => removeFile(file, e, originalUrl)} name="cancelIcon">
|
127
|
-
<nile-icon
|
128
|
-
name="close"
|
129
|
-
size="14"
|
130
|
-
class="icon"
|
131
|
-
></nile-icon>
|
132
|
-
</slot>
|
133
|
-
</div>
|
134
|
-
`;
|
135
|
-
}
|
136
|
-
|
137
|
-
// vertical states
|
138
|
-
export function getVerticalUploadingState(
|
139
|
-
file: File,
|
140
|
-
uploadStatus: number
|
141
|
-
): TemplateResult {
|
142
|
-
return html`
|
143
|
-
<div class="vertical-div vertical-uploading" part="vertical-uploading-state">
|
144
|
-
<div class="loading">
|
145
|
-
<nile-loader width="24" height="24"></nile-loader>
|
146
|
-
</div>
|
147
|
-
|
148
|
-
<div class="progress-bar-container">
|
149
|
-
<div class="progress-bar-percent">
|
150
|
-
<p>Uploading...</p>
|
151
|
-
<p>${uploadStatus}%</p>
|
152
|
-
</div>
|
153
|
-
<nile-progress-bar value=${uploadStatus}></nile-progress-bar>
|
154
|
-
<p class="vertical-file-name">${file.name}</p>
|
155
|
-
</div>
|
156
|
-
|
157
|
-
<slot @click=${(e: CustomEvent<RemoveFileDetail>) => cancelFileUpload(file, e)} name="cancelIcon">
|
158
|
-
<nile-icon
|
159
|
-
name="close"
|
160
|
-
size="14"
|
161
|
-
class="icon corner-icon"
|
162
|
-
></nile-icon>
|
163
|
-
</slot>
|
164
|
-
</div>
|
165
|
-
`;
|
166
|
-
}
|
167
|
-
|
168
|
-
|
169
|
-
export function getVerticalPreviewState(
|
170
|
-
url: string,
|
171
|
-
file: File,
|
172
|
-
originalUrl: string
|
173
|
-
): TemplateResult {
|
174
|
-
return html`
|
175
|
-
<div class="vertical-div vertical-preview" part="vertical-preview-state">
|
176
|
-
<div>
|
177
|
-
<img
|
178
|
-
class="image-preview"
|
179
|
-
src=${url}
|
180
|
-
alt=${file.name}
|
181
|
-
/>
|
182
|
-
</div>
|
183
|
-
|
184
|
-
<div class="content-container">
|
185
|
-
<p>${file.name}</p>
|
186
|
-
<p>${getFileType(file.type)} • ${formatFileSize(Number(file.size))}</p>
|
187
|
-
</div>
|
188
|
-
|
189
|
-
<slot @click=${(e: CustomEvent<RemoveFileDetail>) => removeFile(file, e, originalUrl)} name="cancelIcon">
|
190
|
-
<nile-icon
|
191
|
-
name="trash"
|
192
|
-
size="14"
|
193
|
-
class="icon corner-icon"
|
194
|
-
></nile-icon>
|
195
|
-
</slot>
|
196
|
-
</div>
|
197
|
-
`;
|
198
|
-
}
|
199
|
-
|
200
|
-
export function getVerticalNoPreviewState(
|
201
|
-
file: File,
|
202
|
-
originalUrl: string
|
203
|
-
): TemplateResult {
|
204
|
-
return html`
|
205
|
-
<div class="vertical-div vertical-no-preview" part="vertical-no-preview-state">
|
206
|
-
<div class="vertical-document-icon">
|
207
|
-
<nile-icon name="general" size="20" color="var(--nile-colors-blue-500)"></nile-icon>
|
208
|
-
</div>
|
209
|
-
|
210
|
-
<div class="content-container">
|
211
|
-
<p>${file.name}</p>
|
212
|
-
<p>${getFileType(file.type)} • ${formatFileSize(Number(file.size))}</p>
|
213
|
-
</div>
|
214
|
-
|
215
|
-
<slot @click=${(e: CustomEvent<RemoveFileDetail>) => removeFile(file, e, originalUrl)} name="cancelIcon">
|
216
|
-
<nile-icon
|
217
|
-
name="trash"
|
218
|
-
size="14"
|
219
|
-
class="icon corner-icon"
|
220
|
-
></nile-icon>
|
221
|
-
</slot>
|
222
|
-
</div>
|
223
|
-
`;
|
224
|
-
}
|
225
|
-
|
226
|
-
export function getVerticalErrorState(
|
227
|
-
file: File,
|
228
|
-
errorMessage: string,
|
229
|
-
originalUrl: string,
|
230
|
-
nileFilePreview: NileFilePreview
|
231
|
-
): TemplateResult {
|
232
|
-
truncateString(nileFilePreview);
|
233
|
-
return html`
|
234
|
-
<div class="vertical-div vertical-error" part="vertical-error-state">
|
235
|
-
<div class="vertical-document-icon error-bg">
|
236
|
-
<nile-icon name="info-icon" size="20" color="var(--nile-colors-red-700)"></nile-icon>
|
237
|
-
</div>
|
238
|
-
|
239
|
-
<div class="file-info-vertical-state">
|
240
|
-
<p class="vertical-file-name">${file.name}</p>
|
241
|
-
${
|
242
|
-
nileFilePreview.isStringTruncated
|
243
|
-
? html`<nile-tooltip content=${errorMessage}>
|
244
|
-
<span>${errorMessage}</span>
|
245
|
-
</nile-tooltip>`
|
246
|
-
: html`<span>${errorMessage}</span>`
|
247
|
-
}
|
248
|
-
</div>
|
249
|
-
|
250
|
-
<slot @click=${(e: CustomEvent<RemoveFileDetail>) => removeFile(file, e, originalUrl)} name="cancelIcon">
|
251
|
-
<nile-icon
|
252
|
-
name="close"
|
253
|
-
size="14"
|
254
|
-
class="icon corner-icon"
|
255
|
-
></nile-icon>
|
256
|
-
</slot>
|
257
|
-
</div>
|
258
|
-
`;
|
259
|
-
}
|
@@ -1,38 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* Copyright Aquera Inc 2025
|
3
|
-
*
|
4
|
-
* This source code is licensed under the BSD-3-Clause license found in the
|
5
|
-
* LICENSE file in the root directory of this source tree.
|
6
|
-
*/
|
7
|
-
|
8
|
-
|
9
|
-
import { fixture, assert, expect, html } from '@open-wc/testing';
|
10
|
-
import './nile-file-preview'; // Just import to register the element
|
11
|
-
|
12
|
-
describe('<nile-preview>', () => {
|
13
|
-
let element: HTMLElement;
|
14
|
-
|
15
|
-
beforeEach(async () => {
|
16
|
-
element = await fixture(html`<nile-file-preview></nile-file-preview>`);
|
17
|
-
});
|
18
|
-
|
19
|
-
it('passes accessibility test', async () => {
|
20
|
-
await expect(element).to.be.accessible();
|
21
|
-
});
|
22
|
-
|
23
|
-
it('renders with the correct tag name', () => {
|
24
|
-
expect(element.tagName.toLowerCase()).to.equal('nile-preview');
|
25
|
-
});
|
26
|
-
|
27
|
-
it('renders with slot content when provided', async () => {
|
28
|
-
const testContent = 'Test Content';
|
29
|
-
element = await fixture(html`<nile-file-preview>${testContent}</nile-file-preview>`);
|
30
|
-
|
31
|
-
const slot = (element.shadowRoot!.querySelector('slot') as HTMLSlotElement);
|
32
|
-
assert.exists(slot, 'Slot should exist');
|
33
|
-
|
34
|
-
const assignedNodes = slot.assignedNodes({ flatten: true });
|
35
|
-
expect(assignedNodes.length).to.be.greaterThan(0);
|
36
|
-
expect(assignedNodes[0].textContent?.trim()).to.equal(testContent);
|
37
|
-
});
|
38
|
-
});
|
@@ -1,205 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* Copyright Aquera Inc 2025
|
3
|
-
*
|
4
|
-
* This source code is licensed under the BSD-3-Clause license found in the
|
5
|
-
* LICENSE file in the root directory of this source tree.
|
6
|
-
*/
|
7
|
-
|
8
|
-
import {styles} from './nile-file-preview.css';
|
9
|
-
import NileElement from '../internal/nile-element';
|
10
|
-
import { customElement, property } from 'lit/decorators.js';
|
11
|
-
import { generatePreviewUrl } from './utils';
|
12
|
-
import { FilePreviewState, FilePreviewVariant, FilePreviewErrorMessages, FilePreviewEvent } from './types';
|
13
|
-
import { LitElement, html, CSSResultArray, TemplateResult, PropertyValues } from 'lit';
|
14
|
-
import {
|
15
|
-
getHorizontalErrorState,
|
16
|
-
getHorizontalNoPreviewState,
|
17
|
-
getHorizontalPreviewState,
|
18
|
-
getHorizontalUploadingState,
|
19
|
-
getVerticalErrorState,
|
20
|
-
getVerticalNoPreviewState,
|
21
|
-
getVerticalPreviewState,
|
22
|
-
getVerticalUploadingState
|
23
|
-
} from './nile-file-preview.template';
|
24
|
-
|
25
|
-
|
26
|
-
/**
|
27
|
-
* Nile preview component.
|
28
|
-
*
|
29
|
-
* @tag nile-preview
|
30
|
-
*
|
31
|
-
*/
|
32
|
-
@customElement('nile-file-preview')
|
33
|
-
export class NileFilePreview extends NileElement {
|
34
|
-
/**
|
35
|
-
* The styles for nile-preview
|
36
|
-
* @remarks If you are extending this class you can extend the base styles with super. Eg `return [super(), myCustomStyles]`
|
37
|
-
*/
|
38
|
-
public static get styles(): CSSResultArray {
|
39
|
-
return [styles];
|
40
|
-
}
|
41
|
-
|
42
|
-
@property({ type: String }) errorMessage: string = "";
|
43
|
-
@property({ type: Object }) inputFile: File;
|
44
|
-
@property({ type: String }) fileUrl: string = "";
|
45
|
-
@property({ type: Number }) uploadStatus: number = 0;
|
46
|
-
@property({ type: String }) state: FilePreviewState = FilePreviewState.DEFAULT;
|
47
|
-
@property({ type: String }) variant: FilePreviewVariant = FilePreviewVariant.HORIZONTAL;
|
48
|
-
@property({ type: String }) inputFileName: string = "";
|
49
|
-
private inputFileHtml: TemplateResult | null = null;
|
50
|
-
private originalUrl: string = "";
|
51
|
-
public isStringTruncated: boolean = false;
|
52
|
-
|
53
|
-
/**
|
54
|
-
* Render method
|
55
|
-
* @slot This is a slot test
|
56
|
-
*/
|
57
|
-
|
58
|
-
connectedCallback(): void {
|
59
|
-
super.connectedCallback();
|
60
|
-
this.emit(FilePreviewEvent.NILE_INIT);
|
61
|
-
}
|
62
|
-
|
63
|
-
protected firstUpdated(_changedProperties: PropertyValues): void {
|
64
|
-
super.firstUpdated(_changedProperties);
|
65
|
-
}
|
66
|
-
|
67
|
-
protected updated(changedProperties: PropertyValues): void {
|
68
|
-
if(changedProperties.has('uploadStatus') && this.uploadStatus) {
|
69
|
-
if(this.uploadStatus < 100) {
|
70
|
-
this.createUploadState(this.inputFile, this.uploadStatus);
|
71
|
-
} else {
|
72
|
-
this.createState(this.inputFile);
|
73
|
-
}
|
74
|
-
} else if (changedProperties.has('inputFile') && this.inputFile) {
|
75
|
-
this.createState(this.inputFile);
|
76
|
-
this.emit(FilePreviewEvent.NILE_RECEIVE);
|
77
|
-
|
78
|
-
} else if (changedProperties.has('fileUrl') && this.fileUrl) {
|
79
|
-
this.handleFileUrl(this.fileUrl);
|
80
|
-
this.emit(FilePreviewEvent.NILE_RECEIVE);
|
81
|
-
|
82
|
-
} else if (changedProperties.has('errorMessage')) {
|
83
|
-
this.createState(this.inputFile);
|
84
|
-
}
|
85
|
-
}
|
86
|
-
|
87
|
-
private createUploadState( file: File, uploadStatus: number): void {
|
88
|
-
const isHorizontal = this.variant === FilePreviewVariant.HORIZONTAL;
|
89
|
-
|
90
|
-
this.inputFileHtml = isHorizontal
|
91
|
-
? getHorizontalUploadingState(file, uploadStatus)
|
92
|
-
: getVerticalUploadingState(file, uploadStatus);
|
93
|
-
|
94
|
-
this.requestUpdate();
|
95
|
-
}
|
96
|
-
|
97
|
-
private async handleFileUrl(url: string): Promise<void> {
|
98
|
-
this.originalUrl = url;
|
99
|
-
try {
|
100
|
-
const response = await fetch(url);
|
101
|
-
const blob = await response.blob();
|
102
|
-
const fileName = this.inputFileName || url.split('/').pop() || FilePreviewErrorMessages.UNKNOWN_FILE_NAME;
|
103
|
-
const file = new File([blob], fileName, { type: blob.type });
|
104
|
-
|
105
|
-
this.createState(file);
|
106
|
-
} catch (error) {
|
107
|
-
const dummyFile = new File([], this.inputFileName || FilePreviewErrorMessages.UNKNOWN_FILE_NAME, { type: 'application/octet-stream' });
|
108
|
-
this.errorMessage = FilePreviewErrorMessages.FAILED_TO_LOAD;
|
109
|
-
console.error(this.errorMessage);
|
110
|
-
|
111
|
-
this.inputFileHtml = this.variant === FilePreviewVariant.HORIZONTAL
|
112
|
-
? getHorizontalErrorState(dummyFile, this.errorMessage, this.originalUrl, this)
|
113
|
-
: getVerticalErrorState(dummyFile, this.errorMessage, this.originalUrl, this);
|
114
|
-
this.requestUpdate();
|
115
|
-
}
|
116
|
-
}
|
117
|
-
|
118
|
-
public async createState(file: File): Promise<void> {
|
119
|
-
const isHorizontal = this.variant === FilePreviewVariant.HORIZONTAL;
|
120
|
-
|
121
|
-
if (!this.errorMessage) {
|
122
|
-
if (file && file.type.startsWith('image/')) {
|
123
|
-
try {
|
124
|
-
const url = await generatePreviewUrl(file);
|
125
|
-
this.inputFileHtml = isHorizontal
|
126
|
-
? getHorizontalPreviewState(url, file, this.originalUrl)
|
127
|
-
: getVerticalPreviewState(url, file, this.originalUrl);
|
128
|
-
} catch (error) {
|
129
|
-
this.inputFileHtml = isHorizontal
|
130
|
-
? getHorizontalNoPreviewState(file, this.originalUrl)
|
131
|
-
: getVerticalNoPreviewState(file, this.originalUrl);
|
132
|
-
}
|
133
|
-
} else {
|
134
|
-
this.inputFileHtml = isHorizontal
|
135
|
-
? getHorizontalNoPreviewState(file, this.originalUrl)
|
136
|
-
: getVerticalNoPreviewState(file, this.originalUrl);
|
137
|
-
}
|
138
|
-
} else {
|
139
|
-
this.inputFileHtml = isHorizontal
|
140
|
-
? getHorizontalErrorState(file, this.errorMessage, this.originalUrl, this)
|
141
|
-
: getVerticalErrorState(file, this.errorMessage, this.originalUrl, this);
|
142
|
-
}
|
143
|
-
this.requestUpdate();
|
144
|
-
}
|
145
|
-
|
146
|
-
private customFile = new File([], "Harsh", { type: "image/png" })
|
147
|
-
|
148
|
-
getState(): TemplateResult {
|
149
|
-
if(this.variant === "horizontal") return this.getHorizontalStates();
|
150
|
-
return this.getVerticalStates();
|
151
|
-
}
|
152
|
-
|
153
|
-
getHorizontalStates(): TemplateResult {
|
154
|
-
switch(this.state) {
|
155
|
-
case FilePreviewState.UPLOADING:
|
156
|
-
return getHorizontalUploadingState(this.customFile, 2);
|
157
|
-
case FilePreviewState.PREVIEW:
|
158
|
-
return getHorizontalPreviewState("https://s6.imgcdn.dev/YINe6a.jpg", this.customFile, this.originalUrl);
|
159
|
-
case FilePreviewState.NO_PREVIEW:
|
160
|
-
return getHorizontalNoPreviewState(this.customFile, this.originalUrl);
|
161
|
-
case FilePreviewState.ERROR:
|
162
|
-
return getHorizontalErrorState(this.customFile, FilePreviewErrorMessages.CUSTOM_ERROR, this.originalUrl, this);
|
163
|
-
default:
|
164
|
-
return this.inputFileHtml || html``;
|
165
|
-
}
|
166
|
-
}
|
167
|
-
|
168
|
-
getVerticalStates(): TemplateResult {
|
169
|
-
switch(this.state) {
|
170
|
-
case FilePreviewState.UPLOADING:
|
171
|
-
return getVerticalUploadingState(this.customFile, 2);
|
172
|
-
case FilePreviewState.PREVIEW:
|
173
|
-
return getVerticalPreviewState("https://s6.imgcdn.dev/YINe6a.jpg", this.customFile, this.originalUrl);
|
174
|
-
case FilePreviewState.NO_PREVIEW:
|
175
|
-
return getVerticalNoPreviewState(this.customFile, this.originalUrl);
|
176
|
-
case FilePreviewState.ERROR:
|
177
|
-
return getVerticalErrorState(this.customFile, FilePreviewErrorMessages.CUSTOM_ERROR, this.originalUrl, this);
|
178
|
-
default:
|
179
|
-
return this.inputFileHtml || html``;
|
180
|
-
}
|
181
|
-
}
|
182
|
-
|
183
|
-
public render(): TemplateResult {
|
184
|
-
if (this.state) {
|
185
|
-
return this.getState();
|
186
|
-
}
|
187
|
-
return html`${this.inputFileHtml ?? html``}`;
|
188
|
-
}
|
189
|
-
|
190
|
-
|
191
|
-
disconnectedCallback(): void {
|
192
|
-
super.disconnectedCallback();
|
193
|
-
this.emit(FilePreviewEvent.NILE_DESTROY);
|
194
|
-
}
|
195
|
-
|
196
|
-
/* #endregion */
|
197
|
-
}
|
198
|
-
|
199
|
-
export default NileFilePreview;
|
200
|
-
|
201
|
-
declare global {
|
202
|
-
interface HTMLElementTagNameMap {
|
203
|
-
'nile-file-preview': NileFilePreview;
|
204
|
-
}
|
205
|
-
}
|
@@ -1,32 +0,0 @@
|
|
1
|
-
export enum FilePreviewState {
|
2
|
-
DEFAULT = 'default',
|
3
|
-
UPLOADING = 'uploading',
|
4
|
-
PREVIEW = 'preview',
|
5
|
-
NO_PREVIEW = 'no-preview',
|
6
|
-
ERROR = 'error'
|
7
|
-
}
|
8
|
-
|
9
|
-
export enum FilePreviewVariant {
|
10
|
-
HORIZONTAL = 'horizontal',
|
11
|
-
VERTICAL = 'vertical'
|
12
|
-
}
|
13
|
-
|
14
|
-
export enum FilePreviewErrorMessages {
|
15
|
-
INVALID_FORMAT = "Invalid File Format. Please try again.",
|
16
|
-
SIZE_LIMIT = "File exceeds size limit.",
|
17
|
-
FAILED_TO_LOAD = "Failed to load file from URL",
|
18
|
-
UNKNOWN_FILE_NAME = 'unknown-file',
|
19
|
-
UPLOAD_CANCEL = "File upload cancelled.",
|
20
|
-
NO_FILE_SELECTED = "No file selected.",
|
21
|
-
UNABLE_TO_GENEARTE_URL = "Unable to generate the url.",
|
22
|
-
NETWORK_ERROR = "Network error! Please try again later.",
|
23
|
-
CUSTOM_ERROR = "Error Occured!"
|
24
|
-
}
|
25
|
-
|
26
|
-
export enum FilePreviewEvent {
|
27
|
-
NILE_INIT = "nile-init",
|
28
|
-
NILE_RECEIVE = "nile-receive",
|
29
|
-
NILE_REMOVE = "nile-remove",
|
30
|
-
NILE_CANCEL_UPLOAD = "nile-cancel-upload",
|
31
|
-
NILE_DESTROY = "nile-destroy"
|
32
|
-
}
|
@@ -1 +0,0 @@
|
|
1
|
-
export * from './nile-file-preview.util'
|
@@ -1,72 +0,0 @@
|
|
1
|
-
import NileFilePreview from "../nile-file-preview";
|
2
|
-
import { RemoveFileDetail, FilePreviewEvent, FilePreviewErrorMessages } from "../types";
|
3
|
-
|
4
|
-
export const generatePreviewUrl = (file: File): Promise<string> => {
|
5
|
-
return new Promise((resolve, reject) => {
|
6
|
-
const reader = new FileReader();
|
7
|
-
|
8
|
-
if (file) {
|
9
|
-
reader.readAsDataURL(file);
|
10
|
-
} else {
|
11
|
-
reject(FilePreviewErrorMessages.NO_FILE_SELECTED);
|
12
|
-
}
|
13
|
-
|
14
|
-
reader.onload = () => {
|
15
|
-
const previewUrl = reader.result as string;
|
16
|
-
resolve(previewUrl);
|
17
|
-
};
|
18
|
-
|
19
|
-
reader.onerror = (error) => {
|
20
|
-
reject(FilePreviewErrorMessages.UNABLE_TO_GENEARTE_URL);
|
21
|
-
}
|
22
|
-
});
|
23
|
-
}
|
24
|
-
|
25
|
-
export const removeFile = (removeFile: File, e: CustomEvent<RemoveFileDetail>, originalUrl: string): void => {
|
26
|
-
if (e.target) {
|
27
|
-
e.target.dispatchEvent(
|
28
|
-
new CustomEvent(FilePreviewEvent.NILE_REMOVE, {
|
29
|
-
detail: { value: removeFile, url: originalUrl },
|
30
|
-
bubbles: true,
|
31
|
-
composed: true,
|
32
|
-
})
|
33
|
-
);
|
34
|
-
}
|
35
|
-
};
|
36
|
-
|
37
|
-
export const cancelFileUpload = (file: File, e: CustomEvent<RemoveFileDetail>) => {
|
38
|
-
if(e.target) {
|
39
|
-
e.target.dispatchEvent(
|
40
|
-
new CustomEvent(FilePreviewEvent.NILE_CANCEL_UPLOAD, {
|
41
|
-
detail: { file: file },
|
42
|
-
bubbles: true,
|
43
|
-
composed: true,
|
44
|
-
})
|
45
|
-
);
|
46
|
-
}
|
47
|
-
}
|
48
|
-
|
49
|
-
export const formatFileSize = (bytes: number): string => {
|
50
|
-
const kb = bytes / 1024;
|
51
|
-
const mb = kb / 1024;
|
52
|
-
const gb = mb / 1024;
|
53
|
-
|
54
|
-
if (gb >= 1) return gb.toFixed(2) + ' GB';
|
55
|
-
if (mb >= 1) return mb.toFixed(2) + ' MB';
|
56
|
-
if (kb >= 1) return kb.toFixed(2) + ' KB';
|
57
|
-
return bytes + ' B';
|
58
|
-
}
|
59
|
-
|
60
|
-
export const getFileType = (type: string): string => {
|
61
|
-
return type.split('/')[1].toUpperCase();
|
62
|
-
}
|
63
|
-
|
64
|
-
export const truncateString = (nileFilePreview: NileFilePreview): void => {
|
65
|
-
if(nileFilePreview.variant === 'vertical' && nileFilePreview.errorMessage.length > 34) {
|
66
|
-
nileFilePreview.isStringTruncated = true;
|
67
|
-
nileFilePreview.requestUpdate();
|
68
|
-
} else if(nileFilePreview.variant === 'horizontal' && nileFilePreview.errorMessage.length > 96) {
|
69
|
-
nileFilePreview.isStringTruncated = true;
|
70
|
-
nileFilePreview.requestUpdate();
|
71
|
-
}
|
72
|
-
}
|
@@ -1 +0,0 @@
|
|
1
|
-
export { NileFileUpload } from './nile-file-upload';
|