@aquera/nile-elements 1.0.1-beta-1.5 → 1.0.1-beta-1.6

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 (192) hide show
  1. package/README.md +28 -0
  2. package/dist/index.cjs.js +1 -1
  3. package/dist/index.esm.js +1 -1
  4. package/dist/index.js +679 -618
  5. package/dist/internal/resizable-table-helper.cjs.js +1 -1
  6. package/dist/internal/resizable-table-helper.cjs.js.map +1 -1
  7. package/dist/internal/resizable-table-helper.esm.js +1 -1
  8. package/dist/nile-code-editor/extensionSetup.cjs.js +5 -5
  9. package/dist/nile-code-editor/extensionSetup.cjs.js.map +1 -1
  10. package/dist/nile-code-editor/extensionSetup.esm.js +1 -1
  11. package/dist/nile-code-editor/nile-code-editor.cjs.js +2 -2
  12. package/dist/nile-code-editor/nile-code-editor.cjs.js.map +1 -1
  13. package/dist/nile-code-editor/nile-code-editor.esm.js +3 -3
  14. package/dist/nile-code-editor/theme.cjs.js +1 -1
  15. package/dist/nile-code-editor/theme.cjs.js.map +1 -1
  16. package/dist/nile-code-editor/theme.esm.js +1 -1
  17. package/dist/nile-file-preview/nile-file-preview.cjs.js +1 -1
  18. package/dist/nile-file-preview/nile-file-preview.cjs.js.map +1 -1
  19. package/dist/nile-file-preview/nile-file-preview.css.cjs.js +1 -1
  20. package/dist/nile-file-preview/nile-file-preview.css.cjs.js.map +1 -1
  21. package/dist/nile-file-preview/nile-file-preview.css.esm.js +203 -184
  22. package/dist/nile-file-preview/nile-file-preview.esm.js +1 -3
  23. package/dist/nile-file-preview/nile-file-preview.template.cjs.js +1 -1
  24. package/dist/nile-file-preview/nile-file-preview.template.cjs.js.map +1 -1
  25. package/dist/nile-file-preview/nile-file-preview.template.esm.js +66 -77
  26. package/dist/nile-file-preview/types/nile-file-preview.enums.cjs.js +1 -1
  27. package/dist/nile-file-preview/types/nile-file-preview.enums.cjs.js.map +1 -1
  28. package/dist/nile-file-preview/types/nile-file-preview.enums.esm.js +1 -1
  29. package/dist/nile-file-preview/utils/index.cjs.js +1 -1
  30. package/dist/nile-file-preview/utils/index.esm.js +1 -1
  31. package/dist/nile-file-preview/utils/nile-file-preview.util.cjs.js +1 -1
  32. package/dist/nile-file-preview/utils/nile-file-preview.util.cjs.js.map +1 -1
  33. package/dist/nile-file-preview/utils/nile-file-preview.util.esm.js +1 -1
  34. package/dist/nile-file-upload/index.cjs.js +1 -1
  35. package/dist/nile-file-upload/index.esm.js +1 -1
  36. package/dist/nile-file-upload/nile-file-upload.cjs.js +1 -1
  37. package/dist/nile-file-upload/nile-file-upload.cjs.js.map +1 -1
  38. package/dist/nile-file-upload/nile-file-upload.css.cjs.js +1 -1
  39. package/dist/nile-file-upload/nile-file-upload.css.cjs.js.map +1 -1
  40. package/dist/nile-file-upload/nile-file-upload.css.esm.js +142 -89
  41. package/dist/nile-file-upload/nile-file-upload.esm.js +2 -2
  42. package/dist/nile-file-upload/nile-file-upload.template.cjs.js +3 -3
  43. package/dist/nile-file-upload/nile-file-upload.template.cjs.js.map +1 -1
  44. package/dist/nile-file-upload/nile-file-upload.template.esm.js +50 -108
  45. package/dist/nile-file-upload/nile-file-upload.test.cjs.js +1 -1
  46. package/dist/nile-file-upload/nile-file-upload.test.esm.js +1 -1
  47. package/dist/nile-file-upload/types/file-upload.enums.cjs.js +1 -1
  48. package/dist/nile-file-upload/types/file-upload.enums.cjs.js.map +1 -1
  49. package/dist/nile-file-upload/types/file-upload.enums.esm.js +1 -1
  50. package/dist/nile-file-upload/utils/drag-drop.util.cjs.js +1 -1
  51. package/dist/nile-file-upload/utils/drag-drop.util.cjs.js.map +1 -1
  52. package/dist/nile-file-upload/utils/drag-drop.util.esm.js +1 -1
  53. package/dist/nile-file-upload/utils/file-validation.util.cjs.js +2 -1
  54. package/dist/nile-file-upload/utils/file-validation.util.cjs.js.map +1 -1
  55. package/dist/nile-file-upload/utils/file-validation.util.esm.js +1 -1
  56. package/dist/nile-option/nile-option.cjs.js +1 -1
  57. package/dist/nile-option/nile-option.cjs.js.map +1 -1
  58. package/dist/nile-option/nile-option.esm.js +3 -3
  59. package/dist/nile-option-group/index.cjs.js +2 -0
  60. package/dist/nile-option-group/index.cjs.js.map +1 -0
  61. package/dist/nile-option-group/index.esm.js +1 -0
  62. package/dist/nile-option-group/nile-option-group.cjs.js +2 -0
  63. package/dist/nile-option-group/nile-option-group.cjs.js.map +1 -0
  64. package/dist/nile-option-group/nile-option-group.css.cjs.js +2 -0
  65. package/dist/nile-option-group/nile-option-group.css.cjs.js.map +1 -0
  66. package/dist/nile-option-group/nile-option-group.css.esm.js +46 -0
  67. package/dist/nile-option-group/nile-option-group.esm.js +14 -0
  68. package/dist/nile-option-group/nile-option-group.interface.cjs.js +2 -0
  69. package/dist/nile-option-group/nile-option-group.interface.cjs.js.map +1 -0
  70. package/dist/nile-option-group/nile-option-group.interface.esm.js +1 -0
  71. package/dist/nile-select/nile-select.cjs.js +1 -1
  72. package/dist/nile-select/nile-select.cjs.js.map +1 -1
  73. package/dist/nile-select/nile-select.esm.js +2 -2
  74. package/dist/nile-select/nile-select.interface.cjs.js +2 -0
  75. package/dist/nile-select/nile-select.interface.cjs.js.map +1 -0
  76. package/dist/nile-select/nile-select.interface.esm.js +1 -0
  77. package/dist/nile-table-body/nile-table-body.cjs.js +1 -1
  78. package/dist/nile-table-body/nile-table-body.cjs.js.map +1 -1
  79. package/dist/nile-table-body/nile-table-body.esm.js +2 -1
  80. package/dist/nile-table-cell-item/nile-table-cell-item.cjs.js +1 -1
  81. package/dist/nile-table-cell-item/nile-table-cell-item.cjs.js.map +1 -1
  82. package/dist/nile-table-cell-item/nile-table-cell-item.esm.js +1 -1
  83. package/dist/nile-table-header-item/nile-table-header-item.cjs.js +1 -1
  84. package/dist/nile-table-header-item/nile-table-header-item.cjs.js.map +1 -1
  85. package/dist/nile-table-header-item/nile-table-header-item.esm.js +2 -2
  86. package/dist/nile-virtual-select/renderer.cjs.js +1 -1
  87. package/dist/nile-virtual-select/renderer.cjs.js.map +1 -1
  88. package/dist/nile-virtual-select/renderer.esm.js +13 -12
  89. package/dist/src/index.d.ts +1 -0
  90. package/dist/src/index.js +1 -0
  91. package/dist/src/index.js.map +1 -1
  92. package/dist/src/internal/resizable-table-helper.d.ts +5 -0
  93. package/dist/src/internal/resizable-table-helper.js +27 -4
  94. package/dist/src/internal/resizable-table-helper.js.map +1 -1
  95. package/dist/src/nile-code-editor/nile-code-editor.d.ts +5 -0
  96. package/dist/src/nile-code-editor/nile-code-editor.js +44 -7
  97. package/dist/src/nile-code-editor/nile-code-editor.js.map +1 -1
  98. package/dist/src/nile-code-editor/theme.d.ts +15 -0
  99. package/dist/src/nile-code-editor/theme.js +17 -2
  100. package/dist/src/nile-code-editor/theme.js.map +1 -1
  101. package/dist/src/nile-file-preview/nile-file-preview.css.js +201 -182
  102. package/dist/src/nile-file-preview/nile-file-preview.css.js.map +1 -1
  103. package/dist/src/nile-file-preview/nile-file-preview.d.ts +6 -2
  104. package/dist/src/nile-file-preview/nile-file-preview.js +49 -20
  105. package/dist/src/nile-file-preview/nile-file-preview.js.map +1 -1
  106. package/dist/src/nile-file-preview/nile-file-preview.template.d.ts +3 -2
  107. package/dist/src/nile-file-preview/nile-file-preview.template.js +58 -62
  108. package/dist/src/nile-file-preview/nile-file-preview.template.js.map +1 -1
  109. package/dist/src/nile-file-preview/types/nile-file-preview.enums.d.ts +4 -3
  110. package/dist/src/nile-file-preview/types/nile-file-preview.enums.js +3 -2
  111. package/dist/src/nile-file-preview/types/nile-file-preview.enums.js.map +1 -1
  112. package/dist/src/nile-file-preview/utils/nile-file-preview.util.d.ts +4 -0
  113. package/dist/src/nile-file-preview/utils/nile-file-preview.util.js +25 -0
  114. package/dist/src/nile-file-preview/utils/nile-file-preview.util.js.map +1 -1
  115. package/dist/src/nile-file-upload/nile-file-upload.css.js +140 -87
  116. package/dist/src/nile-file-upload/nile-file-upload.css.js.map +1 -1
  117. package/dist/src/nile-file-upload/nile-file-upload.d.ts +4 -1
  118. package/dist/src/nile-file-upload/nile-file-upload.js +30 -20
  119. package/dist/src/nile-file-upload/nile-file-upload.js.map +1 -1
  120. package/dist/src/nile-file-upload/nile-file-upload.template.d.ts +7 -5
  121. package/dist/src/nile-file-upload/nile-file-upload.template.js +69 -115
  122. package/dist/src/nile-file-upload/nile-file-upload.template.js.map +1 -1
  123. package/dist/src/nile-file-upload/types/file-upload.enums.d.ts +11 -4
  124. package/dist/src/nile-file-upload/types/file-upload.enums.js +8 -1
  125. package/dist/src/nile-file-upload/types/file-upload.enums.js.map +1 -1
  126. package/dist/src/nile-file-upload/utils/drag-drop.util.d.ts +2 -4
  127. package/dist/src/nile-file-upload/utils/drag-drop.util.js +18 -21
  128. package/dist/src/nile-file-upload/utils/drag-drop.util.js.map +1 -1
  129. package/dist/src/nile-file-upload/utils/file-validation.util.d.ts +3 -1
  130. package/dist/src/nile-file-upload/utils/file-validation.util.js +82 -32
  131. package/dist/src/nile-file-upload/utils/file-validation.util.js.map +1 -1
  132. package/dist/src/nile-option/nile-option.d.ts +1 -0
  133. package/dist/src/nile-option/nile-option.js +6 -1
  134. package/dist/src/nile-option/nile-option.js.map +1 -1
  135. package/dist/src/nile-option-group/index.d.ts +1 -0
  136. package/dist/src/nile-option-group/index.js +2 -0
  137. package/dist/src/nile-option-group/index.js.map +1 -0
  138. package/dist/src/nile-option-group/nile-option-group.css.d.ts +12 -0
  139. package/dist/src/nile-option-group/nile-option-group.css.js +58 -0
  140. package/dist/src/nile-option-group/nile-option-group.css.js.map +1 -0
  141. package/dist/src/nile-option-group/nile-option-group.d.ts +23 -0
  142. package/dist/src/nile-option-group/nile-option-group.interface.d.ts +22 -0
  143. package/dist/src/nile-option-group/nile-option-group.interface.js +2 -0
  144. package/dist/src/nile-option-group/nile-option-group.interface.js.map +1 -0
  145. package/dist/src/nile-option-group/nile-option-group.js +76 -0
  146. package/dist/src/nile-option-group/nile-option-group.js.map +1 -0
  147. package/dist/src/nile-select/nile-select.d.ts +6 -0
  148. package/dist/src/nile-select/nile-select.interface.d.ts +5 -0
  149. package/dist/src/nile-select/nile-select.interface.js +2 -0
  150. package/dist/src/nile-select/nile-select.interface.js.map +1 -0
  151. package/dist/src/nile-select/nile-select.js +59 -1
  152. package/dist/src/nile-select/nile-select.js.map +1 -1
  153. package/dist/src/nile-table-body/nile-table-body.d.ts +1 -0
  154. package/dist/src/nile-table-body/nile-table-body.js +4 -0
  155. package/dist/src/nile-table-body/nile-table-body.js.map +1 -1
  156. package/dist/src/nile-table-cell-item/nile-table-cell-item.d.ts +2 -1
  157. package/dist/src/nile-table-cell-item/nile-table-cell-item.js +12 -1
  158. package/dist/src/nile-table-cell-item/nile-table-cell-item.js.map +1 -1
  159. package/dist/src/nile-table-header-item/nile-table-header-item.d.ts +2 -1
  160. package/dist/src/nile-table-header-item/nile-table-header-item.js +12 -1
  161. package/dist/src/nile-table-header-item/nile-table-header-item.js.map +1 -1
  162. package/dist/src/nile-virtual-select/renderer.js +3 -0
  163. package/dist/src/nile-virtual-select/renderer.js.map +1 -1
  164. package/dist/tsconfig.tsbuildinfo +1 -1
  165. package/package.json +3 -2
  166. package/src/index.ts +1 -1
  167. package/src/internal/resizable-table-helper.ts +31 -8
  168. package/src/nile-code-editor/nile-code-editor.ts +49 -9
  169. package/src/nile-code-editor/theme.ts +19 -3
  170. package/src/nile-file-preview/nile-file-preview.css.ts +202 -183
  171. package/src/nile-file-preview/nile-file-preview.template.ts +66 -63
  172. package/src/nile-file-preview/nile-file-preview.ts +54 -22
  173. package/src/nile-file-preview/types/nile-file-preview.enums.ts +4 -3
  174. package/src/nile-file-preview/utils/nile-file-preview.util.ts +25 -0
  175. package/src/nile-file-upload/nile-file-upload.css.ts +141 -88
  176. package/src/nile-file-upload/nile-file-upload.template.ts +133 -121
  177. package/src/nile-file-upload/nile-file-upload.ts +30 -18
  178. package/src/nile-file-upload/types/file-upload.enums.ts +9 -2
  179. package/src/nile-file-upload/utils/drag-drop.util.ts +25 -25
  180. package/src/nile-file-upload/utils/file-validation.util.ts +98 -45
  181. package/src/nile-option/nile-option.ts +4 -1
  182. package/src/nile-option-group/index.ts +1 -0
  183. package/src/nile-option-group/nile-option-group.css.ts +60 -0
  184. package/src/nile-option-group/nile-option-group.interface.ts +25 -0
  185. package/src/nile-option-group/nile-option-group.ts +84 -0
  186. package/src/nile-select/nile-select.interface.ts +5 -0
  187. package/src/nile-select/nile-select.ts +74 -2
  188. package/src/nile-table-body/nile-table-body.ts +2 -0
  189. package/src/nile-table-cell-item/nile-table-cell-item.ts +15 -1
  190. package/src/nile-table-header-item/nile-table-header-item.ts +15 -1
  191. package/src/nile-virtual-select/renderer.ts +3 -0
  192. package/vscode-html-custom-data.json +49 -13
@@ -1,14 +1,12 @@
1
1
  import { FileUploadState } from "../types";
2
2
  export declare class DragHandler {
3
3
  private currentState;
4
- private size;
5
- private uploadedFiles;
6
4
  private stateChangeCallback?;
7
5
  private fileDropCallback?;
8
6
  private errorMessageCallback?;
9
7
  constructor();
10
8
  setErrorMessage(callback: (errorMessage: string) => void): void;
11
- setValuesInDragHandler(state: FileUploadState, size: number, uploadedFiles: File[]): void;
9
+ setValuesInDragHandler(state: FileUploadState): void;
12
10
  onFileDrop(callback: (files: File[]) => void): void;
13
11
  onStateChange(callback: (state: FileUploadState) => void): void;
14
12
  private setState;
@@ -19,5 +17,5 @@ export declare class DragHandler {
19
17
  handleDocumentDrop(e: DragEvent): void;
20
18
  preventDragOver(e: DragEvent): void;
21
19
  preventDrop(e: DragEvent): void;
22
- handleFiles(event: Event | DragEvent): void;
20
+ handleFiles(e: Event | DragEvent): void;
23
21
  }
@@ -1,17 +1,14 @@
1
+ import { preventDefaultAndStopPropagation } from "./file-validation.util";
1
2
  import { FileUploadState } from "../types";
2
3
  export class DragHandler {
3
4
  constructor() {
4
5
  this.currentState = FileUploadState.DEFAULT;
5
- this.size = 0;
6
- this.uploadedFiles = [];
7
6
  }
8
7
  setErrorMessage(callback) {
9
8
  this.errorMessageCallback = callback;
10
9
  }
11
- setValuesInDragHandler(state, size, uploadedFiles) {
10
+ setValuesInDragHandler(state) {
12
11
  this.currentState = state;
13
- this.size = size;
14
- this.uploadedFiles = uploadedFiles;
15
12
  }
16
13
  onFileDrop(callback) {
17
14
  this.fileDropCallback = callback;
@@ -26,60 +23,60 @@ export class DragHandler {
26
23
  this.stateChangeCallback?.(state);
27
24
  }
28
25
  dragEnter(e) {
26
+ preventDefaultAndStopPropagation(e);
29
27
  if (this.currentState === FileUploadState.DISABLED)
30
28
  return;
31
- e.preventDefault();
32
29
  this.errorMessageCallback?.("");
33
30
  this.setState(FileUploadState.DRAG);
34
31
  }
35
32
  dragLeave(e) {
33
+ preventDefaultAndStopPropagation(e);
36
34
  if (this.currentState === FileUploadState.DISABLED)
37
35
  return;
38
- e.preventDefault();
39
36
  this.setState(FileUploadState.DEFAULT);
40
37
  }
41
38
  dragOver(e) {
39
+ preventDefaultAndStopPropagation(e);
42
40
  if (this.currentState === FileUploadState.DISABLED)
43
41
  return;
44
- e.preventDefault();
45
42
  }
46
43
  drop(e) {
44
+ preventDefaultAndStopPropagation(e);
47
45
  if (this.currentState === FileUploadState.DISABLED)
48
46
  return;
49
- e.preventDefault();
50
- e.stopPropagation();
51
47
  this.setState(FileUploadState.DEFAULT);
52
48
  this.handleFiles(e);
53
49
  }
54
50
  handleDocumentDrop(e) {
55
51
  if (this.currentState === FileUploadState.DISABLED)
56
52
  return;
57
- e.preventDefault();
58
- e.stopPropagation();
53
+ preventDefaultAndStopPropagation(e);
59
54
  this.setState(FileUploadState.DEFAULT);
60
55
  }
61
56
  preventDragOver(e) {
62
- e.preventDefault();
57
+ preventDefaultAndStopPropagation(e);
63
58
  }
64
59
  preventDrop(e) {
65
- e.preventDefault();
66
- e.stopPropagation();
60
+ preventDefaultAndStopPropagation(e);
67
61
  }
68
- handleFiles(event) {
62
+ handleFiles(e) {
63
+ preventDefaultAndStopPropagation(e);
69
64
  if (this.currentState === FileUploadState.DISABLED)
70
65
  return;
71
- event.preventDefault?.();
72
66
  let files = null;
73
- if ('dataTransfer' in event && event.dataTransfer) {
74
- files = event.dataTransfer.files;
67
+ if ('dataTransfer' in e && e.dataTransfer) {
68
+ files = e.dataTransfer.files;
75
69
  }
76
- if (!files && event.target instanceof HTMLInputElement) {
77
- files = event.target.files;
70
+ if (!files && e.target instanceof HTMLInputElement) {
71
+ files = e.target.files;
78
72
  }
79
73
  if (files && files.length > 0) {
80
74
  const newFiles = Array.from(files);
81
75
  this.fileDropCallback?.(newFiles);
82
76
  }
77
+ if (e.target instanceof HTMLInputElement) {
78
+ e.target.value = "";
79
+ }
83
80
  }
84
81
  }
85
82
  //# sourceMappingURL=drag-drop.util.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"drag-drop.util.js","sourceRoot":"","sources":["../../../../src/nile-file-upload/utils/drag-drop.util.ts"],"names":[],"mappings":"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","sourcesContent":["import { FileUploadError, FileUploadState } from \"../types\";\n\nexport class DragHandler {\n private currentState: FileUploadState = FileUploadState.DEFAULT;\n private size: number = 0;\n private uploadedFiles: File[] = [];\n\n private stateChangeCallback?: (state: FileUploadState) => void;\n private fileDropCallback?: (files: File[]) => void;\n private errorMessageCallback?: (errorMessage: string) => void;\n\n constructor() {}\n\n public setErrorMessage(callback: (errorMessage: string) => void): void {\n this.errorMessageCallback = callback;\n }\n\n public setValuesInDragHandler(state: FileUploadState, size: number, uploadedFiles: File[]): void {\n this.currentState = state;\n this.size = size;\n this.uploadedFiles = uploadedFiles;\n }\n\n public onFileDrop(callback: (files: File[]) => void): void {\n this.fileDropCallback = callback;\n }\n\n public onStateChange(callback: (state: FileUploadState) => void): void {\n this.stateChangeCallback = callback;\n }\n\n private setState(state: FileUploadState): void {\n if (this.currentState === FileUploadState.DISABLED) return;\n\n this.currentState = state;\n this.stateChangeCallback?.(state);\n }\n\n public dragEnter(e: DragEvent): void {\n if (this.currentState === FileUploadState.DISABLED) return;\n\n e.preventDefault();\n this.errorMessageCallback?.(\"\");\n this.setState(FileUploadState.DRAG);\n }\n\n public dragLeave(e: DragEvent): void {\n if (this.currentState === FileUploadState.DISABLED) return;\n\n e.preventDefault();\n this.setState(FileUploadState.DEFAULT);\n }\n\n public dragOver(e: DragEvent): void {\n if (this.currentState === FileUploadState.DISABLED) return;\n\n e.preventDefault();\n }\n\n public drop(e: DragEvent): void {\n if (this.currentState === FileUploadState.DISABLED) return;\n\n e.preventDefault();\n e.stopPropagation();\n this.setState(FileUploadState.DEFAULT);\n this.handleFiles(e);\n }\n\n public handleDocumentDrop(e: DragEvent): void {\n if (this.currentState === FileUploadState.DISABLED) return;\n\n e.preventDefault();\n e.stopPropagation();\n this.setState(FileUploadState.DEFAULT);\n }\n\n public preventDragOver(e: DragEvent): void {\n e.preventDefault();\n }\n\n public preventDrop(e: DragEvent): void {\n e.preventDefault();\n e.stopPropagation();\n }\n\n public handleFiles(event: Event | DragEvent): void {\n if (this.currentState === FileUploadState.DISABLED) return;\n\n event.preventDefault?.();\n let files: FileList | null = null;\n\n if ('dataTransfer' in event && event.dataTransfer) {\n files = event.dataTransfer.files;\n }\n\n if (!files && event.target instanceof HTMLInputElement) {\n files = event.target.files;\n }\n\n if (files && files.length > 0) {\n const newFiles = Array.from(files);\n\n this.fileDropCallback?.(newFiles);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"drag-drop.util.js","sourceRoot":"","sources":["../../../../src/nile-file-upload/utils/drag-drop.util.ts"],"names":[],"mappings":"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","sourcesContent":["import { preventDefaultAndStopPropagation } from \"./file-validation.util\";\nimport { FileUploadState } from \"../types\";\n\nexport class DragHandler {\n private currentState: FileUploadState = FileUploadState.DEFAULT;\n\n private stateChangeCallback?: (state: FileUploadState) => void;\n private fileDropCallback?: (files: File[]) => void;\n private errorMessageCallback?: (errorMessage: string) => void;\n\n constructor() {}\n\n public setErrorMessage(callback: (errorMessage: string) => void): void {\n this.errorMessageCallback = callback;\n }\n\n public setValuesInDragHandler(state: FileUploadState): void {\n this.currentState = state;\n }\n\n public onFileDrop(callback: (files: File[]) => void): void {\n this.fileDropCallback = callback;\n }\n\n public onStateChange(callback: (state: FileUploadState) => void): void {\n this.stateChangeCallback = callback;\n }\n\n private setState(state: FileUploadState): void {\n if (this.currentState === FileUploadState.DISABLED) return;\n\n this.currentState = state;\n this.stateChangeCallback?.(state);\n }\n\n public dragEnter(e: DragEvent): void {\n preventDefaultAndStopPropagation(e);\n\n if (this.currentState === FileUploadState.DISABLED) return;\n this.errorMessageCallback?.(\"\");\n this.setState(FileUploadState.DRAG);\n }\n\n public dragLeave(e: DragEvent): void {\n preventDefaultAndStopPropagation(e);\n \n if (this.currentState === FileUploadState.DISABLED) return;\n\n this.setState(FileUploadState.DEFAULT);\n }\n\n public dragOver(e: DragEvent): void {\n preventDefaultAndStopPropagation(e);\n \n if (this.currentState === FileUploadState.DISABLED) return;\n }\n\n public drop(e: DragEvent): void {\n preventDefaultAndStopPropagation(e);\n \n if (this.currentState === FileUploadState.DISABLED) return;\n this.setState(FileUploadState.DEFAULT);\n this.handleFiles(e);\n }\n\n public handleDocumentDrop(e: DragEvent): void {\n if (this.currentState === FileUploadState.DISABLED) return;\n\n preventDefaultAndStopPropagation(e);\n \n this.setState(FileUploadState.DEFAULT);\n }\n\n public preventDragOver(e: DragEvent): void {\n preventDefaultAndStopPropagation(e); \n }\n\n public preventDrop(e: DragEvent): void {\n preventDefaultAndStopPropagation(e); \n }\n\n public handleFiles(e: Event | DragEvent): void {\n preventDefaultAndStopPropagation(e);\n if (this.currentState === FileUploadState.DISABLED) return;\n\n let files: FileList | null = null;\n\n if ('dataTransfer' in e && e.dataTransfer) {\n files = e.dataTransfer.files;\n }\n\n if (!files && e.target instanceof HTMLInputElement) {\n files = e.target.files;\n }\n\n if (files && files.length > 0) {\n const newFiles = Array.from(files);\n\n this.fileDropCallback?.(newFiles);\n }\n\n if(e.target instanceof HTMLInputElement) {\n e.target.value = \"\";\n }\n }\n}\n"]}
@@ -1,7 +1,6 @@
1
1
  import { DragHandler } from "./drag-drop.util";
2
2
  import { FileUploadState } from "../types";
3
3
  import { NileFileUpload } from "../nile-file-upload";
4
- export declare const areDuplicates: (files: File[], uploadedFiles: File[]) => boolean;
5
4
  export declare const setUpDragHandler: (nileFileUpload: NileFileUpload, dragHandler: DragHandler) => void;
6
5
  export declare const addGlobalListeners: (dragHandler: DragHandler) => void;
7
6
  export declare const addInternalListeners: (nileFileUpload: NileFileUpload, dragHandler: DragHandler, uploadRequests: any) => void;
@@ -9,3 +8,6 @@ export declare function handleHoverIn(setState: (state: FileUploadState) => void
9
8
  export declare function handleHoverOut(setState: (state: FileUploadState) => void, currentState: FileUploadState): void;
10
9
  export declare function uploadFiles(nileFileUpload: NileFileUpload): void;
11
10
  export declare const cancelFileUpload: (nileFileUpload: NileFileUpload, uploadRequests: Map<File, XMLHttpRequest>) => void;
11
+ export declare const preventDefaultAndStopPropagation: (event: Event | DragEvent) => void;
12
+ export declare const removeFile: (uploadedFiles: File[], nileFileUpload: NileFileUpload) => void;
13
+ export declare const truncateString: (nileFileUpload: NileFileUpload) => void;
@@ -1,49 +1,64 @@
1
1
  import { FileUploadState, FileUploadError, FileUploadEvent } from "../types";
2
- // write a function to check for duplicatse in the files name it as areDuplicates
3
- export const areDuplicates = (files, uploadedFiles) => {
4
- return files.some(file => uploadedFiles.some(existing => file.name === existing.name &&
5
- file.size === existing.size &&
6
- file.lastModified === existing.lastModified));
7
- };
8
- // set up the drag handler
9
2
  export const setUpDragHandler = (nileFileUpload, dragHandler) => {
10
3
  dragHandler.onStateChange((newState) => {
11
4
  nileFileUpload.state = newState;
12
5
  });
13
6
  dragHandler.onFileDrop((files) => {
14
- let { allowMultiple, uploadedFiles, errorMessage, requestUpdate } = nileFileUpload;
15
- if (!allowMultiple) {
16
- const total = uploadedFiles.length + files.length;
17
- if (total > 1) {
18
- errorMessage = FileUploadError.MULTIPLE_NOT_ALLOWED;
19
- requestUpdate();
20
- return;
21
- }
7
+ const maxSize = parseSize(nileFileUpload.size);
8
+ const uploadedFiles = nileFileUpload.uploadedFiles;
9
+ if (!nileFileUpload.allowMultiple && (uploadedFiles.length + files.length > 1)) {
10
+ nileFileUpload.errorMessage = FileUploadError.MULTIPLE_NOT_ALLOWED;
11
+ console.error(nileFileUpload.errorMessage);
12
+ nileFileUpload.requestUpdate();
13
+ return;
22
14
  }
23
- let newFiles = files;
24
- if (!nileFileUpload.allowDuplicates) {
25
- newFiles = files.filter(file => !nileFileUpload.uploadedFiles.some(uploaded => uploaded.name === file.name &&
26
- uploaded.size === file.size &&
27
- uploaded.type === file.type));
28
- if (newFiles.length === 0) {
29
- nileFileUpload.errorMessage = FileUploadError.DUPLICATES_NOT_ALLOWED;
30
- nileFileUpload.requestUpdate();
31
- return;
15
+ let sizeExceeded = false;
16
+ let duplicatesFound = false;
17
+ const newFiles = [];
18
+ const rejectedFiles = [];
19
+ for (const file of files) {
20
+ if (file.size > maxSize) {
21
+ sizeExceeded = true;
22
+ rejectedFiles.push(file);
23
+ continue;
24
+ }
25
+ if (!nileFileUpload.allowDuplicates &&
26
+ uploadedFiles.some((uploaded) => uploaded.name === file.name &&
27
+ uploaded.size === file.size &&
28
+ uploaded.type === file.type)) {
29
+ duplicatesFound = true;
30
+ rejectedFiles.push(file);
31
+ continue;
32
+ }
33
+ if (!rejectedFiles.includes(file)) {
34
+ newFiles.push(file);
32
35
  }
33
36
  }
34
- nileFileUpload.uploadedFiles = [...nileFileUpload.uploadedFiles, ...newFiles];
37
+ if (sizeExceeded) {
38
+ nileFileUpload.errorMessage = FileUploadError.SIZE_LIMIT_EXCEEDED;
39
+ console.error(nileFileUpload.errorMessage);
40
+ nileFileUpload.requestUpdate();
41
+ nileFileUpload.dispatchEvent(new CustomEvent(FileUploadEvent.NILE_SIZE_EXCEED_FILES, {
42
+ detail: { files: rejectedFiles }
43
+ }));
44
+ }
45
+ if (duplicatesFound && newFiles.length === 0) {
46
+ nileFileUpload.errorMessage = FileUploadError.DUPLICATES_NOT_ALLOWED;
47
+ console.error(nileFileUpload.errorMessage);
48
+ nileFileUpload.requestUpdate();
49
+ }
50
+ nileFileUpload.uploadedFiles = [...uploadedFiles, ...newFiles];
35
51
  nileFileUpload.requestUpdate();
36
52
  });
37
53
  dragHandler.setErrorMessage((errorMessage) => {
54
+ console.error(nileFileUpload.errorMessage);
38
55
  nileFileUpload.errorMessage = errorMessage;
39
56
  });
40
57
  };
41
- // global listenrers
42
58
  export const addGlobalListeners = (dragHandler) => {
43
59
  document.addEventListener('dragover', dragHandler.preventDragOver, { passive: false });
44
60
  document.addEventListener('drop', dragHandler.preventDrop, { passive: false });
45
61
  };
46
- // for hover & dragging functionality
47
62
  export const addInternalListeners = (nileFileUpload, dragHandler, uploadRequests) => {
48
63
  nileFileUpload.addEventListener('mouseenter', (e) => handleHoverIn(nileFileUpload.setState, nileFileUpload.state));
49
64
  nileFileUpload.addEventListener('mouseleave', (e) => handleHoverOut(nileFileUpload.setState, nileFileUpload.state));
@@ -52,6 +67,7 @@ export const addInternalListeners = (nileFileUpload, dragHandler, uploadRequests
52
67
  nileFileUpload.addEventListener('dragover', (e) => dragHandler.dragOver(e));
53
68
  nileFileUpload.addEventListener('drop', (e) => dragHandler.drop(e));
54
69
  cancelFileUpload(nileFileUpload, uploadRequests);
70
+ removeFile(nileFileUpload.uploadedFiles, nileFileUpload);
55
71
  };
56
72
  export function handleHoverIn(setState, currentState) {
57
73
  if (currentState === FileUploadState.DEFAULT) {
@@ -68,10 +84,13 @@ export function uploadFiles(nileFileUpload) {
68
84
  if (!fileUploadUrl || !uploadedFiles?.length)
69
85
  return;
70
86
  for (const file of uploadedFiles) {
87
+ if (uploadRequests.has(file))
88
+ continue;
71
89
  const formData = new FormData();
72
90
  formData.append('file', file);
73
91
  const xhr = new XMLHttpRequest();
74
92
  uploadRequests.set(file, xhr);
93
+ nileFileUpload.emit(FileUploadEvent.NILE_UPLOADING);
75
94
  xhr.upload.onprogress = (e) => {
76
95
  const percent = Math.floor((e.loaded / e.total) * 100);
77
96
  nileFileUpload.dispatchEvent(new CustomEvent(FileUploadEvent.NILE_UPLOAD_PROGRESS, {
@@ -79,15 +98,14 @@ export function uploadFiles(nileFileUpload) {
79
98
  }));
80
99
  };
81
100
  xhr.onload = () => {
82
- uploadRequests.delete(file);
83
- if (xhr.status === 201) {
84
- // Remove the successfully uploaded file
85
- nileFileUpload.uploadedFiles = nileFileUpload.uploadedFiles.filter(f => f !== file);
101
+ if (xhr.status >= 200 && xhr.status < 300) {
86
102
  nileFileUpload.dispatchEvent(new CustomEvent(FileUploadEvent.NILE_UPLOAD_SUCCESS, {
87
103
  detail: { file, response: xhr.response }
88
104
  }));
89
105
  }
90
106
  else {
107
+ nileFileUpload.errorMessage = FileUploadError.SERVER_SIDE_ERROR;
108
+ nileFileUpload.requestUpdate();
91
109
  nileFileUpload.dispatchEvent(new CustomEvent(FileUploadEvent.SERVER_SIDE_ERROR, {
92
110
  detail: { file, status: xhr.status, response: xhr.response }
93
111
  }));
@@ -95,8 +113,11 @@ export function uploadFiles(nileFileUpload) {
95
113
  };
96
114
  xhr.onerror = () => {
97
115
  uploadRequests.delete(file);
116
+ nileFileUpload.errorMessage = FileUploadError.NETWORK_ERROR;
98
117
  nileFileUpload.dispatchEvent(new CustomEvent(FileUploadEvent.NILE_NETWORK_ERROR, {
99
- detail: { file, status: xhr.status, response: xhr.response }
118
+ detail: { file, status: xhr.status, response: xhr.response },
119
+ bubbles: true,
120
+ composed: true,
100
121
  }));
101
122
  };
102
123
  xhr.open('POST', fileUploadUrl);
@@ -117,4 +138,33 @@ export const cancelFileUpload = (nileFileUpload, uploadRequests) => {
117
138
  }));
118
139
  });
119
140
  };
141
+ function parseSize(sizeStr) {
142
+ const units = { B: 1, KB: 1024, MB: 1024 ** 2, GB: 1024 ** 3 };
143
+ const num = parseFloat(sizeStr);
144
+ const unit = sizeStr.replace(/[0-9.\s]/g, '').toUpperCase();
145
+ const multiplier = units[unit] || 1;
146
+ return num * multiplier;
147
+ }
148
+ export const preventDefaultAndStopPropagation = (event) => {
149
+ event.preventDefault?.();
150
+ event.stopPropagation();
151
+ };
152
+ export const removeFile = (uploadedFiles, nileFileUpload) => {
153
+ document.addEventListener('nile-remove', (e) => {
154
+ const { value } = e.detail;
155
+ uploadedFiles = uploadedFiles.filter(file => file !== value);
156
+ nileFileUpload.uploadedFiles = uploadedFiles;
157
+ nileFileUpload.requestUpdate();
158
+ });
159
+ };
160
+ export const truncateString = (nileFileUpload) => {
161
+ if (nileFileUpload.variant === 'vertical' && nileFileUpload.errorMessage.length > 34) {
162
+ nileFileUpload.isStringTruncated = true;
163
+ nileFileUpload.requestUpdate();
164
+ }
165
+ else if (nileFileUpload.variant === 'horizontal' && nileFileUpload.errorMessage.length > 96) {
166
+ nileFileUpload.isStringTruncated = true;
167
+ nileFileUpload.requestUpdate();
168
+ }
169
+ };
120
170
  //# sourceMappingURL=file-validation.util.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"file-validation.util.js","sourceRoot":"","sources":["../../../../src/nile-file-upload/utils/file-validation.util.ts"],"names":[],"mappings":"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","sourcesContent":["import { DragHandler } from \"./drag-drop.util\";\nimport { FileUploadState, FileUploadError, FileUploadEvent } from \"../types\";\nimport { NileFileUpload } from \"../nile-file-upload\";\n\n// write a function to check for duplicatse in the files name it as areDuplicates\nexport const areDuplicates = (files: File[], uploadedFiles: File[]): boolean => {\n return files.some(file =>\n uploadedFiles.some(existing =>\n file.name === existing.name &&\n file.size === existing.size &&\n file.lastModified === existing.lastModified\n )\n );\n};\n\n// set up the drag handler\nexport const setUpDragHandler = (\n nileFileUpload: NileFileUpload,\n dragHandler: DragHandler\n): void => {\n dragHandler.onStateChange((newState: FileUploadState) => {\n nileFileUpload.state = newState;\n });\n\n dragHandler.onFileDrop((files: File[]) => {\n let { allowMultiple, uploadedFiles, errorMessage, requestUpdate } = nileFileUpload;\n\n if (!allowMultiple) {\n const total = uploadedFiles.length + files.length;\n if (total > 1) {\n errorMessage = FileUploadError.MULTIPLE_NOT_ALLOWED;\n requestUpdate();\n return;\n }\n }\n\n let newFiles = files;\n\n if (!nileFileUpload.allowDuplicates) {\n newFiles = files.filter(file =>\n !nileFileUpload.uploadedFiles.some(\n uploaded =>\n uploaded.name === file.name &&\n uploaded.size === file.size &&\n uploaded.type === file.type\n )\n );\n\n if (newFiles.length === 0) {\n nileFileUpload.errorMessage = FileUploadError.DUPLICATES_NOT_ALLOWED;\n nileFileUpload.requestUpdate();\n return;\n }\n }\n\n nileFileUpload.uploadedFiles = [...nileFileUpload.uploadedFiles, ...newFiles];\n nileFileUpload.requestUpdate();\n });\n\n dragHandler.setErrorMessage((errorMessage: string) => {\n nileFileUpload.errorMessage = errorMessage;\n });\n};\n\n\n// global listenrers\nexport const addGlobalListeners = (dragHandler: DragHandler): void => {\n document.addEventListener('dragover', dragHandler.preventDragOver, { passive: false });\n document.addEventListener('drop', dragHandler.preventDrop, { passive: false });\n}\n\n// for hover & dragging functionality\nexport const addInternalListeners = (nileFileUpload: NileFileUpload, dragHandler: DragHandler, uploadRequests: any): void => {\n nileFileUpload.addEventListener('mouseenter', (e) => handleHoverIn(nileFileUpload.setState, nileFileUpload.state));\n nileFileUpload.addEventListener('mouseleave', (e) => handleHoverOut(nileFileUpload.setState, nileFileUpload.state));\n nileFileUpload.addEventListener('dragenter', (e) => dragHandler.dragEnter(e));\n nileFileUpload.addEventListener('dragleave', (e) => dragHandler.dragLeave(e));\n nileFileUpload.addEventListener('dragover', (e) => dragHandler.dragOver(e));\n nileFileUpload.addEventListener('drop', (e) => dragHandler.drop(e)); \n\n cancelFileUpload(nileFileUpload, uploadRequests);\n}\n\nexport function handleHoverIn(\n setState: (state: FileUploadState) => void,\n currentState: FileUploadState\n): void {\n if (currentState === FileUploadState.DEFAULT) {\n setState(FileUploadState.HOVER);\n }\n}\n\nexport function handleHoverOut(\n setState: (state: FileUploadState) => void,\n currentState: FileUploadState\n): void {\n if (currentState === FileUploadState.HOVER) {\n setState(FileUploadState.DEFAULT);\n }\n}\n\nexport function uploadFiles(nileFileUpload: NileFileUpload) {\n const { uploadedFiles, fileUploadUrl, uploadRequests } = nileFileUpload;\n if (!fileUploadUrl || !uploadedFiles?.length) return;\n\n for (const file of uploadedFiles) {\n const formData = new FormData();\n formData.append('file', file);\n\n const xhr = new XMLHttpRequest();\n uploadRequests.set(file, xhr);\n\n xhr.upload.onprogress = (e) => {\n const percent = Math.floor((e.loaded / e.total) * 100);\n nileFileUpload.dispatchEvent(new CustomEvent(FileUploadEvent.NILE_UPLOAD_PROGRESS, {\n detail: { file, progress: percent }\n }));\n };\n\n xhr.onload = () => {\n uploadRequests.delete(file);\n if (xhr.status === 201) {\n // Remove the successfully uploaded file\n nileFileUpload.uploadedFiles = nileFileUpload.uploadedFiles.filter(f => f !== file);\n\n nileFileUpload.dispatchEvent(new CustomEvent(FileUploadEvent.NILE_UPLOAD_SUCCESS, {\n detail: { file, response: xhr.response }\n }));\n } else {\n nileFileUpload.dispatchEvent(new CustomEvent(FileUploadEvent.SERVER_SIDE_ERROR, {\n detail: { file, status: xhr.status, response: xhr.response }\n }));\n }\n };\n\n xhr.onerror = () => {\n uploadRequests.delete(file);\n nileFileUpload.dispatchEvent(new CustomEvent(FileUploadEvent.NILE_NETWORK_ERROR, {\n detail: { file, status: xhr.status, response: xhr.response }\n }));\n };\n\n xhr.open('POST', fileUploadUrl);\n xhr.send(formData);\n }\n}\n\nexport const cancelFileUpload = (nileFileUpload: NileFileUpload, uploadRequests: Map<File, XMLHttpRequest>) => {\n document.addEventListener(FileUploadEvent.NILE_CANCEL_UPLOAD, (e: CustomEvent) => {\n const fileToCancel = e.detail.file;\n const xhr = uploadRequests.get(fileToCancel);\n\n if (xhr) {\n xhr.abort();\n }\n uploadRequests.delete(fileToCancel);\n nileFileUpload.uploadedFiles = nileFileUpload.uploadedFiles.filter(file => file !== fileToCancel);\n\n nileFileUpload.dispatchEvent(new CustomEvent(FileUploadEvent.NILE_UPLOAD_CANCELLED, {\n detail: { file: fileToCancel }\n }));\n });\n};\n"]}
1
+ {"version":3,"file":"file-validation.util.js","sourceRoot":"","sources":["../../../../src/nile-file-upload/utils/file-validation.util.ts"],"names":[],"mappings":"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","sourcesContent":["import { DragHandler } from \"./drag-drop.util\";\nimport { FileUploadState, FileUploadError, FileUploadEvent } from \"../types\";\nimport { NileFileUpload } from \"../nile-file-upload\";\nimport { RemoveFileDetail } from \"../../nile-file-preview/types\";\n\nexport const setUpDragHandler = (\n nileFileUpload: NileFileUpload,\n dragHandler: DragHandler,\n): void => {\n dragHandler.onStateChange((newState: FileUploadState) => {\n nileFileUpload.state = newState;\n });\n\n dragHandler.onFileDrop((files: File[]) => {\n const maxSize = parseSize(nileFileUpload.size);\n const uploadedFiles = nileFileUpload.uploadedFiles;\n \n if (!nileFileUpload.allowMultiple && (uploadedFiles.length + files.length > 1)) {\n nileFileUpload.errorMessage = FileUploadError.MULTIPLE_NOT_ALLOWED;\n console.error(nileFileUpload.errorMessage);\n nileFileUpload.requestUpdate();\n return;\n }\n \n let sizeExceeded = false;\n let duplicatesFound = false;\n const newFiles: File[] = [];\n const rejectedFiles: File[] = [];\n \n for (const file of files) {\n if (file.size > maxSize) {\n sizeExceeded = true;\n rejectedFiles.push(file);\n continue;\n }\n \n if (\n !nileFileUpload.allowDuplicates &&\n uploadedFiles.some(\n (uploaded) =>\n uploaded.name === file.name &&\n uploaded.size === file.size &&\n uploaded.type === file.type\n )\n ) {\n duplicatesFound = true;\n rejectedFiles.push(file);\n continue;\n }\n \n if(!rejectedFiles.includes(file)) {\n newFiles.push(file);\n }\n }\n\n if (sizeExceeded) {\n nileFileUpload.errorMessage = FileUploadError.SIZE_LIMIT_EXCEEDED;\n console.error(nileFileUpload.errorMessage);\n nileFileUpload.requestUpdate();\n nileFileUpload.dispatchEvent(new CustomEvent(FileUploadEvent.NILE_SIZE_EXCEED_FILES, {\n detail: { files: rejectedFiles }\n }));\n }\n \n if (duplicatesFound && newFiles.length === 0) {\n nileFileUpload.errorMessage = FileUploadError.DUPLICATES_NOT_ALLOWED;\n console.error(nileFileUpload.errorMessage);\n nileFileUpload.requestUpdate();\n }\n \n nileFileUpload.uploadedFiles = [...uploadedFiles, ...newFiles];\n nileFileUpload.requestUpdate();\n });\n \n\n dragHandler.setErrorMessage((errorMessage: string) => {\n console.error(nileFileUpload.errorMessage);\n nileFileUpload.errorMessage = errorMessage;\n });\n};\n\nexport const addGlobalListeners = (dragHandler: DragHandler): void => {\n document.addEventListener('dragover', dragHandler.preventDragOver, { passive: false });\n document.addEventListener('drop', dragHandler.preventDrop, { passive: false });\n}\n\nexport const addInternalListeners = (nileFileUpload: NileFileUpload, dragHandler: DragHandler, uploadRequests: any): void => {\n nileFileUpload.addEventListener('mouseenter', (e) => handleHoverIn(nileFileUpload.setState, nileFileUpload.state));\n nileFileUpload.addEventListener('mouseleave', (e) => handleHoverOut(nileFileUpload.setState, nileFileUpload.state));\n nileFileUpload.addEventListener('dragenter', (e) => dragHandler.dragEnter(e));\n nileFileUpload.addEventListener('dragleave', (e) => dragHandler.dragLeave(e));\n nileFileUpload.addEventListener('dragover', (e) => dragHandler.dragOver(e));\n nileFileUpload.addEventListener('drop', (e) => dragHandler.drop(e)); \n\n cancelFileUpload(nileFileUpload, uploadRequests);\n removeFile(nileFileUpload.uploadedFiles, nileFileUpload);\n}\n\nexport function handleHoverIn(\n setState: (state: FileUploadState) => void,\n currentState: FileUploadState\n): void {\n if (currentState === FileUploadState.DEFAULT) {\n setState(FileUploadState.HOVER);\n }\n}\n\nexport function handleHoverOut(\n setState: (state: FileUploadState) => void,\n currentState: FileUploadState\n): void {\n if (currentState === FileUploadState.HOVER) {\n setState(FileUploadState.DEFAULT);\n }\n}\n\nexport function uploadFiles(nileFileUpload: NileFileUpload) {\n const { uploadedFiles, fileUploadUrl, uploadRequests } = nileFileUpload;\n if (!fileUploadUrl || !uploadedFiles?.length) return;\n\n for (const file of uploadedFiles) {\n if (uploadRequests.has(file)) continue;\n \n const formData = new FormData();\n formData.append('file', file);\n\n const xhr = new XMLHttpRequest();\n uploadRequests.set(file, xhr);\n\n nileFileUpload.emit(FileUploadEvent.NILE_UPLOADING);\n\n xhr.upload.onprogress = (e) => {\n const percent = Math.floor((e.loaded / e.total) * 100);\n \n nileFileUpload.dispatchEvent(new CustomEvent(FileUploadEvent.NILE_UPLOAD_PROGRESS, {\n detail: { file, progress: percent }\n }));\n };\n\n xhr.onload = () => {\n if (xhr.status >= 200 && xhr.status < 300) {\n nileFileUpload.dispatchEvent(new CustomEvent(FileUploadEvent.NILE_UPLOAD_SUCCESS, {\n detail: { file, response: xhr.response }\n }));\n } else {\n nileFileUpload.errorMessage = FileUploadError.SERVER_SIDE_ERROR;\n nileFileUpload.requestUpdate();\n nileFileUpload.dispatchEvent(new CustomEvent(FileUploadEvent.SERVER_SIDE_ERROR, {\n detail: { file, status: xhr.status, response: xhr.response }\n }));\n }\n };\n\n xhr.onerror = () => {\n uploadRequests.delete(file);\n nileFileUpload.errorMessage = FileUploadError.NETWORK_ERROR;\n nileFileUpload.dispatchEvent(new CustomEvent(FileUploadEvent.NILE_NETWORK_ERROR, {\n detail: { file, status: xhr.status, response: xhr.response },\n bubbles: true,\n composed: true,\n }));\n };\n\n xhr.open('POST', fileUploadUrl);\n xhr.send(formData);\n }\n}\n\nexport const cancelFileUpload = (nileFileUpload: NileFileUpload, uploadRequests: Map<File, XMLHttpRequest>) => {\n document.addEventListener(FileUploadEvent.NILE_CANCEL_UPLOAD, (e: CustomEvent) => {\n const fileToCancel = e.detail.file;\n const xhr = uploadRequests.get(fileToCancel);\n\n if (xhr) {\n xhr.abort();\n }\n uploadRequests.delete(fileToCancel);\n nileFileUpload.uploadedFiles = nileFileUpload.uploadedFiles.filter(file => file !== fileToCancel);\n\n nileFileUpload.dispatchEvent(new CustomEvent(FileUploadEvent.NILE_UPLOAD_CANCELLED, {\n detail: { file: fileToCancel }\n }));\n });\n};\n\nfunction parseSize(sizeStr: string): number {\n const units = { B: 1, KB: 1024, MB: 1024 ** 2, GB: 1024 ** 3 };\n const num = parseFloat(sizeStr);\n const unit = sizeStr.replace(/[0-9.\\s]/g, '').toUpperCase();\n const multiplier = units[unit as keyof typeof units] || 1;\n return num * multiplier;\n}\n\nexport const preventDefaultAndStopPropagation = (event: Event | DragEvent): void => {\n event.preventDefault?.();\n event.stopPropagation();\n}\n\nexport const removeFile = (uploadedFiles: File[], nileFileUpload: NileFileUpload) => {\n document.addEventListener('nile-remove', (e: CustomEvent<RemoveFileDetail>) => {\n const { value } = e.detail;\n uploadedFiles = uploadedFiles.filter(file => file !== value);\n nileFileUpload.uploadedFiles = uploadedFiles;\n nileFileUpload.requestUpdate();\n });\n}\n\nexport const truncateString = (nileFileUpload: NileFileUpload): void => {\n if(nileFileUpload.variant === 'vertical' && nileFileUpload.errorMessage.length > 34) {\n nileFileUpload.isStringTruncated = true;\n nileFileUpload.requestUpdate();\n } else if(nileFileUpload.variant === 'horizontal' && nileFileUpload.errorMessage.length > 96) {\n nileFileUpload.isStringTruncated = true;\n nileFileUpload.requestUpdate();\n }\n}"]}
@@ -50,6 +50,7 @@ export declare class NileOption extends NileElement {
50
50
  disabled: boolean;
51
51
  /** Indicates whether the option is selected. */
52
52
  selected: boolean;
53
+ groupName: string;
53
54
  connectedCallback(): void;
54
55
  checkIfMultipleSelect(): void;
55
56
  protected updated(_changedProperties: PropertyValues): void;
@@ -53,6 +53,8 @@ let NileOption = class NileOption extends NileElement {
53
53
  this.disabled = false;
54
54
  /** Indicates whether the option is selected. */
55
55
  this.selected = false;
56
+ /* used to pass group name to the option, so that grouped options can be shown */
57
+ this.groupName = '';
56
58
  }
57
59
  connectedCallback() {
58
60
  super.connectedCallback();
@@ -149,7 +151,7 @@ let NileOption = class NileOption extends NileElement {
149
151
  @mouseleave=${this.handleMouseLeave}
150
152
  >
151
153
 
152
- ${this.isMultipleSelect ? html `<nile-checkbox class="option--checkbox" .checked=${this.selected}></nile-checkbox>` : ''}
154
+ ${this.isMultipleSelect ? html `<nile-checkbox part="checkbox" class="option--checkbox" .checked=${this.selected}></nile-checkbox>` : ''}
153
155
 
154
156
  <slot part="prefix" name="prefix" class="option__prefix"></slot>
155
157
  <slot
@@ -191,6 +193,9 @@ __decorate([
191
193
  __decorate([
192
194
  property({ type: Boolean, reflect: true })
193
195
  ], NileOption.prototype, "selected", void 0);
196
+ __decorate([
197
+ property({ type: String, reflect: true })
198
+ ], NileOption.prototype, "groupName", void 0);
194
199
  __decorate([
195
200
  watch('disabled')
196
201
  ], NileOption.prototype, "handleDisabledChange", null);
@@ -1 +1 @@
1
- {"version":3,"file":"nile-option.js","sourceRoot":"","sources":["../../../src/nile-option/nile-option.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright Aquera Inc 2023\n *\n * This source code is licensed under the BSD-3-Clause license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { LitElement, CSSResultArray, TemplateResult } from 'lit';\nimport { styles } from './nile-option.css';\nimport '../nile-icon';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { customElement, property, query, state } from 'lit/decorators.js';\nimport { html } from 'lit';\nimport { watch } from '../internal/watch';\nimport type { CSSResultGroup, PropertyValues } from 'lit';\nimport NileElement from '../internal/nile-element';\nimport '../nile-checkbox';\n\n/**\n * Nile icon component.\n *\n * @tag nile-option\n *\n */\n\n/**\n * @summary Options define the selectable items within various form controls such as [select](/components/select).\n * @status stable\n *\n * @dependency nile-icon\n *\n * @slot - The option's label.\n * @slot prefix - Used to prepend an icon or similar element to the menu item.\n * @slot suffix - Used to append an icon or similar element to the menu item.\n *\n * @csspart checked-icon - The checked icon, an `<nile-icon>` element.\n * @csspart base - The component's base wrapper.\n * @csspart label - The option's label.\n * @csspart prefix - The container that wraps the prefix.\n * @csspart suffix - The container that wraps the suffix.\n */\n\n@customElement('nile-option')\nexport class NileOption extends NileElement {\n static styles: CSSResultGroup = styles;\n\n private cachedTextLabel: string;\n\n @query('.option__label') defaultSlot: HTMLSlotElement;\n\n @state() current = false; // the user has keyed into the option, but hasn't selected it yet (shows a highlight)\n @state() hasHover = false; // we need this because Safari doesn't honor :hover styles while dragging\n @state() hidden = false; // the option is hidden\n @state() isMultipleSelect = false;\n\n /**\n * The option's value. When selected, the containing form control will receive this value. The value must be unique\n * from other options in the same group. Values may not contain spaces, as spaces are used as delimiters when listing\n * multiple values.\n */\n @property({ reflect: true }) value = '';\n\n @property({ type: Boolean }) showCheckbox: boolean = false;\n\n /** Draws the option in a disabled state, preventing selection. */\n @property({ type: Boolean, reflect: true }) disabled = false;\n\n /** Indicates whether the option is selected. */\n @property({ type: Boolean, reflect: true }) selected = false;\n\n connectedCallback() {\n super.connectedCallback();\n this.setAttribute('role', 'option');\n this.setAttribute('aria-selected', 'false');\n\n // Find the closest parent 'nile-select' or 'nile-virtual-select' element\n const parentSelect = this.closest('nile-select') || this.closest('nile-virtual-select');\n this.checkIfMultipleSelect();\n }\n\n checkIfMultipleSelect() {\n // Find the closest parent 'nile-select' element\n const parentSelect = this.closest('nile-select') || this.closest('nile-virtual-select');\n\n // Check if the parent has the 'multiple' attribute\n if (parentSelect && parentSelect.hasAttribute('multiple')) {\n // let multipleValue = parentSelect.getAttribute('multiple');\n if(parentSelect.hasAttribute('multiple') && parentSelect.getAttribute('multiple') === '') {\n this.isMultipleSelect = true;\n } else if (parentSelect.getAttribute('multiple') === 'true') {\n this.isMultipleSelect = true;\n } else {\n this.isMultipleSelect = false;\n }\n }\n }\n\n protected updated(_changedProperties: PropertyValues): void {\n this.checkIfMultipleSelect();\n }\n\n private handleDefaultSlotChange() {\n const textLabel = this.getTextLabel();\n\n // Ignore the first time the label is set\n if (typeof this.cachedTextLabel === 'undefined') {\n this.cachedTextLabel = textLabel;\n return;\n }\n\n // When the label changes, emit a slotchange event so parent controls see it\n if (textLabel !== this.cachedTextLabel) {\n this.cachedTextLabel = textLabel;\n this.emit('slotchange');\n }\n }\n\n private handleMouseEnter() {\n this.hasHover = true;\n }\n\n private handleMouseLeave() {\n this.hasHover = false;\n }\n\n @watch('disabled')\n handleDisabledChange() {\n this.setAttribute('aria-disabled', this.disabled ? 'true' : 'false');\n }\n\n @watch('selected')\n handleSelectedChange() {\n this.setAttribute('aria-selected', this.selected ? 'true' : 'false');\n }\n\n @watch('value')\n handleValueChange() {\n // Ensure the value is a string. This ensures the next line doesn't error and allows framework users to pass numbers\n // instead of requiring them to cast the value to a string.\n if (typeof this.value !== 'string') {\n this.value = String(this.value);\n }\n\n // if (this.value.includes(' ')) {\n // console.error(\n // `Option values cannot include a space. All spaces have been replaced with underscores.`,\n // this\n // );\n // this.value = this.value.replace(/ /g, '_');\n // }\n }\n\n /** Returns a plain text label based on the option's content. */\n getTextLabel() {\n // Search for a label element inside the component\n const labelElement = this.querySelector('label');\n\n // If a label element is found, return its text content\n if (labelElement) {\n return labelElement.textContent?.trim() ?? '';\n }\n\n // If no label element is found, return the existing behavior\n return (this.textContent ?? '').trim();\n }\n\n render() {\n return html`\n ${!this.hidden\n ? html` <div\n part=\"base\"\n class=${classMap({\n option: true,\n 'option--single-select': !this.isMultipleSelect,\n 'option--current': this.selected && !this.isMultipleSelect,\n 'option--disabled': this.disabled,\n 'option--selected': this.selected && !this.isMultipleSelect,\n 'option--hover': this.hasHover,\n })}\n @mouseenter=${this.handleMouseEnter}\n @mouseleave=${this.handleMouseLeave}\n >\n\n ${this.isMultipleSelect ? html`<nile-checkbox class=\"option--checkbox\" .checked=${this.selected}></nile-checkbox>` : ''}\n\n <slot part=\"prefix\" name=\"prefix\" class=\"option__prefix\"></slot>\n <slot\n part=\"label\"\n class=\"option__label\"\n @slotchange=${this.handleDefaultSlotChange}\n ></slot>\n <slot part=\"suffix\" name=\"suffix\" class=\"option__suffix\"></slot>\n </div>`\n : ''}\n `;\n }\n}\n\nexport default NileOption;\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-option': NileOption;\n }\n}\n"]}
1
+ {"version":3,"file":"nile-option.js","sourceRoot":"","sources":["../../../src/nile-option/nile-option.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright Aquera Inc 2023\n *\n * This source code is licensed under the BSD-3-Clause license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { LitElement, CSSResultArray, TemplateResult } from 'lit';\nimport { styles } from './nile-option.css';\nimport '../nile-icon';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { customElement, property, query, state } from 'lit/decorators.js';\nimport { html } from 'lit';\nimport { watch } from '../internal/watch';\nimport type { CSSResultGroup, PropertyValues } from 'lit';\nimport NileElement from '../internal/nile-element';\nimport '../nile-checkbox';\n\n/**\n * Nile icon component.\n *\n * @tag nile-option\n *\n */\n\n/**\n * @summary Options define the selectable items within various form controls such as [select](/components/select).\n * @status stable\n *\n * @dependency nile-icon\n *\n * @slot - The option's label.\n * @slot prefix - Used to prepend an icon or similar element to the menu item.\n * @slot suffix - Used to append an icon or similar element to the menu item.\n *\n * @csspart checked-icon - The checked icon, an `<nile-icon>` element.\n * @csspart base - The component's base wrapper.\n * @csspart label - The option's label.\n * @csspart prefix - The container that wraps the prefix.\n * @csspart suffix - The container that wraps the suffix.\n */\n\n@customElement('nile-option')\nexport class NileOption extends NileElement {\n static styles: CSSResultGroup = styles;\n\n private cachedTextLabel: string;\n\n @query('.option__label') defaultSlot: HTMLSlotElement;\n\n @state() current = false; // the user has keyed into the option, but hasn't selected it yet (shows a highlight)\n @state() hasHover = false; // we need this because Safari doesn't honor :hover styles while dragging\n @state() hidden = false; // the option is hidden\n @state() isMultipleSelect = false;\n\n /**\n * The option's value. When selected, the containing form control will receive this value. The value must be unique\n * from other options in the same group. Values may not contain spaces, as spaces are used as delimiters when listing\n * multiple values.\n */\n @property({ reflect: true }) value = '';\n\n @property({ type: Boolean }) showCheckbox: boolean = false;\n\n /** Draws the option in a disabled state, preventing selection. */\n @property({ type: Boolean, reflect: true }) disabled = false;\n\n /** Indicates whether the option is selected. */\n @property({ type: Boolean, reflect: true }) selected = false;\n\n /* used to pass group name to the option, so that grouped options can be shown */\n @property({ type: String, reflect: true }) groupName: string = '';\n\n connectedCallback() {\n super.connectedCallback();\n this.setAttribute('role', 'option');\n this.setAttribute('aria-selected', 'false');\n\n // Find the closest parent 'nile-select' or 'nile-virtual-select' element\n const parentSelect = this.closest('nile-select') || this.closest('nile-virtual-select');\n this.checkIfMultipleSelect();\n }\n\n checkIfMultipleSelect() {\n // Find the closest parent 'nile-select' element\n const parentSelect = this.closest('nile-select') || this.closest('nile-virtual-select');\n\n // Check if the parent has the 'multiple' attribute\n if (parentSelect && parentSelect.hasAttribute('multiple')) {\n // let multipleValue = parentSelect.getAttribute('multiple');\n if(parentSelect.hasAttribute('multiple') && parentSelect.getAttribute('multiple') === '') {\n this.isMultipleSelect = true;\n } else if (parentSelect.getAttribute('multiple') === 'true') {\n this.isMultipleSelect = true;\n } else {\n this.isMultipleSelect = false;\n }\n }\n }\n\n protected updated(_changedProperties: PropertyValues): void {\n this.checkIfMultipleSelect();\n }\n\n private handleDefaultSlotChange() {\n const textLabel = this.getTextLabel();\n\n // Ignore the first time the label is set\n if (typeof this.cachedTextLabel === 'undefined') {\n this.cachedTextLabel = textLabel;\n return;\n }\n\n // When the label changes, emit a slotchange event so parent controls see it\n if (textLabel !== this.cachedTextLabel) {\n this.cachedTextLabel = textLabel;\n this.emit('slotchange');\n }\n }\n\n private handleMouseEnter() {\n this.hasHover = true;\n }\n\n private handleMouseLeave() {\n this.hasHover = false;\n }\n\n @watch('disabled')\n handleDisabledChange() {\n this.setAttribute('aria-disabled', this.disabled ? 'true' : 'false');\n }\n\n @watch('selected')\n handleSelectedChange() {\n this.setAttribute('aria-selected', this.selected ? 'true' : 'false');\n }\n\n @watch('value')\n handleValueChange() {\n // Ensure the value is a string. This ensures the next line doesn't error and allows framework users to pass numbers\n // instead of requiring them to cast the value to a string.\n if (typeof this.value !== 'string') {\n this.value = String(this.value);\n }\n\n // if (this.value.includes(' ')) {\n // console.error(\n // `Option values cannot include a space. All spaces have been replaced with underscores.`,\n // this\n // );\n // this.value = this.value.replace(/ /g, '_');\n // }\n }\n\n /** Returns a plain text label based on the option's content. */\n getTextLabel() {\n // Search for a label element inside the component\n const labelElement = this.querySelector('label');\n\n // If a label element is found, return its text content\n if (labelElement) {\n return labelElement.textContent?.trim() ?? '';\n }\n\n // If no label element is found, return the existing behavior\n return (this.textContent ?? '').trim();\n }\n\n render() {\n return html`\n ${!this.hidden\n ? html` <div\n part=\"base\"\n class=${classMap({\n option: true,\n 'option--single-select': !this.isMultipleSelect,\n 'option--current': this.selected && !this.isMultipleSelect,\n 'option--disabled': this.disabled,\n 'option--selected': this.selected && !this.isMultipleSelect,\n 'option--hover': this.hasHover,\n })}\n @mouseenter=${this.handleMouseEnter}\n @mouseleave=${this.handleMouseLeave}\n >\n\n ${this.isMultipleSelect ? html`<nile-checkbox part=\"checkbox\" class=\"option--checkbox\" .checked=${this.selected}></nile-checkbox>` : ''}\n\n <slot part=\"prefix\" name=\"prefix\" class=\"option__prefix\"></slot>\n <slot\n part=\"label\"\n class=\"option__label\"\n @slotchange=${this.handleDefaultSlotChange}\n ></slot>\n <slot part=\"suffix\" name=\"suffix\" class=\"option__suffix\"></slot>\n </div>`\n : ''}\n `;\n }\n}\n\nexport default NileOption;\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-option': NileOption;\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ export { NileOptionGroup } from './nile-option-group';
@@ -0,0 +1,2 @@
1
+ export { NileOptionGroup } from './nile-option-group';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/nile-option-group/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC","sourcesContent":["export { NileOptionGroup } from './nile-option-group';"]}
@@ -0,0 +1,12 @@
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
+ * OptionHeader CSS
9
+ */
10
+ export declare const styles: import("lit").CSSResult;
11
+ declare const _default: import("lit").CSSResult[];
12
+ export default _default;
@@ -0,0 +1,58 @@
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
+ import { css } from 'lit';
8
+ /**
9
+ * OptionHeader CSS
10
+ */
11
+ export const styles = css `
12
+ .option-group-header {
13
+ height: 40px;
14
+ display: flex;
15
+ align-items: center;
16
+ padding: 0px 12px;
17
+ background-color: var(--nile-colors-dark-200);
18
+ color: var(--nile-colors-dark-900);
19
+ font-feature-settings: 'liga' off, 'clig' off;
20
+ font-family: 'colfax-medium';
21
+ font-size: 12px;
22
+ font-weight: 500;
23
+ width: 100%;
24
+ box-sizing: border-box;
25
+ justify-content: space-between;
26
+ }
27
+
28
+ .content-container {
29
+ display: flex;
30
+ justify-content: flex-start;
31
+ align-items: center;
32
+ }
33
+
34
+ .gap-18px {
35
+ gap: 14px;
36
+ }
37
+
38
+ .option-group-prefix,
39
+ .option-group-suffix {
40
+ flex: 0 0 auto;
41
+ display: flex;
42
+ align-items: center;
43
+ }
44
+
45
+ .option-group-prefix::slotted(*) {
46
+ margin-inline-end: 0.5rem;
47
+ }
48
+
49
+ .option-group-suffix::slotted(*) {
50
+ margin-inline-start: 0.5rem;
51
+ }
52
+
53
+ :host(.nile-group-hidden)::part(option-group-header) {
54
+ display: none !important;
55
+ }
56
+ `;
57
+ export default [styles];
58
+ //# sourceMappingURL=nile-option-group.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nile-option-group.css.js","sourceRoot":"","sources":["../../../src/nile-option-group/nile-option-group.css.ts"],"names":[],"mappings":"AAAA;;;;;EAKE;AAEF,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6CxB,CAAC;AAEF,eAAe,CAAC,MAAM,CAAC,CAAC","sourcesContent":["/**\n* Copyright Aquera Inc 2025\n*\n* This source code is licensed under the BSD-3-Clause license found in the\n* LICENSE file in the root directory of this source tree.\n*/\n\nimport { css } from 'lit';\n\n/**\n * OptionHeader CSS\n */\nexport const styles = css`\n\t.option-group-header {\n\t\theight: 40px;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tpadding: 0px 12px;\n\t\tbackground-color: var(--nile-colors-dark-200);\n\t\tcolor: var(--nile-colors-dark-900);\n\t\tfont-feature-settings: 'liga' off, 'clig' off;\n\t\tfont-family: 'colfax-medium';\n\t\tfont-size: 12px;\n\t\tfont-weight: 500;\n\t\twidth: 100%;\n\t\tbox-sizing: border-box;\n\t\tjustify-content: space-between;\n\t}\n\n\t.content-container {\n\t\tdisplay: flex;\n\t\tjustify-content: flex-start;\n\t\talign-items: center;\n\t}\n\n\t.gap-18px {\n\t\tgap: 14px;\n\t}\n\n\t.option-group-prefix,\n .option-group-suffix {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n }\n\n .option-group-prefix::slotted(*) {\n margin-inline-end: 0.5rem;\n }\n\n .option-group-suffix::slotted(*) {\n margin-inline-start: 0.5rem;\n }\n\n :host(.nile-group-hidden)::part(option-group-header) {\n\tdisplay: none !important;\n }\n`;\n\nexport default [styles];"]}
@@ -0,0 +1,23 @@
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
+ import { CSSResultArray, TemplateResult } from 'lit';
8
+ import NileElement from '../internal/nile-element';
9
+ import { OptionGroupData } from './nile-option-group.interface';
10
+ export declare class NileOptionGroup extends NileElement {
11
+ static get styles(): CSSResultArray;
12
+ name: string;
13
+ data: OptionGroupData | null;
14
+ private checkForImageOrIcon;
15
+ private normalizeImageDimension;
16
+ render(): TemplateResult;
17
+ }
18
+ export default NileOptionGroup;
19
+ declare global {
20
+ interface HTMLElementTagNameMap {
21
+ 'nile-option-group': NileOptionGroup;
22
+ }
23
+ }