@aquera/nile-elements 0.1.36 → 0.1.38-beta-1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (241) hide show
  1. package/README.md +13 -0
  2. package/demo/index.html +9 -9
  3. package/demo/variables.css +13 -0
  4. package/dist/{fixture-2b5b3aba.esm.js → fixture-add72f26.esm.js} +1 -1
  5. package/dist/{fixture-7bfb866e.cjs.js → fixture-cb376a7f.cjs.js} +3 -3
  6. package/dist/fixture-cb376a7f.cjs.js.map +1 -0
  7. package/dist/index.cjs.js +1 -1
  8. package/dist/index.esm.js +1 -1
  9. package/dist/lit-html-39a6718c.esm.js +6 -0
  10. package/dist/lit-html-9b3af046.cjs.js +6 -0
  11. package/dist/lit-html-9b3af046.cjs.js.map +1 -0
  12. package/dist/nile-accordion/nile-accordian.test.cjs.js +1 -1
  13. package/dist/nile-accordion/nile-accordian.test.esm.js +1 -1
  14. package/dist/nile-auto-complete/nile-auto-complete.test.cjs.js +1 -1
  15. package/dist/nile-auto-complete/nile-auto-complete.test.cjs.js.map +1 -1
  16. package/dist/nile-auto-complete/nile-auto-complete.test.esm.js +1 -1
  17. package/dist/nile-avatar/nile-avatar.test.cjs.js +1 -1
  18. package/dist/nile-avatar/nile-avatar.test.esm.js +1 -1
  19. package/dist/nile-badge/nile-badge.test.cjs.js +1 -1
  20. package/dist/nile-badge/nile-badge.test.esm.js +1 -1
  21. package/dist/nile-button/nile-button.test.cjs.js +1 -1
  22. package/dist/nile-button/nile-button.test.esm.js +1 -1
  23. package/dist/nile-button-toggle-group/nile-button-toggle-group.test.cjs.js +1 -1
  24. package/dist/nile-button-toggle-group/nile-button-toggle-group.test.esm.js +1 -1
  25. package/dist/nile-calendar/nile-calendar.test.cjs.js +1 -1
  26. package/dist/nile-calendar/nile-calendar.test.esm.js +1 -1
  27. package/dist/nile-card/nile-card.test.cjs.js +1 -1
  28. package/dist/nile-card/nile-card.test.esm.js +1 -1
  29. package/dist/nile-checkbox/nile-checkbox.test.cjs.js +1 -1
  30. package/dist/nile-checkbox/nile-checkbox.test.esm.js +1 -1
  31. package/dist/nile-chip/nile-chip.test.cjs.js +1 -1
  32. package/dist/nile-chip/nile-chip.test.esm.js +1 -1
  33. package/dist/nile-dialog/nile-dialog.test.cjs.js +1 -1
  34. package/dist/nile-dialog/nile-dialog.test.esm.js +1 -1
  35. package/dist/nile-drawer/nile-drawer.test.cjs.js +1 -1
  36. package/dist/nile-drawer/nile-drawer.test.esm.js +1 -1
  37. package/dist/nile-dropdown/nile-dropdown.test.cjs.js +1 -1
  38. package/dist/nile-dropdown/nile-dropdown.test.esm.js +1 -1
  39. package/dist/nile-empty-state/nile-empty-state.test.cjs.js +1 -1
  40. package/dist/nile-empty-state/nile-empty-state.test.esm.js +1 -1
  41. package/dist/nile-error-message/nile-error-message.test.cjs.js +1 -1
  42. package/dist/nile-error-message/nile-error-message.test.esm.js +1 -1
  43. package/dist/nile-file-preview/index.cjs.js +2 -0
  44. package/dist/nile-file-preview/index.cjs.js.map +1 -0
  45. package/dist/nile-file-preview/index.esm.js +1 -0
  46. package/dist/nile-file-preview/nile-file-preview.cjs.js +2 -0
  47. package/dist/nile-file-preview/nile-file-preview.cjs.js.map +1 -0
  48. package/dist/nile-file-preview/nile-file-preview.css.cjs.js +2 -0
  49. package/dist/nile-file-preview/nile-file-preview.css.cjs.js.map +1 -0
  50. package/dist/nile-file-preview/nile-file-preview.css.esm.js +510 -0
  51. package/dist/nile-file-preview/nile-file-preview.esm.js +3 -0
  52. package/dist/nile-file-preview/nile-file-preview.template.cjs.js +2 -0
  53. package/dist/nile-file-preview/nile-file-preview.template.cjs.js.map +1 -0
  54. package/dist/nile-file-preview/nile-file-preview.template.esm.js +179 -0
  55. package/dist/nile-file-preview/nile-file-preview.test.cjs.js +2 -0
  56. package/dist/nile-file-preview/nile-file-preview.test.cjs.js.map +1 -0
  57. package/dist/nile-file-preview/nile-file-preview.test.esm.js +1 -0
  58. package/dist/nile-file-preview/types/index.cjs.js +2 -0
  59. package/dist/nile-file-preview/types/index.cjs.js.map +1 -0
  60. package/dist/nile-file-preview/types/index.esm.js +1 -0
  61. package/dist/nile-file-preview/types/nile-file-preview.enums.cjs.js +2 -0
  62. package/dist/nile-file-preview/types/nile-file-preview.enums.cjs.js.map +1 -0
  63. package/dist/nile-file-preview/types/nile-file-preview.enums.esm.js +1 -0
  64. package/dist/nile-file-preview/types/nile-file-preview.interface.cjs.js +2 -0
  65. package/dist/nile-file-preview/types/nile-file-preview.interface.cjs.js.map +1 -0
  66. package/dist/nile-file-preview/types/nile-file-preview.interface.esm.js +1 -0
  67. package/dist/nile-file-preview/utils/index.cjs.js +2 -0
  68. package/dist/nile-file-preview/utils/index.cjs.js.map +1 -0
  69. package/dist/nile-file-preview/utils/index.esm.js +1 -0
  70. package/dist/nile-file-preview/utils/nile-file-preview.util.cjs.js +2 -0
  71. package/dist/nile-file-preview/utils/nile-file-preview.util.cjs.js.map +1 -0
  72. package/dist/nile-file-preview/utils/nile-file-preview.util.esm.js +1 -0
  73. package/dist/nile-file-upload/index.cjs.js +2 -0
  74. package/dist/nile-file-upload/index.cjs.js.map +1 -0
  75. package/dist/nile-file-upload/index.esm.js +1 -0
  76. package/dist/nile-file-upload/nile-file-upload.cjs.js +2 -0
  77. package/dist/nile-file-upload/nile-file-upload.cjs.js.map +1 -0
  78. package/dist/nile-file-upload/nile-file-upload.css.cjs.js +2 -0
  79. package/dist/nile-file-upload/nile-file-upload.css.cjs.js.map +1 -0
  80. package/dist/nile-file-upload/nile-file-upload.css.esm.js +536 -0
  81. package/dist/nile-file-upload/nile-file-upload.esm.js +3 -0
  82. package/dist/nile-file-upload/nile-file-upload.template.cjs.js +10 -0
  83. package/dist/nile-file-upload/nile-file-upload.template.cjs.js.map +1 -0
  84. package/dist/nile-file-upload/nile-file-upload.template.esm.js +163 -0
  85. package/dist/nile-file-upload/nile-file-upload.test.cjs.js +2 -0
  86. package/dist/nile-file-upload/nile-file-upload.test.cjs.js.map +1 -0
  87. package/dist/nile-file-upload/nile-file-upload.test.esm.js +1 -0
  88. package/dist/nile-file-upload/types/file-upload.enums.cjs.js +2 -0
  89. package/dist/nile-file-upload/types/file-upload.enums.cjs.js.map +1 -0
  90. package/dist/nile-file-upload/types/file-upload.enums.esm.js +1 -0
  91. package/dist/nile-file-upload/types/file-upload.type.cjs.js +2 -0
  92. package/dist/nile-file-upload/types/file-upload.type.cjs.js.map +1 -0
  93. package/dist/nile-file-upload/types/file-upload.type.esm.js +1 -0
  94. package/dist/nile-file-upload/types/index.cjs.js +2 -0
  95. package/dist/nile-file-upload/types/index.cjs.js.map +1 -0
  96. package/dist/nile-file-upload/types/index.esm.js +1 -0
  97. package/dist/nile-file-upload/utils/drag-drop.util.cjs.js +2 -0
  98. package/dist/nile-file-upload/utils/drag-drop.util.cjs.js.map +1 -0
  99. package/dist/nile-file-upload/utils/drag-drop.util.esm.js +1 -0
  100. package/dist/nile-file-upload/utils/file-validation.util.cjs.js +2 -0
  101. package/dist/nile-file-upload/utils/file-validation.util.cjs.js.map +1 -0
  102. package/dist/nile-file-upload/utils/file-validation.util.esm.js +1 -0
  103. package/dist/nile-filter-chip/index.cjs.js +2 -0
  104. package/dist/nile-filter-chip/index.cjs.js.map +1 -0
  105. package/dist/nile-filter-chip/index.esm.js +1 -0
  106. package/dist/nile-filter-chip/nile-filter-chip.cjs.js +2 -0
  107. package/dist/nile-filter-chip/nile-filter-chip.cjs.js.map +1 -0
  108. package/dist/nile-filter-chip/nile-filter-chip.css.cjs.js +2 -0
  109. package/dist/nile-filter-chip/nile-filter-chip.css.cjs.js.map +1 -0
  110. package/dist/nile-filter-chip/nile-filter-chip.css.esm.js +121 -0
  111. package/dist/nile-filter-chip/nile-filter-chip.esm.js +43 -0
  112. package/dist/nile-filter-chip/nile-filter-chip.test.cjs.js +2 -0
  113. package/dist/nile-filter-chip/nile-filter-chip.test.cjs.js.map +1 -0
  114. package/dist/nile-filter-chip/nile-filter-chip.test.esm.js +20 -0
  115. package/dist/nile-form-group/nile-form-group.test.cjs.js +1 -1
  116. package/dist/nile-form-group/nile-form-group.test.esm.js +1 -1
  117. package/dist/nile-form-help-text/nile-form-help-text.test.cjs.js +1 -1
  118. package/dist/nile-form-help-text/nile-form-help-text.test.esm.js +1 -1
  119. package/dist/nile-hero/nile-hero.test.cjs.js +1 -1
  120. package/dist/nile-hero/nile-hero.test.esm.js +1 -1
  121. package/dist/nile-icon/nile-icon.test.cjs.js +1 -1
  122. package/dist/nile-icon/nile-icon.test.esm.js +1 -1
  123. package/dist/nile-input/nile-input.test.cjs.js +1 -1
  124. package/dist/nile-input/nile-input.test.esm.js +1 -1
  125. package/dist/nile-link/nile-link.test.cjs.js +1 -1
  126. package/dist/nile-link/nile-link.test.esm.js +1 -1
  127. package/dist/nile-loader/nile-loader.test.cjs.js +1 -1
  128. package/dist/nile-loader/nile-loader.test.esm.js +1 -1
  129. package/dist/nile-popover/index.cjs.js +1 -1
  130. package/dist/nile-popover/index.esm.js +1 -1
  131. package/dist/nile-popover/nile-popover.cjs.js +3 -11
  132. package/dist/nile-popover/nile-popover.cjs.js.map +1 -1
  133. package/dist/nile-popover/nile-popover.esm.js +7 -13
  134. package/dist/nile-popover/nile-popover.test.cjs.js +1 -1
  135. package/dist/nile-popover/nile-popover.test.cjs.js.map +1 -1
  136. package/dist/nile-popover/nile-popover.test.esm.js +3 -3
  137. package/dist/nile-popup/nile-popup.test.cjs.js +1 -1
  138. package/dist/nile-popup/nile-popup.test.esm.js +1 -1
  139. package/dist/nile-progress-bar/nile-progress-bar.test.cjs.js +1 -1
  140. package/dist/nile-progress-bar/nile-progress-bar.test.esm.js +1 -1
  141. package/dist/nile-radio/nile-radio.test.cjs.js +1 -1
  142. package/dist/nile-radio/nile-radio.test.esm.js +1 -1
  143. package/dist/nile-radio-group/nile-radio-group.test.cjs.js +1 -1
  144. package/dist/nile-radio-group/nile-radio-group.test.esm.js +1 -1
  145. package/dist/nile-select/nile-select.test.cjs.js +1 -1
  146. package/dist/nile-select/nile-select.test.esm.js +1 -1
  147. package/dist/nile-slide-toggle/nile-slide-toggle.test.cjs.js +1 -1
  148. package/dist/nile-slide-toggle/nile-slide-toggle.test.esm.js +1 -1
  149. package/dist/nile-tab-group/nile-tab-group.test.cjs.js +1 -1
  150. package/dist/nile-tab-group/nile-tab-group.test.esm.js +1 -1
  151. package/dist/nile-textarea/nile-textarea.test.cjs.js +1 -1
  152. package/dist/nile-textarea/nile-textarea.test.esm.js +1 -1
  153. package/dist/src/index.d.ts +3 -0
  154. package/dist/src/index.js +3 -0
  155. package/dist/src/index.js.map +1 -1
  156. package/dist/src/nile-file-preview/nile-file-preview.css.js +32 -43
  157. package/dist/src/nile-file-preview/nile-file-preview.css.js.map +1 -1
  158. package/dist/src/nile-file-preview/nile-file-preview.d.ts +3 -1
  159. package/dist/src/nile-file-preview/nile-file-preview.js +27 -5
  160. package/dist/src/nile-file-preview/nile-file-preview.js.map +1 -1
  161. package/dist/src/nile-file-preview/nile-file-preview.template.d.ts +2 -0
  162. package/dist/src/nile-file-preview/nile-file-preview.template.js +114 -48
  163. package/dist/src/nile-file-preview/nile-file-preview.template.js.map +1 -1
  164. package/dist/src/nile-file-preview/types/index.d.ts +2 -2
  165. package/dist/src/nile-file-preview/types/index.js +2 -2
  166. package/dist/src/nile-file-preview/types/index.js.map +1 -1
  167. package/dist/src/nile-file-preview/types/nile-file-preview.enums.d.ts +28 -0
  168. package/dist/src/nile-file-preview/types/nile-file-preview.enums.js +33 -0
  169. package/dist/src/nile-file-preview/types/nile-file-preview.enums.js.map +1 -0
  170. package/dist/src/nile-file-preview/types/nile-file-preview.interface.d.ts +4 -0
  171. package/dist/src/nile-file-preview/types/nile-file-preview.interface.js +2 -0
  172. package/dist/src/nile-file-preview/types/nile-file-preview.interface.js.map +1 -0
  173. package/dist/src/nile-file-preview/utils/index.d.ts +1 -1
  174. package/dist/src/nile-file-preview/utils/index.js +1 -1
  175. package/dist/src/nile-file-preview/utils/index.js.map +1 -1
  176. package/dist/src/nile-file-preview/utils/nile-file-preview.util.d.ts +4 -0
  177. package/dist/src/nile-file-preview/utils/nile-file-preview.util.js +38 -0
  178. package/dist/src/nile-file-preview/utils/nile-file-preview.util.js.map +1 -0
  179. package/dist/src/nile-file-upload/nile-file-upload.css.js +2 -1
  180. package/dist/src/nile-file-upload/nile-file-upload.css.js.map +1 -1
  181. package/dist/src/nile-file-upload/nile-file-upload.d.ts +3 -0
  182. package/dist/src/nile-file-upload/nile-file-upload.js +22 -5
  183. package/dist/src/nile-file-upload/nile-file-upload.js.map +1 -1
  184. package/dist/src/nile-file-upload/nile-file-upload.template.js +27 -19
  185. package/dist/src/nile-file-upload/nile-file-upload.template.js.map +1 -1
  186. package/dist/src/nile-file-upload/types/file-upload.enums.d.ts +9 -2
  187. package/dist/src/nile-file-upload/types/file-upload.enums.js +8 -1
  188. package/dist/src/nile-file-upload/types/file-upload.enums.js.map +1 -1
  189. package/dist/src/nile-file-upload/utils/drag-drop.util.d.ts +5 -1
  190. package/dist/src/nile-file-upload/utils/drag-drop.util.js +9 -1
  191. package/dist/src/nile-file-upload/utils/drag-drop.util.js.map +1 -1
  192. package/dist/src/nile-file-upload/utils/file-validation.util.d.ts +3 -1
  193. package/dist/src/nile-file-upload/utils/file-validation.util.js +72 -10
  194. package/dist/src/nile-file-upload/utils/file-validation.util.js.map +1 -1
  195. package/dist/src/nile-filter-chip/index.d.ts +1 -0
  196. package/dist/src/nile-filter-chip/index.js +2 -0
  197. package/dist/src/nile-filter-chip/index.js.map +1 -0
  198. package/dist/src/nile-filter-chip/nile-filter-chip.css.d.ts +12 -0
  199. package/dist/src/nile-filter-chip/nile-filter-chip.css.js +133 -0
  200. package/dist/src/nile-filter-chip/nile-filter-chip.css.js.map +1 -0
  201. package/dist/src/nile-filter-chip/nile-filter-chip.d.ts +36 -0
  202. package/dist/src/nile-filter-chip/nile-filter-chip.js +141 -0
  203. package/dist/src/nile-filter-chip/nile-filter-chip.js.map +1 -0
  204. package/dist/src/nile-filter-chip/nile-filter-chip.test.d.ts +1 -0
  205. package/dist/src/nile-filter-chip/nile-filter-chip.test.js +80 -0
  206. package/dist/src/nile-filter-chip/nile-filter-chip.test.js.map +1 -0
  207. package/dist/src/nile-tooltip/nile-tooltip-utils.d.ts +18 -0
  208. package/dist/src/nile-tooltip/nile-tooltip-utils.js +216 -0
  209. package/dist/src/nile-tooltip/nile-tooltip-utils.js.map +1 -0
  210. package/dist/src/nile-tooltip/nile-tooltip.test.d.ts +1 -0
  211. package/dist/src/nile-tooltip/nile-tooltip.test.js +148 -0
  212. package/dist/src/nile-tooltip/nile-tooltip.test.js.map +1 -0
  213. package/dist/tsconfig.tsbuildinfo +1 -1
  214. package/package.json +1 -1
  215. package/src/index.ts +4 -1
  216. package/src/nile-file-preview/index.ts +1 -0
  217. package/src/nile-file-preview/nile-file-preview.css.ts +524 -0
  218. package/src/nile-file-preview/nile-file-preview.template.ts +248 -0
  219. package/src/nile-file-preview/nile-file-preview.test.ts +38 -0
  220. package/src/nile-file-preview/nile-file-preview.ts +173 -0
  221. package/src/nile-file-preview/types/index.ts +2 -0
  222. package/src/nile-file-preview/types/nile-file-preview.enums.ts +31 -0
  223. package/src/nile-file-preview/types/nile-file-preview.interface.ts +4 -0
  224. package/src/nile-file-preview/utils/index.ts +1 -0
  225. package/src/nile-file-preview/utils/nile-file-preview.util.ts +47 -0
  226. package/src/nile-file-upload/index.ts +1 -0
  227. package/src/nile-file-upload/nile-file-upload.css.ts +550 -0
  228. package/src/nile-file-upload/nile-file-upload.template.ts +201 -0
  229. package/src/nile-file-upload/nile-file-upload.test.ts +38 -0
  230. package/src/nile-file-upload/nile-file-upload.ts +149 -0
  231. package/src/nile-file-upload/types/file-upload.enums.ts +39 -0
  232. package/src/nile-file-upload/types/file-upload.type.ts +5 -0
  233. package/src/nile-file-upload/types/index.ts +2 -0
  234. package/src/nile-file-upload/utils/drag-drop.util.ts +106 -0
  235. package/src/nile-file-upload/utils/file-validation.util.ts +163 -0
  236. package/src/nile-filter-chip/index.ts +1 -0
  237. package/src/nile-filter-chip/nile-filter-chip.css.ts +138 -0
  238. package/src/nile-filter-chip/nile-filter-chip.test.ts +92 -0
  239. package/src/nile-filter-chip/nile-filter-chip.ts +136 -0
  240. package/vscode-html-custom-data.json +192 -0
  241. package/dist/fixture-7bfb866e.cjs.js.map +0 -1
@@ -0,0 +1,248 @@
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
+
10
+ export function getHorizontalUploadingState(
11
+ file: File,
12
+ uploadStatus: number
13
+ ): TemplateResult {
14
+ return html`
15
+ <div class="uploading">
16
+ <nile-loader width="24" height="24"></nile-loader>
17
+ <div class="progress-bar-container">
18
+ <div class="progress-bar-percent">
19
+ <p>Uploading File...</p>
20
+ <p>${uploadStatus}%</p>
21
+ </div>
22
+ <nile-progress-bar
23
+ value="${uploadStatus}"
24
+ ></nile-progress-bar>
25
+ <p>${file.name}</p>
26
+ </div>
27
+ <slot @click=${(e: CustomEvent<RemoveFileDetail>) => cancelFileUpload(file, e)} name="cancelIcon">
28
+ <nile-icon
29
+ name="close"
30
+ size="14"
31
+ class="icon"
32
+ ></nile-icon>
33
+ </slot>
34
+ </div>
35
+ `;
36
+ }
37
+
38
+ export function getHorizontalPreviewState(
39
+ url: string,
40
+ file: File,
41
+ originalUrl: string
42
+ ): TemplateResult {
43
+ return html`
44
+ <div class="preview horizontal-div">
45
+ <div class="preview-inner">
46
+ <div class="preview-image-container">
47
+ <img
48
+ class="image-preview"
49
+ src=${url}
50
+ alt=${file.name}
51
+ />
52
+ </div>
53
+ <div class="preview-file-info">
54
+ <p>${file.name}</p>
55
+ <p>${(file.type.split('/')[1]).toUpperCase()} &#8226; ${(Number(file.size) / 1024).toFixed(0)}KB</p>
56
+ </div>
57
+ </div>
58
+ <slot name="cancelIcon">
59
+ <nile-icon
60
+ @click=${(e: CustomEvent<RemoveFileDetail>) => removeFile(file, e, originalUrl)}
61
+ name="trash"
62
+ size="14"
63
+ class="icon"
64
+ ></nile-icon>
65
+ </slot>
66
+ </div>
67
+ `;
68
+ }
69
+
70
+ export function getHorizontalNoPreviewState(
71
+ file: File,
72
+ originalUrl: string
73
+ ): TemplateResult {
74
+ return html`
75
+ <div class="no-preview horizontal-div">
76
+ <div class="no-preview-container">
77
+ <div class="document-icon">
78
+ <nile-icon name="general" size="20" color="var(--nile-colors-blue-500)"></nile-icon>
79
+ </div>
80
+ <div class="preview-file-info">
81
+ <p>${file.name}</p>
82
+ <p>${(file.type.split('/')[1]).toUpperCase()} &#8226; ${(Number(file.size) / 1034).toFixed(0)}KB</p>
83
+ </div>
84
+ </div>
85
+ <div>
86
+ <slot name="cancelIcon">
87
+ <nile-icon
88
+ @click=${(e: CustomEvent<RemoveFileDetail>) => removeFile(file, e, originalUrl)}
89
+ name="trash"
90
+ size="14"
91
+ class="icon"
92
+ ></nile-icon>
93
+ </slot>
94
+ </div>
95
+ </div>
96
+ `;
97
+ }
98
+
99
+ export function getHorizontalErrorState(
100
+ file: File,
101
+ errorMessage: string,
102
+ originalUrl: string
103
+ ): TemplateResult {
104
+ return html`
105
+ <div class="error horizontal-div">
106
+ <div class="error-container">
107
+ <div class="error-icon">
108
+ <nile-icon name="info-icon" size="20" color="var(--nile-colors-red-700)"></nile-icon>
109
+ </div>
110
+ <div class="file-info">
111
+ <p>${file.name}</p>
112
+ <nile-tooltip content=${errorMessage}>
113
+ <p>${errorMessage}</p>
114
+ </nile-tooltip>
115
+ </div>
116
+ </div>
117
+ <slot name="cancelIcon">
118
+ <nile-icon
119
+ @click=${(e: CustomEvent<RemoveFileDetail>) => removeFile(file, e, originalUrl)}
120
+ name="close"
121
+ size="14"
122
+ class="icon"
123
+ ></nile-icon>
124
+ </slot>
125
+ </div>
126
+ `;
127
+ }
128
+
129
+ // vertical states
130
+ export function getVerticalUploadingState(
131
+ file: File,
132
+ uploadStatus: number
133
+ ): TemplateResult {
134
+ return html`
135
+ <div class="vertical-div vertical-uploading">
136
+ <div class="loading">
137
+ <nile-loader width="24" height="24"></nile-loader>
138
+ </div>
139
+
140
+ <div class="progress-bar-container">
141
+ <div class="progress-bar-percent">
142
+ <p>Uploading...</p>
143
+ <p>${uploadStatus}%</p>
144
+ </div>
145
+ <nile-progress-bar value=${uploadStatus}></nile-progress-bar>
146
+ <p>${file.name}</p>
147
+ </div>
148
+
149
+ <slot name="cancelIcon">
150
+ <nile-icon
151
+ @click=${(e: CustomEvent<RemoveFileDetail>) => cancelFileUpload(file, e)}
152
+ name="close"
153
+ size="14"
154
+ class="icon corner-icon"
155
+ ></nile-icon>
156
+ </slot>
157
+ </div>
158
+ `;
159
+ }
160
+
161
+
162
+ export function getVerticalPreviewState(
163
+ url: string,
164
+ file: File,
165
+ originalUrl: string
166
+ ): TemplateResult {
167
+ return html`
168
+ <div class="vertical-div vertical-preview">
169
+ <div>
170
+ <img
171
+ class="image-preview"
172
+ src=${url}
173
+ alt=${file.name}
174
+ />
175
+ </div>
176
+
177
+ <div class="content-container">
178
+ <p>${file.name}</p>
179
+ <p>${(file.type.split('/')[1]).toUpperCase()} &#8226; ${(Number(file.size) / 1024).toFixed(0)}KB</p>
180
+ </div>
181
+
182
+ <slot name="cancelIcon">
183
+ <nile-icon
184
+ @click=${(e: CustomEvent<RemoveFileDetail>) => removeFile(file, e, originalUrl)}
185
+ name="trash"
186
+ size="14"
187
+ class="icon corner-icon"
188
+ ></nile-icon>
189
+ </slot>
190
+ </div>
191
+ `;
192
+ }
193
+
194
+ export function getVerticalNoPreviewState(
195
+ file: File,
196
+ originalUrl: string
197
+ ): TemplateResult {
198
+ return html`
199
+ <div class="vertical-div vertical-no-preview">
200
+ <div class="vertical-document-icon">
201
+ <nile-icon name="general" size="20" color="var(--nile-colors-blue-500)"></nile-icon>
202
+ </div>
203
+
204
+ <div class="content-container">
205
+ <p>${file.name}</p>
206
+ <p>${file.type} &#8226; ${(Number(file.size) / 1024).toFixed(0)}KB</p>
207
+ </div>
208
+
209
+ <slot name="cancelIcon">
210
+ <nile-icon
211
+ @click=${(e: CustomEvent<RemoveFileDetail>) => removeFile(file, e, originalUrl)}
212
+ name="trash"
213
+ size="14"
214
+ class="icon corner-icon"
215
+ ></nile-icon>
216
+ </slot>
217
+ </div>
218
+ `;
219
+ }
220
+
221
+ export function getVerticalErrorState(
222
+ file: File,
223
+ errorMessage: string,
224
+ originalUrl: string
225
+ ): TemplateResult {
226
+ return html`
227
+ <div class="vertical-div vertical-error">
228
+ <div class="vertical-document-icon error-bg">
229
+ <nile-icon name="info-icon" size="20" color="var(--nile-colors-red-700)"></nile-icon>
230
+ </div>
231
+
232
+ <div class="file-info-vertical-state">
233
+ <p>${file.name}</p>
234
+ <nile-tooltip content=${errorMessage}>
235
+ <p>${errorMessage}</p>
236
+ </nile-tooltip>
237
+ </div>
238
+
239
+ <slot name="cancelIcon" @click=${(e: CustomEvent<RemoveFileDetail>) => removeFile(file, e, originalUrl)}>
240
+ <nile-icon
241
+ name="close"
242
+ size="14"
243
+ class="icon corner-icon"
244
+ ></nile-icon>
245
+ </slot>
246
+ </div>
247
+ `;
248
+ }
@@ -0,0 +1,38 @@
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
+ });
@@ -0,0 +1,173 @@
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: Array }) allowedTypes: string[] = [];
47
+ @property({ type: String }) state: FilePreviewState = FilePreviewState.DEFAULT;
48
+ @property({ type: String }) variant: FilePreviewVariant = FilePreviewVariant.HORIZONTAL;
49
+ @property({ type: String }) inputFileName: string = "";
50
+ private inputFileHtml: TemplateResult | null = null;
51
+ private originalUrl: string = "";
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 updated(changedProperties: PropertyValues): void {
64
+ if(changedProperties.has('uploadStatus') && this.uploadStatus) {
65
+ if(this.uploadStatus < 100) {
66
+ this.createUploadState(this.inputFile, this.uploadStatus);
67
+ this.emit(FilePreviewEvent.NILE_UPLOADING);
68
+
69
+ } else {
70
+ this.createState(this.inputFile);
71
+ }
72
+
73
+ } else if (changedProperties.has('inputFile') && this.inputFile) {
74
+ this.createState(this.inputFile);
75
+ this.emit(FilePreviewEvent.NILE_RECEIVE);
76
+
77
+ } else if (changedProperties.has('fileUrl') && this.fileUrl) {
78
+ this.handleFileUrl(this.fileUrl);
79
+ this.emit(FilePreviewEvent.NILE_RECEIVE);
80
+
81
+ } else if (changedProperties.has('errorMessage')) {
82
+ this.createState(this.inputFile);
83
+ }
84
+ }
85
+
86
+ private createUploadState( file: File, uploadStatus: number): void {
87
+ const isHorizontal = this.variant === FilePreviewVariant.HORIZONTAL;
88
+
89
+ this.inputFileHtml = isHorizontal
90
+ ? getHorizontalUploadingState(file, uploadStatus)
91
+ : getVerticalUploadingState(file, uploadStatus);
92
+
93
+ this.requestUpdate();
94
+ }
95
+
96
+ private async handleFileUrl(url: string): Promise<void> {
97
+ this.originalUrl = url;
98
+ try {
99
+ const response = await fetch(url);
100
+ const blob = await response.blob();
101
+ const fileName = this.inputFileName || url.split('/').pop() || FilePreviewErrorMessages.UNKNOWN_FILE_NAME;
102
+ const file = new File([blob], fileName, { type: blob.type });
103
+
104
+ this.createState(file);
105
+ } catch (error) {
106
+ const dummyFile = new File([], this.inputFileName || FilePreviewErrorMessages.UNKNOWN_FILE_NAME, { type: 'application/octet-stream' });
107
+ this.errorMessage = FilePreviewErrorMessages.FAILED_TO_LOAD;
108
+
109
+ this.inputFileHtml = this.variant === FilePreviewVariant.HORIZONTAL
110
+ ? getHorizontalErrorState(dummyFile, this.errorMessage, this.originalUrl)
111
+ : getVerticalErrorState(dummyFile, this.errorMessage, this.originalUrl);
112
+ this.requestUpdate();
113
+ }
114
+ }
115
+
116
+ public async createState(file: File): Promise<void> {
117
+ const isHorizontal = this.variant === FilePreviewVariant.HORIZONTAL;
118
+
119
+ if (this.allowedTypes.includes(file.type) && !this.errorMessage) {
120
+ if (file.type.startsWith('image/')) {
121
+ try {
122
+ const url = await generatePreviewUrl(file);
123
+ this.inputFileHtml = isHorizontal
124
+ ? getHorizontalPreviewState(url, file, this.originalUrl)
125
+ : getVerticalPreviewState(url, file, this.originalUrl);
126
+ } catch (error) {
127
+ this.inputFileHtml = isHorizontal
128
+ ? getHorizontalNoPreviewState(file, this.originalUrl)
129
+ : getVerticalNoPreviewState(file, this.originalUrl);
130
+ }
131
+ } else {
132
+ this.inputFileHtml = isHorizontal
133
+ ? getHorizontalNoPreviewState(file, this.originalUrl)
134
+ : getVerticalNoPreviewState(file, this.originalUrl);
135
+ }
136
+ } else {
137
+ this.errorMessage = !this.errorMessage
138
+ ? FilePreviewErrorMessages.INVALID_FORMAT
139
+ : FilePreviewErrorMessages.UPLOAD_CANCEL;
140
+
141
+ this.inputFileHtml = isHorizontal
142
+ ? getHorizontalErrorState(file, this.errorMessage, this.originalUrl)
143
+ : getVerticalErrorState(file, this.errorMessage, this.originalUrl);
144
+ }
145
+ this.requestUpdate();
146
+ }
147
+
148
+ private dummyFile = new File(['sdfjbs ewhf'], "dummy.txt", { type: "text/plain" });
149
+
150
+ public render(): TemplateResult {
151
+ return html`
152
+ ${this.inputFileHtml ?
153
+ this.inputFileHtml :
154
+ html``
155
+ }
156
+ `;
157
+ }
158
+
159
+ disconnectedCallback(): void {
160
+ super.disconnectedCallback();
161
+ this.emit(FilePreviewEvent.NILE_DESTROY);
162
+ }
163
+
164
+ /* #endregion */
165
+ }
166
+
167
+ export default NileFilePreview;
168
+
169
+ declare global {
170
+ interface HTMLElementTagNameMap {
171
+ 'nile-file-preview': NileFilePreview;
172
+ }
173
+ }
@@ -0,0 +1,2 @@
1
+ export * from './nile-file-preview.enums';
2
+ export * from './nile-file-preview.interface';
@@ -0,0 +1,31 @@
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 = "Size limit exceeded",
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
+ }
23
+
24
+ export enum FilePreviewEvent {
25
+ NILE_INIT = "nile-init",
26
+ NILE_RECEIVE = "nile-receive",
27
+ NILE_UPLOADING = "nile-uploding",
28
+ NILE_REMOVE = "nile-remove",
29
+ NILE_CANCEL_UPLOAD = "nile-cancel-upload",
30
+ NILE_DESTROY = "nile-destroy"
31
+ }
@@ -0,0 +1,4 @@
1
+ export type RemoveFileDetail = {
2
+ value: File;
3
+ url: string;
4
+ };
@@ -0,0 +1 @@
1
+ export * from './nile-file-preview.util'
@@ -0,0 +1,47 @@
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
+ }
@@ -0,0 +1 @@
1
+ export { NileFileUpload } from './nile-file-upload';