@milaboratories/uikit 2.1.2 → 2.2.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 (274) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/pl-uikit.js +3118 -2901
  3. package/dist/pl-uikit.umd.cjs +10 -10
  4. package/dist/src/components/PlDropdownLegacy/PlDropdownLegacy.vue.d.ts +78 -0
  5. package/dist/src/components/PlDropdownLegacy/__tests__/PlDropdownLegacy.spec.d.ts +1 -0
  6. package/dist/src/components/PlDropdownLegacy/index.d.ts +1 -0
  7. package/dist/src/components/PlDropdownRef/PlDropdownRef.vue.d.ts +2 -1
  8. package/dist/src/components/PlTooltip/PlTooltip.vue.d.ts +1 -1
  9. package/dist/src/composition/useEventListener.d.ts +1 -1
  10. package/dist/src/generated/icons-16.d.ts +1 -1
  11. package/dist/src/generated/icons-24.d.ts +1 -1
  12. package/dist/src/index.d.ts +28 -59
  13. package/dist/style.css +1 -1
  14. package/dist/tsconfig.lib.tsbuildinfo +1 -1
  15. package/package.json +1 -1
  16. package/src/assets/base.scss +4 -0
  17. package/src/assets/icons/icon-assets/16_calendar.svg +7 -0
  18. package/src/assets/icons/icon-assets/16_caret-down.svg +3 -0
  19. package/src/assets/icons/icon-assets/16_caret-left.svg +3 -0
  20. package/src/assets/icons/icon-assets/16_caret-right.svg +3 -0
  21. package/src/assets/icons/icon-assets/16_caret-up.svg +3 -0
  22. package/src/assets/icons/icon-assets/16_clipboard-copied.svg +1 -3
  23. package/src/assets/icons/icon-assets/16_clipboard.svg +1 -11
  24. package/src/assets/icons/icon-assets/16_delete-bin.svg +2 -6
  25. package/src/assets/icons/icon-assets/16_delete-circle.svg +1 -2
  26. package/src/assets/icons/icon-assets/16_error.svg +1 -2
  27. package/src/assets/icons/icon-assets/16_help-outline.svg +1 -1
  28. package/src/assets/icons/icon-assets/16_link.svg +1 -2
  29. package/src/assets/icons/icon-assets/16_paper-clip.svg +3 -0
  30. package/src/assets/icons/icon-assets/16_renew.svg +3 -0
  31. package/src/assets/icons/icon-assets/16_restart.svg +1 -1
  32. package/src/assets/icons/icon-assets/16_settings.svg +1 -1
  33. package/src/assets/icons/icon-assets/16_stop.svg +1 -1
  34. package/src/assets/icons/icon-assets/16_success.svg +1 -2
  35. package/src/assets/icons/icon-assets/16_time.svg +10 -0
  36. package/src/assets/icons/icon-assets/16_zip.svg +1 -2
  37. package/src/assets/icons/icon-assets/24_annotate.svg +2 -2
  38. package/src/assets/icons/icon-assets/24_annotation.svg +6 -6
  39. package/src/assets/icons/icon-assets/24_calendar.svg +6 -0
  40. package/src/assets/icons/icon-assets/24_clipboard-copied.svg +1 -3
  41. package/src/assets/icons/icon-assets/24_clipboard.svg +2 -2
  42. package/src/assets/icons/icon-assets/24_cluster.svg +1 -1
  43. package/src/assets/icons/icon-assets/24_container.svg +7 -0
  44. package/src/assets/icons/icon-assets/24_cookie.svg +1 -1
  45. package/src/assets/icons/icon-assets/24_copy.svg +1 -1
  46. package/src/assets/icons/icon-assets/24_cpu.svg +1 -1
  47. package/src/assets/icons/icon-assets/24_debug.svg +1 -1
  48. package/src/assets/icons/icon-assets/24_file-doc-add.svg +4 -0
  49. package/src/assets/icons/icon-assets/24_file-doc-download.svg +4 -0
  50. package/src/assets/icons/icon-assets/24_file-doc-import.svg +4 -0
  51. package/src/assets/icons/icon-assets/24_file-doc.svg +5 -0
  52. package/src/assets/icons/icon-assets/24_fire-tips.svg +1 -1
  53. package/src/assets/icons/icon-assets/24_folder-parent.svg +1 -1
  54. package/src/assets/icons/icon-assets/24_generate.svg +1 -1
  55. package/src/assets/icons/icon-assets/24_heatmap.svg +10 -9
  56. package/src/assets/icons/icon-assets/24_link.svg +2 -2
  57. package/src/assets/icons/icon-assets/24_paper-clip.svg +1 -1
  58. package/src/assets/icons/icon-assets/24_pin.svg +1 -1
  59. package/src/assets/icons/icon-assets/24_product.svg +3 -0
  60. package/src/assets/icons/icon-assets/24_renew.svg +3 -0
  61. package/src/assets/icons/icon-assets/24_restart.svg +1 -1
  62. package/src/assets/icons/icon-assets/24_slice.svg +2 -2
  63. package/src/assets/icons/icon-assets/24_social-github.svg +1 -1
  64. package/src/assets/icons/icon-assets/24_social-twitter-X.svg +1 -1
  65. package/src/assets/icons/icon-assets/24_social-twitter-bird.svg +1 -1
  66. package/src/assets/icons/icon-assets/24_stop.svg +1 -1
  67. package/src/assets/icons/icon-assets/24_table-add.svg +3 -0
  68. package/src/assets/icons/icon-assets/24_table-alias.svg +3 -0
  69. package/src/assets/icons/icon-assets/24_table-import.svg +3 -0
  70. package/src/assets/icons/icon-assets/24_table.svg +1 -2
  71. package/src/assets/icons/icon-assets/24_theme-dark.svg +3 -0
  72. package/src/assets/icons/icon-assets/24_theme-light.svg +3 -0
  73. package/src/assets/icons/icon-assets/24_time.svg +3 -0
  74. package/src/assets/icons/icon-assets/24_view-hide.svg +3 -0
  75. package/src/assets/icons/icon-assets/24_view-show.svg +3 -0
  76. package/src/assets/icons/icon-assets/24_warning.svg +1 -3
  77. package/src/assets/icons/icon-assets/24_wetlab.svg +1 -1
  78. package/src/assets/icons/icon-assets/24_zip.svg +1 -2
  79. package/src/assets/icons/icon-assets-min/16_calendar.svg +1 -0
  80. package/src/assets/icons/icon-assets-min/16_caret-down.svg +1 -0
  81. package/src/assets/icons/icon-assets-min/16_caret-left.svg +1 -0
  82. package/src/assets/icons/icon-assets-min/16_caret-right.svg +1 -0
  83. package/src/assets/icons/icon-assets-min/16_caret-up.svg +1 -0
  84. package/src/assets/icons/icon-assets-min/16_clipboard-copied.svg +1 -1
  85. package/src/assets/icons/icon-assets-min/16_clipboard.svg +1 -1
  86. package/src/assets/icons/icon-assets-min/16_delete-bin.svg +1 -1
  87. package/src/assets/icons/icon-assets-min/16_delete-circle.svg +1 -1
  88. package/src/assets/icons/icon-assets-min/16_download.svg +1 -0
  89. package/src/assets/icons/icon-assets-min/16_error.svg +1 -1
  90. package/src/assets/icons/icon-assets-min/16_link.svg +1 -1
  91. package/src/assets/icons/icon-assets-min/16_paper-clip.svg +1 -0
  92. package/src/assets/icons/icon-assets-min/16_renew.svg +1 -0
  93. package/src/assets/icons/icon-assets-min/16_restart.svg +1 -1
  94. package/src/assets/icons/icon-assets-min/16_stop.svg +1 -1
  95. package/src/assets/icons/icon-assets-min/16_success.svg +1 -1
  96. package/src/assets/icons/icon-assets-min/16_time.svg +1 -0
  97. package/src/assets/icons/icon-assets-min/16_zip.svg +1 -1
  98. package/src/assets/icons/icon-assets-min/24_annotate.svg +1 -1
  99. package/src/assets/icons/icon-assets-min/24_annotation.svg +1 -1
  100. package/src/assets/icons/icon-assets-min/24_calendar.svg +1 -0
  101. package/src/assets/icons/icon-assets-min/24_clipboard-copied.svg +1 -1
  102. package/src/assets/icons/icon-assets-min/24_clipboard.svg +1 -1
  103. package/src/assets/icons/icon-assets-min/24_cluster.svg +1 -1
  104. package/src/assets/icons/icon-assets-min/24_container.svg +1 -0
  105. package/src/assets/icons/icon-assets-min/24_cookie.svg +1 -1
  106. package/src/assets/icons/icon-assets-min/24_copy.svg +1 -1
  107. package/src/assets/icons/icon-assets-min/24_cpu.svg +1 -1
  108. package/src/assets/icons/icon-assets-min/24_debug.svg +1 -1
  109. package/src/assets/icons/icon-assets-min/24_download.svg +1 -0
  110. package/src/assets/icons/icon-assets-min/24_file-doc-add.svg +1 -0
  111. package/src/assets/icons/icon-assets-min/24_file-doc-download.svg +1 -0
  112. package/src/assets/icons/icon-assets-min/24_file-doc-import.svg +1 -0
  113. package/src/assets/icons/icon-assets-min/24_file-doc.svg +1 -0
  114. package/src/assets/icons/icon-assets-min/24_fire-tips.svg +1 -1
  115. package/src/assets/icons/icon-assets-min/24_folder-parent.svg +1 -1
  116. package/src/assets/icons/icon-assets-min/24_generate.svg +1 -1
  117. package/src/assets/icons/icon-assets-min/24_heatmap.svg +1 -1
  118. package/src/assets/icons/icon-assets-min/24_link.svg +1 -1
  119. package/src/assets/icons/icon-assets-min/24_paper-clip.svg +1 -1
  120. package/src/assets/icons/icon-assets-min/24_pin.svg +1 -1
  121. package/src/assets/icons/icon-assets-min/24_product.svg +1 -0
  122. package/src/assets/icons/icon-assets-min/24_renew.svg +1 -0
  123. package/src/assets/icons/icon-assets-min/24_restart.svg +1 -1
  124. package/src/assets/icons/icon-assets-min/24_slice.svg +1 -1
  125. package/src/assets/icons/icon-assets-min/24_social-github.svg +1 -1
  126. package/src/assets/icons/icon-assets-min/24_social-twitter-X.svg +1 -1
  127. package/src/assets/icons/icon-assets-min/24_social-twitter-bird.svg +1 -1
  128. package/src/assets/icons/icon-assets-min/24_stop.svg +1 -1
  129. package/src/assets/icons/icon-assets-min/24_table-add.svg +1 -0
  130. package/src/assets/icons/icon-assets-min/24_table-alias.svg +1 -0
  131. package/src/assets/icons/icon-assets-min/24_table-import.svg +1 -0
  132. package/src/assets/icons/icon-assets-min/24_table.svg +1 -1
  133. package/src/assets/icons/icon-assets-min/24_theme-dark.svg +1 -0
  134. package/src/assets/icons/icon-assets-min/24_theme-light.svg +1 -0
  135. package/src/assets/icons/icon-assets-min/24_time.svg +1 -0
  136. package/src/assets/icons/icon-assets-min/24_view-hide.svg +1 -0
  137. package/src/assets/icons/icon-assets-min/24_view-show.svg +1 -0
  138. package/src/assets/icons/icon-assets-min/24_warning.svg +1 -1
  139. package/src/assets/icons/icon-assets-min/24_wetlab.svg +1 -1
  140. package/src/assets/icons/icon-assets-min/24_zip.svg +1 -1
  141. package/src/assets/icons/icons-16-generated.json +9 -11
  142. package/src/assets/icons/icons-16-generated.scss +9 -11
  143. package/src/assets/icons/icons-24-generated.json +18 -48
  144. package/src/assets/icons/icons-24-generated.scss +18 -48
  145. package/src/assets/variables.scss +3 -1
  146. package/src/components/PlCheckbox/pl-checkbox.scss +2 -0
  147. package/src/components/PlChip/PlChip.vue +5 -5
  148. package/src/components/PlChip/pl-chip.scss +2 -2
  149. package/src/components/PlDropdown/PlDropdown.vue +61 -24
  150. package/src/components/PlDropdown/__tests__/PlDropdown.spec.ts +7 -6
  151. package/src/components/PlDropdown/pl-dropdown.scss +65 -67
  152. package/src/components/PlDropdownLegacy/PlDropdownLegacy.vue +372 -0
  153. package/src/components/PlDropdownLegacy/__tests__/PlDropdownLegacy.spec.ts +33 -0
  154. package/src/components/PlDropdownLegacy/index.ts +1 -0
  155. package/src/components/PlDropdownLegacy/pl-dropdown-legacy.scss +260 -0
  156. package/src/components/PlDropdownLine/PlDropdownLine.vue +81 -42
  157. package/src/components/PlDropdownLine/pl-dropdown-line.scss +5 -5
  158. package/src/components/PlDropdownMulti/PlDropdownMulti.vue +62 -27
  159. package/src/components/PlDropdownMulti/__tests__/PlDropdownMulti.spec.ts +12 -7
  160. package/src/components/PlDropdownMulti/pl-dropdown-multi.scss +11 -8
  161. package/src/components/PlDropdownRef/PlDropdownRef.vue +1 -0
  162. package/src/components/PlDropdownRef/__tests__/PlDropdownRef.spec.ts +11 -8
  163. package/src/components/PlFileInput/PlFileInput.vue +1 -1
  164. package/src/components/PlTextField/PlTextField.vue +1 -1
  165. package/src/composition/useEventListener.ts +3 -3
  166. package/src/composition/usePosition.ts +2 -2
  167. package/src/generated/icons-16.ts +9 -11
  168. package/src/generated/icons-24.ts +18 -48
  169. package/src/index.ts +1 -0
  170. package/src/assets/icons/icon-assets/16_clear.svg +0 -10
  171. package/src/assets/icons/icon-assets/16_comp.svg +0 -3
  172. package/src/assets/icons/icon-assets/16_compare.svg +0 -4
  173. package/src/assets/icons/icon-assets/16_delete.svg +0 -4
  174. package/src/assets/icons/icon-assets/16_filter-2.svg +0 -4
  175. package/src/assets/icons/icon-assets/16_link-arrow.svg +0 -3
  176. package/src/assets/icons/icon-assets/16_more-horizontal.svg +0 -5
  177. package/src/assets/icons/icon-assets/16_required.svg +0 -3
  178. package/src/assets/icons/icon-assets/16_settings-2.svg +0 -4
  179. package/src/assets/icons/icon-assets/16_sorter.svg +0 -9
  180. package/src/assets/icons/icon-assets/24_box-dot.svg +0 -6
  181. package/src/assets/icons/icon-assets/24_boxplot-1.svg +0 -5
  182. package/src/assets/icons/icon-assets/24_cloud-down.svg +0 -4
  183. package/src/assets/icons/icon-assets/24_cloud-up.svg +0 -4
  184. package/src/assets/icons/icon-assets/24_code-2.svg +0 -5
  185. package/src/assets/icons/icon-assets/24_cross-bars.svg +0 -13
  186. package/src/assets/icons/icon-assets/24_dark-mode.svg +0 -5
  187. package/src/assets/icons/icon-assets/24_delete.svg +0 -6
  188. package/src/assets/icons/icon-assets/24_dendrogram-X-1.svg +0 -8
  189. package/src/assets/icons/icon-assets/24_dendrogram-Y-1.svg +0 -8
  190. package/src/assets/icons/icon-assets/24_download-files.svg +0 -6
  191. package/src/assets/icons/icon-assets/24_export-2.svg +0 -4
  192. package/src/assets/icons/icon-assets/24_external-link.svg +0 -3
  193. package/src/assets/icons/icon-assets/24_fill-color.svg +0 -3
  194. package/src/assets/icons/icon-assets/24_filters-gate.svg +0 -11
  195. package/src/assets/icons/icon-assets/24_frame-type.svg +0 -11
  196. package/src/assets/icons/icon-assets/24_hide.svg +0 -5
  197. package/src/assets/icons/icon-assets/24_import-2.svg +0 -4
  198. package/src/assets/icons/icon-assets/24_import-download.svg +0 -4
  199. package/src/assets/icons/icon-assets/24_info-circle-outline.svg +0 -5
  200. package/src/assets/icons/icon-assets/24_light-mode.svg +0 -18
  201. package/src/assets/icons/icon-assets/24_linetype.svg +0 -13
  202. package/src/assets/icons/icon-assets/24_local.svg +0 -5
  203. package/src/assets/icons/icon-assets/24_logout.svg +0 -4
  204. package/src/assets/icons/icon-assets/24_mode-dark.svg +0 -5
  205. package/src/assets/icons/icon-assets/24_mode-light.svg +0 -18
  206. package/src/assets/icons/icon-assets/24_more-horizontal.svg +0 -5
  207. package/src/assets/icons/icon-assets/24_outlier-shape.svg +0 -28
  208. package/src/assets/icons/icon-assets/24_position.svg +0 -28
  209. package/src/assets/icons/icon-assets/24_progress-2.svg +0 -9
  210. package/src/assets/icons/icon-assets/24_progress.svg +0 -10
  211. package/src/assets/icons/icon-assets/24_radio-btn.svg +0 -29
  212. package/src/assets/icons/icon-assets/24_rotation.svg +0 -11
  213. package/src/assets/icons/icon-assets/24_save.svg +0 -3
  214. package/src/assets/icons/icon-assets/24_server-2.svg +0 -10
  215. package/src/assets/icons/icon-assets/24_settings-2.svg +0 -4
  216. package/src/assets/icons/icon-assets/24_show.svg +0 -4
  217. package/src/assets/icons/icon-assets/24_social-media.svg +0 -16
  218. package/src/assets/icons/icon-assets/24_stacked-bar.svg +0 -17
  219. package/src/assets/icons/icon-assets/24_stroke-non.svg +0 -6
  220. package/src/assets/icons/icon-assets/24_stroke.svg +0 -3
  221. package/src/assets/icons/icon-assets/24_table-upload.svg +0 -4
  222. package/src/assets/icons/icon-assets/24_title-position.svg +0 -15
  223. package/src/assets/icons/icon-assets/24_upload-files.svg +0 -6
  224. package/src/assets/icons/icon-assets/24_view-off.svg +0 -5
  225. package/src/assets/icons/icon-assets/24_view-on.svg +0 -4
  226. package/src/assets/icons/icon-assets-min/16_comp.svg +0 -1
  227. package/src/assets/icons/icon-assets-min/16_delete.svg +0 -1
  228. package/src/assets/icons/icon-assets-min/16_filter-2.svg +0 -1
  229. package/src/assets/icons/icon-assets-min/16_more-horizontal.svg +0 -1
  230. package/src/assets/icons/icon-assets-min/16_settings-2.svg +0 -1
  231. package/src/assets/icons/icon-assets-min/24_box-dot.svg +0 -1
  232. package/src/assets/icons/icon-assets-min/24_boxplot-1.svg +0 -1
  233. package/src/assets/icons/icon-assets-min/24_cloud-down.svg +0 -1
  234. package/src/assets/icons/icon-assets-min/24_cloud-up.svg +0 -1
  235. package/src/assets/icons/icon-assets-min/24_code-2.svg +0 -1
  236. package/src/assets/icons/icon-assets-min/24_cross-bars.svg +0 -1
  237. package/src/assets/icons/icon-assets-min/24_dark-mode.svg +0 -1
  238. package/src/assets/icons/icon-assets-min/24_delete.svg +0 -1
  239. package/src/assets/icons/icon-assets-min/24_dendrogram-X-1.svg +0 -1
  240. package/src/assets/icons/icon-assets-min/24_dendrogram-Y-1.svg +0 -1
  241. package/src/assets/icons/icon-assets-min/24_download-files.svg +0 -1
  242. package/src/assets/icons/icon-assets-min/24_fill-color.svg +0 -1
  243. package/src/assets/icons/icon-assets-min/24_filters-gate.svg +0 -1
  244. package/src/assets/icons/icon-assets-min/24_frame-type.svg +0 -1
  245. package/src/assets/icons/icon-assets-min/24_import-2.svg +0 -1
  246. package/src/assets/icons/icon-assets-min/24_import-download.svg +0 -1
  247. package/src/assets/icons/icon-assets-min/24_info-circle-outline.svg +0 -1
  248. package/src/assets/icons/icon-assets-min/24_light-mode.svg +0 -1
  249. package/src/assets/icons/icon-assets-min/24_linetype.svg +0 -1
  250. package/src/assets/icons/icon-assets-min/24_local.svg +0 -1
  251. package/src/assets/icons/icon-assets-min/24_logout.svg +0 -1
  252. package/src/assets/icons/icon-assets-min/24_mode-dark.svg +0 -1
  253. package/src/assets/icons/icon-assets-min/24_mode-light.svg +0 -1
  254. package/src/assets/icons/icon-assets-min/24_more-horizontal.svg +0 -1
  255. package/src/assets/icons/icon-assets-min/24_outlier-shape.svg +0 -1
  256. package/src/assets/icons/icon-assets-min/24_position.svg +0 -1
  257. package/src/assets/icons/icon-assets-min/24_progress-2.svg +0 -1
  258. package/src/assets/icons/icon-assets-min/24_progress.svg +0 -1
  259. package/src/assets/icons/icon-assets-min/24_radio-btn.svg +0 -1
  260. package/src/assets/icons/icon-assets-min/24_rotation.svg +0 -1
  261. package/src/assets/icons/icon-assets-min/24_save.svg +0 -1
  262. package/src/assets/icons/icon-assets-min/24_server-2.svg +0 -1
  263. package/src/assets/icons/icon-assets-min/24_settings-2.svg +0 -1
  264. package/src/assets/icons/icon-assets-min/24_social-media.svg +0 -1
  265. package/src/assets/icons/icon-assets-min/24_stacked-bar.svg +0 -1
  266. package/src/assets/icons/icon-assets-min/24_stroke-non.svg +0 -1
  267. package/src/assets/icons/icon-assets-min/24_stroke.svg +0 -1
  268. package/src/assets/icons/icon-assets-min/24_upload-files.svg +0 -1
  269. package/src/assets/icons/icon-assets-min/24_view-off.svg +0 -1
  270. package/src/assets/icons/icon-assets-min/24_view-on.svg +0 -1
  271. /package/src/assets/icons/icon-assets/{16_import.svg → 16_download.svg} +0 -0
  272. /package/src/assets/icons/icon-assets/{24_import.svg → 24_download.svg} +0 -0
  273. /package/src/assets/icons/icon-assets/{24_frame-type--left.svg → 24_frame-type-left.svg} +0 -0
  274. /package/src/assets/icons/icon-assets-min/{24_frame-type--left.svg → 24_frame-type-left.svg} +0 -0
@@ -19,14 +19,13 @@ $icons24: (
19
19
  bar-trend: 'bar-trend.svg',
20
20
  bar: 'bar.svg',
21
21
  bindot: 'bindot.svg',
22
- box-dot: 'box-dot.svg',
23
22
  box: 'box.svg',
24
- boxplot-1: 'boxplot-1.svg',
25
23
  boxplot-binned: 'boxplot-binned.svg',
26
24
  boxplot-jitter: 'boxplot-jitter.svg',
27
25
  boxplot-notched: 'boxplot-notched.svg',
28
26
  boxplot: 'boxplot.svg',
29
27
  bubble: 'bubble.svg',
28
+ calendar: 'calendar.svg',
30
29
  canvas: 'canvas.svg',
31
30
  cell-type-num: 'cell-type-num.svg',
32
31
  cell-type-txt: 'cell-type-txt.svg',
@@ -44,14 +43,11 @@ $icons24: (
44
43
  clipboard-copied: 'clipboard-copied.svg',
45
44
  clipboard: 'clipboard.svg',
46
45
  close: 'close.svg',
47
- cloud-down: 'cloud-down.svg',
48
46
  cloud-download: 'cloud-download.svg',
49
47
  cloud-offline: 'cloud-offline.svg',
50
48
  cloud-online: 'cloud-online.svg',
51
- cloud-up: 'cloud-up.svg',
52
49
  cloud-upload: 'cloud-upload.svg',
53
50
  cluster: 'cluster.svg',
54
- code-2: 'code-2.svg',
55
51
  code: 'code.svg',
56
52
  color-fill: 'color-fill.svg',
57
53
  color-none: 'color-none.svg',
@@ -59,25 +55,21 @@ $icons24: (
59
55
  color: 'color.svg',
60
56
  columns: 'columns.svg',
61
57
  connected-points: 'connected-points.svg',
58
+ container: 'container.svg',
62
59
  cookie: 'cookie.svg',
63
60
  copy: 'copy.svg',
64
61
  cpu: 'cpu.svg',
65
- cross-bars: 'cross-bars.svg',
66
- dark-mode: 'dark-mode.svg',
67
62
  data-dimentions: 'data-dimentions.svg',
68
63
  debug: 'debug.svg',
69
64
  delete-bin: 'delete-bin.svg',
70
65
  delete-circle: 'delete-circle.svg',
71
66
  delete-clear: 'delete-clear.svg',
72
- delete: 'delete.svg',
73
- dendrogram-X-1: 'dendrogram-X-1.svg',
74
67
  dendrogram-X-line: 'dendrogram-X-line.svg',
75
68
  dendrogram-X: 'dendrogram-X.svg',
76
- dendrogram-Y-1: 'dendrogram-Y-1.svg',
77
69
  dendrogram-Y-line: 'dendrogram-Y-line.svg',
78
70
  dendrogram-Y: 'dendrogram-Y.svg',
79
71
  dna: 'dna.svg',
80
- download-files: 'download-files.svg',
72
+ download: 'download.svg',
81
73
  drag-dots: 'drag-dots.svg',
82
74
  drag-horizontal: 'drag-horizontal.svg',
83
75
  drag-vertical: 'drag-vertical.svg',
@@ -87,33 +79,27 @@ $icons24: (
87
79
  error: 'error.svg',
88
80
  expand-left: 'expand-left.svg',
89
81
  expand-right: 'expand-right.svg',
90
- export-2: 'export-2.svg',
91
82
  export: 'export.svg',
92
- external-link: 'external-link.svg',
83
+ file-doc-add: 'file-doc-add.svg',
84
+ file-doc-download: 'file-doc-download.svg',
85
+ file-doc-import: 'file-doc-import.svg',
86
+ file-doc: 'file-doc.svg',
93
87
  files-export: 'files-export.svg',
94
88
  files-import: 'files-import.svg',
95
- fill-color: 'fill-color.svg',
96
89
  filter-on: 'filter-on.svg',
97
90
  filter: 'filter.svg',
98
- filters-gate: 'filters-gate.svg',
99
91
  fire-tips: 'fire-tips.svg',
100
92
  folder-parent: 'folder-parent.svg',
101
- frame-type--left: 'frame-type--left.svg',
102
93
  frame-type-all: 'frame-type-all.svg',
103
94
  frame-type-bottom: 'frame-type-bottom.svg',
104
95
  frame-type-left-bottom: 'frame-type-left-bottom.svg',
96
+ frame-type-left: 'frame-type-left.svg',
105
97
  frame-type-none: 'frame-type-none.svg',
106
- frame-type: 'frame-type.svg',
107
98
  generate: 'generate.svg',
108
99
  graph: 'graph.svg',
109
100
  heatmap: 'heatmap.svg',
110
101
  help-outline: 'help-outline.svg',
111
102
  help: 'help.svg',
112
- hide: 'hide.svg',
113
- import-2: 'import-2.svg',
114
- import-download: 'import-download.svg',
115
- import: 'import.svg',
116
- info-circle-outline: 'info-circle-outline.svg',
117
103
  info-outline: 'info-outline.svg',
118
104
  info: 'info.svg',
119
105
  jitter: 'jitter.svg',
@@ -124,7 +110,6 @@ $icons24: (
124
110
  legend-box-dot: 'legend-box-dot.svg',
125
111
  legend-box: 'legend-box.svg',
126
112
  legend: 'legend.svg',
127
- light-mode: 'light-mode.svg',
128
113
  line-binned: 'line-binned.svg',
129
114
  line-error: 'line-error.svg',
130
115
  line-jitter: 'line-jitter.svg',
@@ -135,22 +120,15 @@ $icons24: (
135
120
  linetype-longdash: 'linetype-longdash.svg',
136
121
  linetype-solid: 'linetype-solid.svg',
137
122
  linetype-twodash: 'linetype-twodash.svg',
138
- linetype: 'linetype.svg',
139
123
  link-disabled: 'link-disabled.svg',
140
124
  link: 'link.svg',
141
125
  loading: 'loading.svg',
142
- local: 'local.svg',
143
126
  lock: 'lock.svg',
144
- logout: 'logout.svg',
145
127
  maximize: 'maximize.svg',
146
128
  menu: 'menu.svg',
147
129
  minimize: 'minimize.svg',
148
130
  minus: 'minus.svg',
149
- mode-dark: 'mode-dark.svg',
150
- mode-light: 'mode-light.svg',
151
- more-horizontal: 'more-horizontal.svg',
152
131
  more: 'more.svg',
153
- outlier-shape: 'outlier-shape.svg',
154
132
  paper-clip: 'paper-clip.svg',
155
133
  pause: 'pause.svg',
156
134
  pin: 'pin.svg',
@@ -163,59 +141,51 @@ $icons24: (
163
141
  position-right: 'position-right.svg',
164
142
  position-top-annotation: 'position-top-annotation.svg',
165
143
  position-top: 'position-top.svg',
166
- position: 'position.svg',
167
- progress-2: 'progress-2.svg',
168
- progress: 'progress.svg',
144
+ product: 'product.svg',
169
145
  publications: 'publications.svg',
170
- radio-btn: 'radio-btn.svg',
171
146
  radio-button-checked: 'radio-button-checked.svg',
172
147
  radio-button: 'radio-button.svg',
148
+ renew: 'renew.svg',
173
149
  restart: 'restart.svg',
174
150
  reverse: 'reverse.svg',
175
151
  rotation-0: 'rotation-0.svg',
176
152
  rotation-45: 'rotation-45.svg',
177
153
  rotation-90: 'rotation-90.svg',
178
- rotation: 'rotation.svg',
179
- save: 'save.svg',
180
154
  search: 'search.svg',
181
- server-2: 'server-2.svg',
182
155
  server-on: 'server-on.svg',
183
156
  server: 'server.svg',
184
- settings-2: 'settings-2.svg',
185
157
  settings: 'settings.svg',
186
- show: 'show.svg',
187
158
  sina: 'sina.svg',
188
159
  skatterplot: 'skatterplot.svg',
189
160
  slice: 'slice.svg',
190
161
  social-github: 'social-github.svg',
191
162
  social-linkedin: 'social-linkedin.svg',
192
- social-media: 'social-media.svg',
193
163
  social-twitter-X: 'social-twitter-X.svg',
194
164
  social-twitter-bird: 'social-twitter-bird.svg',
195
165
  social-youtube: 'social-youtube.svg',
196
166
  sort-list-down: 'sort-list-down.svg',
197
167
  sort-list-up: 'sort-list-up.svg',
198
168
  sort: 'sort.svg',
199
- stacked-bar: 'stacked-bar.svg',
200
169
  statistics: 'statistics.svg',
201
170
  stop: 'stop.svg',
202
171
  strip-plot: 'strip-plot.svg',
203
- stroke-non: 'stroke-non.svg',
204
- stroke: 'stroke.svg',
205
172
  success: 'success.svg',
206
- table-upload: 'table-upload.svg',
173
+ table-add: 'table-add.svg',
174
+ table-alias: 'table-alias.svg',
175
+ table-import: 'table-import.svg',
207
176
  table: 'table.svg',
208
177
  template: 'template.svg',
209
178
  terminal: 'terminal.svg',
210
179
  text-align-center: 'text-align-center.svg',
211
180
  text-align-left: 'text-align-left.svg',
212
181
  text-align-right: 'text-align-right.svg',
213
- title-position: 'title-position.svg',
182
+ theme-dark: 'theme-dark.svg',
183
+ theme-light: 'theme-light.svg',
184
+ time: 'time.svg',
214
185
  tune: 'tune.svg',
215
- upload-files: 'upload-files.svg',
216
186
  venn: 'venn.svg',
217
- view-off: 'view-off.svg',
218
- view-on: 'view-on.svg',
187
+ view-hide: 'view-hide.svg',
188
+ view-show: 'view-show.svg',
219
189
  violin-binned: 'violin-binned.svg',
220
190
  violin-jitter: 'violin-jitter.svg',
221
191
  violin: 'violin.svg',
@@ -66,10 +66,12 @@
66
66
  --main-spacing: 24px;
67
67
  --gap-v: 24px;
68
68
  --gap-h: 12px;
69
+ // @TODO global overlays
69
70
  --z-slide-shadow: 80;
70
71
  --z-slide-dialog: 81;
71
72
  --z-dialog: 100;
72
- --z-tooltip: 103;
73
+ --z-dropdown-options: 110;
74
+ --z-tooltip: 120;
73
75
  --z-context-menu: 1001;
74
76
  }
75
77
 
@@ -54,5 +54,7 @@
54
54
  cursor: var(--cursor-label);
55
55
  font-size: 14px;
56
56
  font-weight: 500;
57
+ display: inline-flex;
58
+ align-items: center;
57
59
  }
58
60
  }
@@ -21,16 +21,16 @@ onMounted(() => {
21
21
  </script>
22
22
 
23
23
  <template>
24
- <PlTooltip position="top" class="ui-chip-tooltip" :delay="500">
24
+ <PlTooltip position="top" class="pl-chip-tooltip" :delay="500">
25
25
  <template v-if="canShowTooltip" #tooltip>
26
26
  <slot />
27
27
  </template>
28
- <div ref="chip" class="ui-chip" :class="{ small }">
29
- <div class="ui-chip__text">
28
+ <div ref="chip" class="pl-chip" :class="{ small }">
29
+ <div class="pl-chip__text">
30
30
  <slot />
31
31
  </div>
32
- <div v-if="closeable" tabindex="0" class="ui-chip__close" @keydown.enter="$emit('close')" @click.stop="$emit('close')">
33
- <div class="ui-chip__close--icon" />
32
+ <div v-if="closeable" tabindex="0" class="pl-chip__close" @keydown.enter="$emit('close')" @click.stop="$emit('close')">
33
+ <div class="pl-chip__close--icon" />
34
34
  </div>
35
35
  </div>
36
36
  </PlTooltip>
@@ -1,10 +1,10 @@
1
1
  @import "@/assets/mixins";
2
2
 
3
- .ui-chip-tooltip {
3
+ .pl-chip-tooltip {
4
4
  display: inline-flex;
5
5
  }
6
6
 
7
- .ui-chip {
7
+ .pl-chip {
8
8
  --chip-color: var(--txt-01);
9
9
 
10
10
  position: relative;
@@ -20,6 +20,9 @@ import { deepEqual } from '@/helpers/objects';
20
20
  import DropdownListItem from '@/components/DropdownListItem.vue';
21
21
  import LongText from '@/components/LongText.vue';
22
22
  import { normalizeListOptions } from '@/helpers/utils';
23
+ import { useElementPosition } from '@/composition/usePosition';
24
+ import { PlIcon16 } from '../PlIcon16';
25
+ import { PlMaskIcon24 } from '../PlMaskIcon24';
23
26
 
24
27
  const emit = defineEmits<{
25
28
  /**
@@ -109,6 +112,7 @@ const data = reactive({
109
112
  search: '',
110
113
  activeIndex: -1,
111
114
  open: false,
115
+ optionsHeight: 0,
112
116
  });
113
117
 
114
118
  const findActiveIndex = () =>
@@ -224,7 +228,9 @@ const toggleOpen = () => (data.open = !data.open);
224
228
  const onInputFocus = () => (data.open = true);
225
229
 
226
230
  const onFocusOut = (event: FocusEvent) => {
227
- if (!root?.value?.contains(event.relatedTarget as Node | null)) {
231
+ const relatedTarget = event.relatedTarget as Node | null;
232
+
233
+ if (!root.value?.contains(relatedTarget) && !list.value?.contains(relatedTarget)) {
228
234
  data.search = '';
229
235
  data.open = false;
230
236
  }
@@ -300,20 +306,49 @@ watchPostEffect(() => {
300
306
  scrollIntoActive();
301
307
  }
302
308
  });
309
+
310
+ const optionsStyle = reactive({
311
+ top: '0px',
312
+ left: '0px',
313
+ width: '0px',
314
+ });
315
+
316
+ watch(list, (el) => {
317
+ if (el) {
318
+ const rect = el.getBoundingClientRect();
319
+ data.optionsHeight = rect.height;
320
+ window.dispatchEvent(new CustomEvent('adjust'));
321
+ }
322
+ });
323
+
324
+ useElementPosition(root, (pos) => {
325
+ const focusWidth = 3; // see css
326
+
327
+ const downTopOffset = pos.top + pos.height + focusWidth;
328
+
329
+ if (downTopOffset + data.optionsHeight > pos.clientHeight) {
330
+ optionsStyle.top = pos.top - data.optionsHeight - focusWidth + 'px';
331
+ } else {
332
+ optionsStyle.top = downTopOffset + 'px';
333
+ }
334
+
335
+ optionsStyle.left = pos.left + 'px';
336
+ optionsStyle.width = pos.width + 'px';
337
+ });
303
338
  </script>
304
339
 
305
340
  <template>
306
- <div class="ui-dropdown__envelope">
341
+ <div class="pl-dropdown__envelope">
307
342
  <div
308
343
  ref="root"
309
344
  :tabindex="tabindex"
310
- class="ui-dropdown"
345
+ class="pl-dropdown"
311
346
  :class="{ open: data.open, error, disabled: isDisabled }"
312
347
  @keydown="handleKeydown"
313
348
  @focusout="onFocusOut"
314
349
  >
315
- <div class="ui-dropdown__container">
316
- <div class="ui-dropdown__field">
350
+ <div class="pl-dropdown__container">
351
+ <div class="pl-dropdown__field">
317
352
  <input
318
353
  ref="input"
319
354
  v-model="data.search"
@@ -330,9 +365,9 @@ watchPostEffect(() => {
330
365
  <LongText class="input-value"> {{ textValue }} </LongText>
331
366
  </div>
332
367
 
333
- <div class="ui-dropdown__controls">
334
- <div v-if="isLoadingOptions" class="mask-24 mask-loading"></div>
335
- <div v-if="clearable && hasValue" class="icon-16 icon-clear" @click.stop="clear" />
368
+ <div class="pl-dropdown__controls">
369
+ <PlMaskIcon24 v-if="isLoadingOptions" name="loading" />
370
+ <PlIcon16 v-if="clearable && hasValue" name="delete-clear" @click.stop="clear" />
336
371
  <slot name="append" />
337
372
  <div v-if="arrowIconLarge" class="arrow-icon" :class="[`icon-24 ${arrowIconLarge}`]" @click.stop="toggleOpen" />
338
373
  <div v-else-if="arrowIcon" class="arrow-icon" :class="[`icon-16 ${arrowIcon}`]" @click.stop="toggleOpen" />
@@ -348,23 +383,25 @@ watchPostEffect(() => {
348
383
  </template>
349
384
  </PlTooltip>
350
385
  </label>
351
- <div v-if="data.open" ref="list" class="ui-dropdown__options">
352
- <DropdownListItem
353
- v-for="(item, index) in filteredRef"
354
- :key="index"
355
- :option="item"
356
- :is-selected="item.isSelected"
357
- :is-hovered="item.isActive"
358
- :size="optionSize"
359
- @click.stop="selectOption(item.value)"
360
- />
361
- <div v-if="!filteredRef.length" class="nothing-found">Nothing found</div>
362
- </div>
363
- <DoubleContour class="ui-dropdown__contour" />
386
+ <Teleport v-if="data.open" to="body">
387
+ <div ref="list" class="pl-dropdown__options" :style="optionsStyle" tabindex="-1">
388
+ <DropdownListItem
389
+ v-for="(item, index) in filteredRef"
390
+ :key="index"
391
+ :option="item"
392
+ :is-selected="item.isSelected"
393
+ :is-hovered="item.isActive"
394
+ :size="optionSize"
395
+ @click.stop="selectOption(item.value)"
396
+ />
397
+ <div v-if="!filteredRef.length" class="nothing-found">Nothing found</div>
398
+ </div>
399
+ </Teleport>
400
+ <DoubleContour class="pl-dropdown__contour" />
364
401
  </div>
365
402
  </div>
366
- <div v-if="computedError" class="ui-dropdown__error">{{ computedError }}</div>
367
- <div v-else-if="isLoadingOptions && loadingOptionsHelper" class="ui-dropdown__helper">{{ loadingOptionsHelper }}</div>
368
- <div v-else-if="helper" class="ui-dropdown__helper">{{ helper }}</div>
403
+ <div v-if="computedError" class="pl-dropdown__error">{{ computedError }}</div>
404
+ <div v-else-if="isLoadingOptions && loadingOptionsHelper" class="pl-dropdown__helper">{{ loadingOptionsHelper }}</div>
405
+ <div v-else-if="helper" class="pl-dropdown__helper">{{ helper }}</div>
369
406
  </div>
370
407
  </template>
@@ -2,6 +2,7 @@ import { describe, it, expect } from 'vitest';
2
2
 
3
3
  import { mount } from '@vue/test-utils';
4
4
  import PlDropdown from '../PlDropdown.vue';
5
+ import { delay } from '@milaboratories/helpers';
5
6
 
6
7
  describe('PlDropdown', () => {
7
8
  it('modelValue', async () => {
@@ -18,13 +19,13 @@ describe('PlDropdown', () => {
18
19
 
19
20
  await wrapper.find('input').trigger('focus');
20
21
 
21
- expect(await wrapper.findAll('.dropdown-list-item').length).toBe(2);
22
+ const options = [...document.body.querySelectorAll('.dropdown-list-item')] as HTMLElement[];
22
23
 
23
- await wrapper
24
- .findAll('.dropdown-list-item')
25
- .filter((node) => node.text().match(/Option 2/))
26
- .at(0)
27
- ?.trigger('click');
24
+ expect(options.length).toBe(2);
25
+
26
+ options[1].click();
27
+
28
+ await delay(20);
28
29
 
29
30
  expect(wrapper.props('modelValue')).toBe(2);
30
31
 
@@ -1,12 +1,73 @@
1
1
  @import "@/assets/mixins";
2
2
 
3
- .ui-dropdown {
3
+ .pl-dropdown__options {
4
+ --option-hover-bg: var(--btn-sec-hover-grey);
5
+
6
+ z-index: var(--z-dropdown-options);
7
+ border: 1px solid var(--border-color-div-grey);
8
+ position: absolute;
9
+ background-color: var(--pl-dropdown-options-bg);
10
+ border-radius: 6px;
11
+ max-height: 244px;
12
+ box-shadow: 0px 4px 12px -2px rgba(15, 36, 77, 0.08), 0px 6px 24px -2px rgba(15, 36, 77, 0.08);
13
+
14
+ @include scrollbar;
15
+
16
+ .nothing-found {
17
+ padding: 0 10px;
18
+ height: var(--control-height);
19
+ line-height: var(--control-height);
20
+ background-color: #fff;
21
+ opacity: 0.5;
22
+ font-style: italic;
23
+ }
24
+
25
+ .option {
26
+ position: relative;
27
+ padding: 0 30px 0 10px;
28
+ height: var(--control-height);
29
+ line-height: var(--control-height);
30
+ cursor: pointer;
31
+ user-select: none;
32
+
33
+ .checkmark {
34
+ position: absolute;
35
+ display: none;
36
+ right: 10px;
37
+ @include abs-center-y();
38
+ }
39
+
40
+ >span {
41
+ display: block;
42
+ overflow: hidden;
43
+ white-space: nowrap;
44
+ max-width: 100%;
45
+ text-overflow: ellipsis;
46
+ }
47
+
48
+ &.selected {
49
+ background-color: var(--color-active-select);
50
+
51
+ .checkmark {
52
+ display: block;
53
+ }
54
+ }
55
+
56
+ &.active:not(.selected) {
57
+ background-color: var(--option-hover-bg);
58
+ }
59
+
60
+ &:hover {
61
+ background-color: var(--option-hover-bg);
62
+ }
63
+ }
64
+ }
65
+
66
+ .pl-dropdown {
4
67
  $root: &;
5
68
 
6
69
  --contour-color: var(--txt-01);
7
70
  --contour-border-width: 1px;
8
- --options-bg: #fff;
9
- --option-hover-bg: var(--btn-sec-hover-grey);
10
71
 
11
72
  --label-offset-left-x: 8px;
12
73
  --label-offset-right-x: 8px;
@@ -20,10 +81,6 @@
20
81
  font-size: var(--font-size-base);
21
82
  font-weight: var(--font-weigh-base);
22
83
 
23
- [data-theme='dark'] & {
24
- --options-bg: #1b1b1f;
25
- }
26
-
27
84
  &__envelope {
28
85
  font-family: var(--control-font-family);
29
86
  min-width: 160px;
@@ -51,65 +108,6 @@
51
108
  pointer-events: none;
52
109
  }
53
110
 
54
- &__options {
55
- position: relative;
56
- background-color: var(--options-bg);
57
- border-radius: 0 0 6px 6px;
58
- max-height: 244px;
59
- border-top: 1px solid var(--color-div-black);
60
-
61
- @include scrollbar;
62
-
63
- .nothing-found {
64
- padding: 0 10px;
65
- height: var(--control-height);
66
- line-height: var(--control-height);
67
- background-color: #fff;
68
- opacity: 0.5;
69
- font-style: italic;
70
- }
71
-
72
- .option {
73
- position: relative;
74
- padding: 0 30px 0 10px;
75
- height: var(--control-height);
76
- line-height: var(--control-height);
77
- cursor: pointer;
78
- user-select: none;
79
-
80
- .checkmark {
81
- position: absolute;
82
- display: none;
83
- right: 10px;
84
- @include abs-center-y();
85
- }
86
-
87
- >span {
88
- display: block;
89
- overflow: hidden;
90
- white-space: nowrap;
91
- max-width: 100%;
92
- text-overflow: ellipsis;
93
- }
94
-
95
- &.selected {
96
- background-color: var(--color-active-select);
97
-
98
- .checkmark {
99
- display: block;
100
- }
101
- }
102
-
103
- &.active:not(.selected) {
104
- background-color: var(--option-hover-bg);
105
- }
106
-
107
- &:hover {
108
- background-color: var(--option-hover-bg);
109
- }
110
- }
111
- }
112
-
113
111
  &__field {
114
112
  position: relative;
115
113
  border-radius: 6px;
@@ -181,7 +179,7 @@
181
179
  gap: 6px;
182
180
  margin-left: auto;
183
181
 
184
- .icon-clear {
182
+ .icon-delete-clear {
185
183
  cursor: pointer;
186
184
  }
187
185