@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,201 @@
1
+ import { html, TemplateResult } from 'lit';
2
+ import './nile-file-upload.css';
3
+ import { DragHandler } from './utils/drag-drop.util';
4
+ import { classMap } from 'lit-html/directives/class-map.js';
5
+ import { FileUploadState } from './types/file-upload.enums';
6
+
7
+ let dragHandlerInstance: DragHandler;
8
+ export const getDragHandler = (dragHandler: DragHandler): void => {
9
+ dragHandlerInstance = dragHandler;
10
+ }
11
+
12
+ export const getHorizontalDefaultState = (
13
+ browseFiles: Function,
14
+ title: string,
15
+ subtitle: string,
16
+ errorMessage: string,
17
+ state: FileUploadState
18
+ ): TemplateResult => html`
19
+ <div>
20
+ <div class=${classMap({ 'hover-border': state === "hover", 'horizontal-div': true })}>
21
+ <div class="inner-div">
22
+ <slot name="uploadIcon">
23
+ <nile-icon name="upload" size="24"></nile-icon>
24
+ </slot>
25
+ <div class="content">
26
+ <slot name="title">
27
+ <h4>${title}</h4>
28
+ </slot>
29
+ <slot name="subtitle">
30
+ <p>${subtitle}</p>
31
+ </slot>
32
+ </div>
33
+ </div>
34
+ <input
35
+ type="file"
36
+ @change=${(e: Event | DragEvent) => dragHandlerInstance.handleFiles(e)}
37
+ multiple
38
+ />
39
+ <slot @click=${browseFiles} name="browseFileButton">
40
+ <nile-button variant="tertiary">
41
+ Browse File
42
+ </nile-button>
43
+ </slot>
44
+ </div>
45
+ ${errorMessage ?
46
+ html`<div class="upload-error">
47
+ <nile-icon name="warning" size="12" color="red"></nile-icon>
48
+ <span>${errorMessage}</span>
49
+ </div>` :
50
+ html``
51
+ }
52
+ </div>
53
+ `;
54
+
55
+ export const getHorizontalDisabledtState = (
56
+ browseFiles: Function,
57
+ title: string,
58
+ subtitle: string
59
+ ): TemplateResult => html`
60
+ <div
61
+ class="horizontal-div disable"
62
+ >
63
+ <div class="inner-div">
64
+ <slot name="uploadIcon">
65
+ <nile-icon name="upload" size="24"></nile-icon>
66
+ </slot>
67
+ <div class="content">
68
+ <slot name="title">
69
+ <h4>${title}</h4>
70
+ </slot>
71
+ <slot name="subtitle">
72
+ <p>${subtitle}</p>
73
+ </slot>
74
+ </div>
75
+ </div>
76
+ <input
77
+ type="file"
78
+ @change=${(e: Event | DragEvent) => dragHandlerInstance.handleFiles(e)}
79
+ multiple
80
+ />
81
+ <slot @click=${browseFiles} name="browseFileButton">
82
+ <nile-button variant="tertiary">
83
+ Browse File
84
+ </nile-button>
85
+ </slot>
86
+ </div>
87
+ `;
88
+
89
+ export const getHorizontalDragState = (): TemplateResult => html`
90
+ <div class="horizontal-div dragging">
91
+ <div class="icons-container">
92
+ <nile-icon
93
+ color="var(--nile-colors-blue-500)"
94
+ name="general"
95
+ size="20"
96
+ class="general-icon"
97
+ ></nile-icon>
98
+ <nile-icon
99
+ color="var(--nile-colors-blue-500)"
100
+ name="image"
101
+ size="24"
102
+ class="image-icon"
103
+ ></nile-icon>
104
+ </div>
105
+ <p>Drop files here to upload</p>
106
+ </div>
107
+ `;
108
+
109
+ // Vertical States
110
+ export const getVerticalDefaultState = (
111
+ browseFiles: Function,
112
+ title: string,
113
+ subtitle: string,
114
+ errorMessage: string,
115
+ state: FileUploadState
116
+ ): TemplateResult => html`
117
+ <div>
118
+ <div class=${classMap({ 'hover-border': state === "hover", 'vertical-div': true })}>
119
+ <slot name="uploadIcon">
120
+ <nile-icon name="upload" size="24"></nile-icon>
121
+ </slot>
122
+ <div class="content-container">
123
+ <slot name="title">
124
+ <h4>${title}</h4>
125
+ </slot>
126
+ <slot name="subtitle">
127
+ <p>${subtitle}</p>
128
+ </slot>
129
+ </div>
130
+ <input
131
+ type="file"
132
+ @change=${(e: Event | DragEvent) => dragHandlerInstance.handleFiles(e)}
133
+ multiple
134
+ />
135
+ <slot @click=${browseFiles} name="browseFileButton">
136
+ <nile-button variant="tertiary">
137
+ Browse File
138
+ </nile-button>
139
+ </slot>
140
+ </div>
141
+ ${errorMessage ?
142
+ html`<div class="upload-error">
143
+ <nile-icon name="warning" size="12" color="red"></nile-icon>
144
+ <span>${errorMessage}</span>
145
+ </div>` :
146
+ html``
147
+ }
148
+ </div>
149
+ `;
150
+
151
+ export const getVerticalDisabledState = (
152
+ browseFiles: Function,
153
+ title: string,
154
+ subtitle: string
155
+ ): TemplateResult => html`
156
+ <div
157
+ class="vertical-deafult vertical-div disable"
158
+ >
159
+ <slot name="uploadIcon">
160
+ <nile-icon name="upload" size="24"></nile-icon>
161
+ </slot>
162
+ <div class="content-container">
163
+ <slot name="title">
164
+ <h4>${title}</h4>
165
+ </slot>
166
+ <slot name="title">
167
+ <p>${subtitle}</p>
168
+ </slot>
169
+ </div>
170
+ <input
171
+ type="file"
172
+ @change=${(e: Event | DragEvent) => dragHandlerInstance.handleFiles(e)}
173
+ multiple
174
+ />
175
+ <slot @click=${browseFiles} name="browseFileButton">
176
+ <nile-button variant="tertiary">
177
+ Browse File
178
+ </nile-button>
179
+ </slot>
180
+ </div>
181
+ `;
182
+
183
+ export const getVerticalDragState = (): TemplateResult => html`
184
+ <div class="vertical-div vertical-drag">
185
+ <div class="icons-container">
186
+ <nile-icon
187
+ color="var(--nile-colors-blue-500)"
188
+ name="general"
189
+ size="20"
190
+ class="general-icon"
191
+ ></nile-icon>
192
+ <nile-icon
193
+ color="var(--nile-colors-blue-500)"
194
+ name="image"
195
+ size="24"
196
+ class="image-icon"
197
+ ></nile-icon>
198
+ </div>
199
+ <p>Drop files here to upload</p>
200
+ </div>
201
+ `;
@@ -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-upload'; // Just import to register the element
11
+
12
+ describe('<nile-file-upload>', () => {
13
+ let element: HTMLElement;
14
+
15
+ beforeEach(async () => {
16
+ element = await fixture(html`<nile-file-upload></nile-file-upload>`);
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-file-upload');
25
+ });
26
+
27
+ it('renders with slot content when provided', async () => {
28
+ const testContent = 'Test Content';
29
+ element = await fixture(html`<nile-file-upload>${testContent}</nile-file-upload>`);
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,149 @@
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-upload.css';
9
+ import { ChangedPropsInterface } from './types/file-upload.type'
10
+ import NileElement from '../internal/nile-element';
11
+ import { DragHandler } from './utils/drag-drop.util';
12
+ import { getDragHandler } from './nile-file-upload.template'
13
+ import { FileUploadDefaults } from './types/file-upload.enums';
14
+ import { LitElement, html, CSSResultArray, TemplateResult } from 'lit';
15
+ import { customElement, property, query, state } from 'lit/decorators.js';
16
+ import { FileUploadState, FileUploadVariant, FileUploadError, FileUploadEvent } from './types/file-upload.enums';
17
+ import { setUpDragHandler, addGlobalListeners, addInternalListeners, uploadFiles, cancelFileUpload } from './utils/file-validation.util';
18
+ import {
19
+ getHorizontalDefaultState,
20
+ getHorizontalDisabledtState,
21
+ getHorizontalDragState,
22
+ getVerticalDefaultState,
23
+ getVerticalDisabledState,
24
+ getVerticalDragState,
25
+ } from './nile-file-upload.template';
26
+
27
+ /**
28
+ * Nile file-upload component.
29
+ *
30
+ * @tag nile-file-upload
31
+ *
32
+ */
33
+ @customElement('nile-file-upload')
34
+ export class NileFileUpload extends NileElement {
35
+ /**
36
+ * The styles for nile-file-upload
37
+ * @remarks If you are extending this class you can extend the base styles with super. Eg `return [super(), myCustomStyles]`
38
+ */
39
+ public static get styles(): CSSResultArray {
40
+ return [styles];
41
+ }
42
+
43
+ @property({ type: Number }) size: number = 0;
44
+ @property({ type: Boolean}) error: boolean = false;
45
+ @property({ type: String }) errorMessage: string = "";
46
+ @property({ type: Boolean}) allowMultiple: boolean = true;
47
+ @property({ type: Boolean}) allowDuplicates: boolean = false;
48
+ @property({ type: Array }) uploadedFiles: File[] = [];
49
+ @property({ type: String }) title: string = FileUploadDefaults.TITLE;
50
+ @property({ type: String }) subtitle: string = FileUploadDefaults.SUBTITLE;
51
+ @property({ type: String }) state: FileUploadState = FileUploadState.DEFAULT;
52
+ @property({ type: String }) variant: FileUploadVariant = FileUploadVariant.HORIZONTAL;
53
+ @property({ type: String }) fileUploadUrl: string = "";
54
+ @property({ type: Boolean}) autoUpload: boolean = true;
55
+ @query('input') input!: HTMLInputElement;
56
+ public uploadRequests = new Map<File, XMLHttpRequest>();
57
+
58
+ private dragHandler!: DragHandler;
59
+
60
+ connectedCallback(): void {
61
+ super.connectedCallback();
62
+ this.emit(FileUploadEvent.NILE_INIT);
63
+ }
64
+
65
+ firstUpdated(changedProps: ChangedPropsInterface): void {
66
+ super.firstUpdated(changedProps);
67
+
68
+ this.dragHandler = new DragHandler();
69
+ getDragHandler(this.dragHandler);
70
+ setUpDragHandler(this, this.dragHandler);
71
+ addInternalListeners(this, this.dragHandler, this.uploadRequests);
72
+ addGlobalListeners(this.dragHandler);
73
+ }
74
+
75
+ updated(changedProps: ChangedPropsInterface): void {
76
+ super.updated(changedProps);
77
+
78
+ if (changedProps.has('uploadedFiles')) {
79
+ if(this.uploadedFiles.length === 0) this.errorMessage = "";
80
+ if(!this.fileUploadUrl) {
81
+ this.errorMessage = FileUploadError.UPLOAD_URL_REQUIRED;
82
+ return;
83
+ }
84
+ uploadFiles(this);
85
+ this.emit(FileUploadEvent.NILE_CHANGE, { files: this.uploadedFiles });
86
+
87
+ } else if (changedProps.has('state')) {
88
+ this.dragHandler.setValuesInDragHandler(this.state, this.size, this.uploadedFiles);
89
+ }
90
+ }
91
+
92
+ private browseFiles(): void {
93
+ this.emit(FileUploadEvent.NILE_BROWSE);
94
+ this.errorMessage = "";
95
+ this.input.click();
96
+ }
97
+
98
+ public setState = (newState: FileUploadState): void => {
99
+ this.state = newState;
100
+ }
101
+
102
+ render(): TemplateResult {
103
+ return html`
104
+ ${this.getState()}
105
+ `;
106
+ }
107
+
108
+ private getState(): TemplateResult {
109
+ return this.variant === FileUploadVariant.HORIZONTAL
110
+ ? this.getHorizontalState()
111
+ : this.getVerticalState();
112
+ }
113
+
114
+ private getHorizontalState(): TemplateResult {
115
+ switch(this.state) {
116
+ case FileUploadState.DEFAULT:
117
+ return getHorizontalDefaultState(this.browseFiles, this.title, this.subtitle, this.errorMessage, this.state);
118
+
119
+ case FileUploadState.DISABLED:
120
+ return getHorizontalDisabledtState(this.browseFiles, this.title, this.subtitle);
121
+
122
+ case FileUploadState.DRAG:
123
+ return getHorizontalDragState();
124
+
125
+ default:
126
+ return getHorizontalDefaultState(this.browseFiles, this.title, this.subtitle, this.errorMessage, this.state);
127
+ }
128
+ }
129
+
130
+ private getVerticalState(): TemplateResult {
131
+ switch(this.state) {
132
+ case FileUploadState.DEFAULT:
133
+ return getVerticalDefaultState(this.browseFiles, this.title, this.subtitle, this.errorMessage, this.state);
134
+
135
+ case FileUploadState.DISABLED:
136
+ return getVerticalDisabledState(this.browseFiles, this.title, this.subtitle);
137
+
138
+ case FileUploadState.DRAG:
139
+ return getVerticalDragState();
140
+
141
+ default:
142
+ return getVerticalDefaultState(this.browseFiles, this.title, this.subtitle, this.errorMessage, this.state);
143
+ }
144
+ }
145
+
146
+ disconnectedCallback(): void {
147
+ this.emit(FileUploadEvent.NILE_DESTROY);
148
+ }
149
+ }
@@ -0,0 +1,39 @@
1
+ export enum FileUploadState {
2
+ DEFAULT = 'default',
3
+ DISABLED = 'disabled',
4
+ HOVER = 'hover',
5
+ DRAG = 'drag'
6
+ }
7
+
8
+ export enum FileUploadVariant {
9
+ HORIZONTAL = 'horizontal',
10
+ VERTICAL = 'vertical'
11
+ }
12
+
13
+ export enum FileUploadError {
14
+ INVALID_FORMAT = "Invalid file format! Upload valid file.",
15
+ SIZE_EXCEEDED = "File exceeds size limit! Upload smaller file.",
16
+ MULTIPLE_NOT_ALLOWED = "Please Upload Single File!",
17
+ DUPLICATES_NOT_ALLOWED = "Duplicate Files Are Not Allowed!",
18
+ UPLOAD_URL_REQUIRED = "Upload URL is required!",
19
+ }
20
+
21
+ export enum FileUploadEvent {
22
+ NILE_INIT = "nile-init",
23
+ NILE_BROWSE = "nile-browse",
24
+ NILE_DRAG = "nile-drag",
25
+ NILE_CHANGE = "nile-change",
26
+ NILE_UPLOAD_PROGRESS = "nile-upload-progress",
27
+ NILE_UPLOAD_SUCCESS = "nile-upload-success",
28
+ NILE_UPLOAD_CANCELLED = "nile-upload-cancelled",
29
+ NILE_CANCEL_UPLOAD = "nile-cancel-upload",
30
+ NILE_NETWORK_ERROR = "nile-network-error",
31
+ SERVER_SIDE_ERROR = "nile-server-error",
32
+ NILE_DESTROY = "nile-destroy"
33
+ }
34
+
35
+ export enum FileUploadDefaults {
36
+ TITLE = 'Drag and drop to upload',
37
+ SUBTITLE = 'PNG, JPG or SVG (upto 1MB) | 1:1 ratio',
38
+ ERROR_MESSAGE = 'Invalid File Format.',
39
+ };
@@ -0,0 +1,5 @@
1
+ import { PropertyValueMap } from 'lit';
2
+
3
+ export interface ChangedPropsInterface extends PropertyValueMap<any> {
4
+ [key: string]: unknown;
5
+ }
@@ -0,0 +1,2 @@
1
+ export * from './file-upload.enums';
2
+ export * from './file-upload.type'
@@ -0,0 +1,106 @@
1
+ import { FileUploadError, FileUploadState } from "../types";
2
+
3
+ export class DragHandler {
4
+ private currentState: FileUploadState = FileUploadState.DEFAULT;
5
+ private size: number = 0;
6
+ private uploadedFiles: File[] = [];
7
+
8
+ private stateChangeCallback?: (state: FileUploadState) => void;
9
+ private fileDropCallback?: (files: File[]) => void;
10
+ private errorMessageCallback?: (errorMessage: string) => void;
11
+
12
+ constructor() {}
13
+
14
+ public setErrorMessage(callback: (errorMessage: string) => void): void {
15
+ this.errorMessageCallback = callback;
16
+ }
17
+
18
+ public setValuesInDragHandler(state: FileUploadState, size: number, uploadedFiles: File[]): void {
19
+ this.currentState = state;
20
+ this.size = size;
21
+ this.uploadedFiles = uploadedFiles;
22
+ }
23
+
24
+ public onFileDrop(callback: (files: File[]) => void): void {
25
+ this.fileDropCallback = callback;
26
+ }
27
+
28
+ public onStateChange(callback: (state: FileUploadState) => void): void {
29
+ this.stateChangeCallback = callback;
30
+ }
31
+
32
+ private setState(state: FileUploadState): void {
33
+ if (this.currentState === FileUploadState.DISABLED) return;
34
+
35
+ this.currentState = state;
36
+ this.stateChangeCallback?.(state);
37
+ }
38
+
39
+ public dragEnter(e: DragEvent): void {
40
+ if (this.currentState === FileUploadState.DISABLED) return;
41
+
42
+ e.preventDefault();
43
+ this.errorMessageCallback?.("");
44
+ this.setState(FileUploadState.DRAG);
45
+ }
46
+
47
+ public dragLeave(e: DragEvent): void {
48
+ if (this.currentState === FileUploadState.DISABLED) return;
49
+
50
+ e.preventDefault();
51
+ this.setState(FileUploadState.DEFAULT);
52
+ }
53
+
54
+ public dragOver(e: DragEvent): void {
55
+ if (this.currentState === FileUploadState.DISABLED) return;
56
+
57
+ e.preventDefault();
58
+ }
59
+
60
+ public drop(e: DragEvent): void {
61
+ if (this.currentState === FileUploadState.DISABLED) return;
62
+
63
+ e.preventDefault();
64
+ e.stopPropagation();
65
+ this.setState(FileUploadState.DEFAULT);
66
+ this.handleFiles(e);
67
+ }
68
+
69
+ public handleDocumentDrop(e: DragEvent): void {
70
+ if (this.currentState === FileUploadState.DISABLED) return;
71
+
72
+ e.preventDefault();
73
+ e.stopPropagation();
74
+ this.setState(FileUploadState.DEFAULT);
75
+ }
76
+
77
+ public preventDragOver(e: DragEvent): void {
78
+ e.preventDefault();
79
+ }
80
+
81
+ public preventDrop(e: DragEvent): void {
82
+ e.preventDefault();
83
+ e.stopPropagation();
84
+ }
85
+
86
+ public handleFiles(event: Event | DragEvent): void {
87
+ if (this.currentState === FileUploadState.DISABLED) return;
88
+
89
+ event.preventDefault?.();
90
+ let files: FileList | null = null;
91
+
92
+ if ('dataTransfer' in event && event.dataTransfer) {
93
+ files = event.dataTransfer.files;
94
+ }
95
+
96
+ if (!files && event.target instanceof HTMLInputElement) {
97
+ files = event.target.files;
98
+ }
99
+
100
+ if (files && files.length > 0) {
101
+ const newFiles = Array.from(files);
102
+
103
+ this.fileDropCallback?.(newFiles);
104
+ }
105
+ }
106
+ }