pdm-ui-kit 0.4.2 → 1.0.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 (363) hide show
  1. package/accordion/accordion.module.d.ts +8 -0
  2. package/accordion/index.d.ts +2 -0
  3. package/accordion/index.mjs +2 -0
  4. package/alert/alert.module.d.ts +9 -0
  5. package/alert/index.d.ts +3 -0
  6. package/alert/index.mjs +3 -0
  7. package/aspect-ratio/aspect-ratio.module.d.ts +8 -0
  8. package/aspect-ratio/index.d.ts +2 -0
  9. package/aspect-ratio/index.mjs +2 -0
  10. package/avatar/avatar.module.d.ts +8 -0
  11. package/avatar/index.d.ts +2 -0
  12. package/avatar/index.mjs +2 -0
  13. package/badge/badge.module.d.ts +8 -0
  14. package/badge/index.d.ts +2 -0
  15. package/badge/index.mjs +2 -0
  16. package/breadcrumb/breadcrumb.module.d.ts +8 -0
  17. package/breadcrumb/index.d.ts +2 -0
  18. package/breadcrumb/index.mjs +2 -0
  19. package/button/button.module.d.ts +9 -0
  20. package/button/index.d.ts +3 -0
  21. package/button/index.mjs +3 -0
  22. package/calendar/calendar.module.d.ts +11 -0
  23. package/{lib/components/date-picker → calendar}/date-picker.component.d.ts +1 -1
  24. package/calendar/index.d.ts +3 -0
  25. package/calendar/index.mjs +3 -0
  26. package/card/card.module.d.ts +8 -0
  27. package/card/index.d.ts +2 -0
  28. package/card/index.mjs +2 -0
  29. package/carousel/carousel.module.d.ts +8 -0
  30. package/carousel/index.d.ts +2 -0
  31. package/carousel/index.mjs +2 -0
  32. package/chart/chart.module.d.ts +8 -0
  33. package/chart/index.d.ts +2 -0
  34. package/chart/index.mjs +2 -0
  35. package/checkbox/checkbox.module.d.ts +8 -0
  36. package/checkbox/index.d.ts +2 -0
  37. package/checkbox/index.mjs +2 -0
  38. package/collapsible/collapsible.module.d.ts +8 -0
  39. package/collapsible/index.d.ts +2 -0
  40. package/collapsible/index.mjs +2 -0
  41. package/combobox/combobox.module.d.ts +9 -0
  42. package/combobox/index.d.ts +2 -0
  43. package/combobox/index.mjs +2 -0
  44. package/command/command.module.d.ts +9 -0
  45. package/command/index.d.ts +2 -0
  46. package/command/index.mjs +2 -0
  47. package/context-menu/context-menu.module.d.ts +9 -0
  48. package/context-menu/index.d.ts +2 -0
  49. package/context-menu/index.mjs +2 -0
  50. package/{lib/components/data-table → data-table}/data-table.component.d.ts +1 -1
  51. package/data-table/data-table.module.d.ts +10 -0
  52. package/{lib/components/draggable-table → data-table}/draggable-table.component.d.ts +2 -2
  53. package/data-table/index.d.ts +4 -0
  54. package/data-table/index.mjs +4 -0
  55. package/{lib/components/table → data-table}/table.component.d.ts +1 -1
  56. package/dialog/dialog.module.d.ts +8 -0
  57. package/dialog/index.d.ts +2 -0
  58. package/dialog/index.mjs +2 -0
  59. package/drawer/drawer.module.d.ts +10 -0
  60. package/drawer/index.d.ts +3 -0
  61. package/drawer/index.mjs +3 -0
  62. package/{lib/components/dropdown-menu → dropdown-menu}/dropdown-menu.component.d.ts +1 -1
  63. package/dropdown-menu/dropdown-menu.module.d.ts +9 -0
  64. package/dropdown-menu/index.d.ts +2 -0
  65. package/dropdown-menu/index.mjs +2 -0
  66. package/empty/empty.module.d.ts +10 -0
  67. package/empty/index.d.ts +2 -0
  68. package/empty/index.mjs +2 -0
  69. package/esm2020/{lib/components/accordion → accordion}/accordion.component.mjs +1 -1
  70. package/esm2020/accordion/accordion.module.mjs +21 -0
  71. package/esm2020/{lib/components/alert-dialog → alert}/alert-dialog.component.mjs +1 -1
  72. package/esm2020/{lib/components/alert → alert}/alert.component.mjs +1 -1
  73. package/esm2020/alert/alert.module.mjs +25 -0
  74. package/esm2020/{lib/components/aspect-ratio → aspect-ratio}/aspect-ratio.component.mjs +1 -1
  75. package/esm2020/aspect-ratio/aspect-ratio.module.mjs +21 -0
  76. package/esm2020/{lib/components/avatar → avatar}/avatar.component.mjs +1 -1
  77. package/esm2020/avatar/avatar.module.mjs +21 -0
  78. package/esm2020/{lib/components/badge → badge}/badge.component.mjs +1 -1
  79. package/esm2020/badge/badge.module.mjs +21 -0
  80. package/esm2020/{lib/components/breadcrumb → breadcrumb}/breadcrumb.component.mjs +1 -1
  81. package/esm2020/breadcrumb/breadcrumb.module.mjs +21 -0
  82. package/esm2020/button/button-group.component.mjs +236 -0
  83. package/esm2020/button/button.component.mjs +114 -0
  84. package/esm2020/button/button.module.mjs +25 -0
  85. package/esm2020/calendar/calendar.component.mjs +529 -0
  86. package/esm2020/calendar/calendar.module.mjs +22 -0
  87. package/esm2020/{lib/components/date-picker → calendar}/date-picker.component.mjs +6 -6
  88. package/esm2020/{lib/components/card → card}/card.component.mjs +1 -1
  89. package/esm2020/card/card.module.mjs +21 -0
  90. package/esm2020/carousel/carousel.component.mjs +102 -0
  91. package/esm2020/carousel/carousel.module.mjs +21 -0
  92. package/esm2020/{lib/components/chart → chart}/chart.component.mjs +1 -1
  93. package/esm2020/chart/chart.module.mjs +21 -0
  94. package/esm2020/{lib/components/checkbox → checkbox}/checkbox.component.mjs +1 -1
  95. package/esm2020/checkbox/checkbox.module.mjs +21 -0
  96. package/esm2020/{lib/components/collapsible → collapsible}/collapsible.component.mjs +1 -1
  97. package/esm2020/collapsible/collapsible.module.mjs +21 -0
  98. package/esm2020/combobox/combobox.component.mjs +173 -0
  99. package/esm2020/combobox/combobox.module.mjs +22 -0
  100. package/esm2020/command/command.component.mjs +75 -0
  101. package/esm2020/command/command.module.mjs +20 -0
  102. package/esm2020/context-menu/context-menu.component.mjs +165 -0
  103. package/esm2020/context-menu/context-menu.module.mjs +22 -0
  104. package/esm2020/data-table/data-table.component.mjs +299 -0
  105. package/esm2020/data-table/data-table.module.mjs +29 -0
  106. package/esm2020/data-table/draggable-table.component.mjs +300 -0
  107. package/esm2020/data-table/table.component.mjs +182 -0
  108. package/esm2020/{lib/components/dialog → dialog}/dialog.component.mjs +3 -3
  109. package/esm2020/dialog/dialog.module.mjs +21 -0
  110. package/esm2020/{lib/components/drawer → drawer}/drawer.component.mjs +2 -2
  111. package/esm2020/drawer/drawer.module.mjs +21 -0
  112. package/esm2020/drawer/sheet.component.mjs +116 -0
  113. package/esm2020/dropdown-menu/dropdown-menu.component.mjs +192 -0
  114. package/esm2020/dropdown-menu/dropdown-menu.module.mjs +22 -0
  115. package/esm2020/{lib/components/empty → empty}/empty.component.mjs +1 -1
  116. package/esm2020/empty/empty.module.mjs +21 -0
  117. package/esm2020/{lib/components/field → field}/field.component.mjs +1 -1
  118. package/esm2020/field/field.module.mjs +21 -0
  119. package/esm2020/hover-card/hover-card.component.mjs +205 -0
  120. package/esm2020/hover-card/hover-card.module.mjs +22 -0
  121. package/esm2020/icon/icon.component.mjs +144 -0
  122. package/esm2020/icon/icon.module.mjs +21 -0
  123. package/esm2020/{lib/components/input-group → input}/input-group.component.mjs +1 -1
  124. package/esm2020/input/input-otp.component.mjs +144 -0
  125. package/esm2020/{lib/components/input-password → input}/input-password.component.mjs +1 -1
  126. package/esm2020/{lib/components/input → input}/input.component.mjs +1 -1
  127. package/esm2020/input/input.module.mjs +38 -0
  128. package/esm2020/{lib/components/textarea → input}/textarea.component.mjs +1 -1
  129. package/esm2020/{lib/components/item → item}/item.component.mjs +1 -1
  130. package/esm2020/item/item.module.mjs +21 -0
  131. package/esm2020/{lib/components/kbd → kbd}/kbd.component.mjs +1 -1
  132. package/esm2020/kbd/kbd.module.mjs +21 -0
  133. package/esm2020/{lib/components/label → label}/label.component.mjs +1 -1
  134. package/esm2020/label/label.module.mjs +21 -0
  135. package/esm2020/menubar/menubar.component.mjs +144 -0
  136. package/esm2020/menubar/menubar.module.mjs +22 -0
  137. package/esm2020/{lib/components/native-select → native-select}/native-select.component.mjs +1 -1
  138. package/esm2020/native-select/native-select.module.mjs +20 -0
  139. package/esm2020/{lib/components/navigation-menu → navigation-menu}/navigation-menu.component.mjs +1 -1
  140. package/esm2020/navigation-menu/navigation-menu.module.mjs +21 -0
  141. package/esm2020/overlay/create-flexible-position-strategy.mjs +54 -0
  142. package/esm2020/overlay/pdm-outside-click.directive.mjs +86 -0
  143. package/esm2020/overlay/pdm-outside-click.module.mjs +18 -0
  144. package/esm2020/overlay/pdm-overlay-options.mjs +2 -0
  145. package/esm2020/overlay/z-index-helper.mjs +69 -0
  146. package/esm2020/{lib/components/pagination → pagination}/pagination.component.mjs +1 -1
  147. package/esm2020/pagination/pagination.module.mjs +21 -0
  148. package/esm2020/pdm-ui-kit.module.mjs +260 -0
  149. package/esm2020/popover/popover.component.mjs +162 -0
  150. package/esm2020/popover/popover.module.mjs +22 -0
  151. package/esm2020/{lib/components/progress → progress}/progress.component.mjs +1 -1
  152. package/esm2020/progress/progress.module.mjs +21 -0
  153. package/esm2020/public-api.mjs +117 -67
  154. package/esm2020/{lib/components/radio-group → radio-group}/radio-group.component.mjs +1 -1
  155. package/esm2020/radio-group/radio-group.module.mjs +21 -0
  156. package/esm2020/{lib/components/scroll-area → scroll-area}/scroll-area.component.mjs +1 -1
  157. package/esm2020/scroll-area/scroll-area.module.mjs +21 -0
  158. package/esm2020/select/select-option.directive.mjs +55 -0
  159. package/esm2020/select/select.component.mjs +164 -0
  160. package/esm2020/select/select.module.mjs +22 -0
  161. package/esm2020/{lib/components/separator → separator}/separator.component.mjs +1 -1
  162. package/esm2020/separator/separator.module.mjs +21 -0
  163. package/esm2020/{lib/components/sidebar → sidebar}/sidebar.component.mjs +1 -1
  164. package/esm2020/sidebar/sidebar.module.mjs +21 -0
  165. package/esm2020/{lib/components/skeleton → skeleton}/skeleton.component.mjs +1 -1
  166. package/esm2020/skeleton/skeleton.module.mjs +21 -0
  167. package/esm2020/{lib/components/slider → slider}/slider.component.mjs +1 -1
  168. package/esm2020/slider/slider.module.mjs +21 -0
  169. package/esm2020/{lib/components/sonner → sonner}/sonner.component.mjs +1 -1
  170. package/esm2020/sonner/sonner.module.mjs +20 -0
  171. package/esm2020/{lib/components/spinner → spinner}/spinner.component.mjs +1 -1
  172. package/esm2020/spinner/spinner.module.mjs +21 -0
  173. package/esm2020/switch/switch.component.mjs +58 -0
  174. package/esm2020/switch/switch.module.mjs +21 -0
  175. package/esm2020/{lib/components/tabs → tabs}/tabs.component.mjs +1 -1
  176. package/esm2020/tabs/tabs.module.mjs +21 -0
  177. package/esm2020/{lib/components/toggle-group → toggle}/toggle-group.component.mjs +1 -1
  178. package/esm2020/{lib/components/toggle → toggle}/toggle.component.mjs +1 -1
  179. package/esm2020/toggle/toggle.module.mjs +25 -0
  180. package/esm2020/tooltip/tooltip.component.mjs +176 -0
  181. package/esm2020/tooltip/tooltip.module.mjs +22 -0
  182. package/esm2020/utils/responsive.mjs +143 -0
  183. package/esm2020/utils/z-index.mjs +90 -0
  184. package/fesm2015/pdm-ui-kit.mjs +3332 -2492
  185. package/fesm2015/pdm-ui-kit.mjs.map +1 -1
  186. package/fesm2020/pdm-ui-kit.mjs +2668 -1828
  187. package/fesm2020/pdm-ui-kit.mjs.map +1 -1
  188. package/field/field.module.d.ts +8 -0
  189. package/field/index.d.ts +2 -0
  190. package/field/index.mjs +2 -0
  191. package/hover-card/hover-card.module.d.ts +9 -0
  192. package/hover-card/index.d.ts +2 -0
  193. package/hover-card/index.mjs +2 -0
  194. package/icon/icon.module.d.ts +8 -0
  195. package/icon/index.d.ts +2 -0
  196. package/icon/index.mjs +2 -0
  197. package/input/index.d.ts +6 -0
  198. package/input/index.mjs +6 -0
  199. package/input/input.module.d.ts +13 -0
  200. package/item/index.d.ts +2 -0
  201. package/item/index.mjs +2 -0
  202. package/item/item.module.d.ts +8 -0
  203. package/kbd/index.d.ts +2 -0
  204. package/kbd/index.mjs +2 -0
  205. package/kbd/kbd.module.d.ts +8 -0
  206. package/label/index.d.ts +2 -0
  207. package/label/index.mjs +2 -0
  208. package/label/label.module.d.ts +8 -0
  209. package/menubar/index.d.ts +2 -0
  210. package/menubar/index.mjs +2 -0
  211. package/menubar/menubar.module.d.ts +9 -0
  212. package/native-select/index.d.ts +2 -0
  213. package/native-select/index.mjs +2 -0
  214. package/native-select/native-select.module.d.ts +9 -0
  215. package/navigation-menu/index.d.ts +2 -0
  216. package/navigation-menu/index.mjs +2 -0
  217. package/navigation-menu/navigation-menu.module.d.ts +8 -0
  218. package/overlay/index.d.ts +8 -0
  219. package/overlay/index.mjs +8 -0
  220. package/overlay/pdm-outside-click.module.d.ts +8 -0
  221. package/package.json +198 -2
  222. package/pagination/index.d.ts +2 -0
  223. package/pagination/index.mjs +2 -0
  224. package/pagination/pagination.module.d.ts +10 -0
  225. package/pdm-ui-kit.module.d.ts +60 -0
  226. package/popover/index.d.ts +2 -0
  227. package/popover/index.mjs +2 -0
  228. package/popover/popover.module.d.ts +9 -0
  229. package/progress/index.d.ts +2 -0
  230. package/progress/index.mjs +2 -0
  231. package/progress/progress.module.d.ts +8 -0
  232. package/public-api.d.ts +114 -66
  233. package/radio-group/index.d.ts +2 -0
  234. package/radio-group/index.mjs +2 -0
  235. package/radio-group/radio-group.module.d.ts +8 -0
  236. package/scroll-area/index.d.ts +2 -0
  237. package/scroll-area/index.mjs +2 -0
  238. package/scroll-area/scroll-area.module.d.ts +8 -0
  239. package/select/index.d.ts +3 -0
  240. package/select/index.mjs +3 -0
  241. package/{lib/components/select → select}/select.component.d.ts +1 -1
  242. package/select/select.module.d.ts +11 -0
  243. package/separator/index.d.ts +2 -0
  244. package/separator/index.mjs +2 -0
  245. package/separator/separator.module.d.ts +8 -0
  246. package/sidebar/index.d.ts +2 -0
  247. package/sidebar/index.mjs +2 -0
  248. package/sidebar/sidebar.module.d.ts +8 -0
  249. package/skeleton/index.d.ts +2 -0
  250. package/skeleton/index.mjs +2 -0
  251. package/skeleton/skeleton.module.d.ts +8 -0
  252. package/slider/index.d.ts +2 -0
  253. package/slider/index.mjs +2 -0
  254. package/slider/slider.module.d.ts +8 -0
  255. package/sonner/index.d.ts +2 -0
  256. package/sonner/index.mjs +2 -0
  257. package/sonner/sonner.module.d.ts +9 -0
  258. package/spinner/index.d.ts +2 -0
  259. package/spinner/index.mjs +2 -0
  260. package/spinner/spinner.module.d.ts +8 -0
  261. package/switch/index.d.ts +2 -0
  262. package/switch/index.mjs +2 -0
  263. package/switch/switch.module.d.ts +8 -0
  264. package/tabs/index.d.ts +2 -0
  265. package/tabs/index.mjs +2 -0
  266. package/tabs/tabs.module.d.ts +8 -0
  267. package/toggle/index.d.ts +3 -0
  268. package/toggle/index.mjs +3 -0
  269. package/toggle/toggle.module.d.ts +9 -0
  270. package/tooltip/index.d.ts +2 -0
  271. package/tooltip/index.mjs +2 -0
  272. package/tooltip/tooltip.module.d.ts +9 -0
  273. package/utils/index.d.ts +3 -0
  274. package/utils/index.mjs +3 -0
  275. package/esm2020/lib/components/button/button.component.mjs +0 -114
  276. package/esm2020/lib/components/button-group/button-group.component.mjs +0 -236
  277. package/esm2020/lib/components/calendar/calendar.component.mjs +0 -529
  278. package/esm2020/lib/components/carousel/carousel.component.mjs +0 -102
  279. package/esm2020/lib/components/combobox/combobox.component.mjs +0 -173
  280. package/esm2020/lib/components/command/command.component.mjs +0 -75
  281. package/esm2020/lib/components/context-menu/context-menu.component.mjs +0 -165
  282. package/esm2020/lib/components/data-table/data-table.component.mjs +0 -299
  283. package/esm2020/lib/components/draggable-table/draggable-table.component.mjs +0 -300
  284. package/esm2020/lib/components/dropdown-menu/dropdown-menu.component.mjs +0 -192
  285. package/esm2020/lib/components/hover-card/hover-card.component.mjs +0 -205
  286. package/esm2020/lib/components/icon/icon.component.mjs +0 -144
  287. package/esm2020/lib/components/input-otp/input-otp.component.mjs +0 -144
  288. package/esm2020/lib/components/menubar/menubar.component.mjs +0 -144
  289. package/esm2020/lib/components/popover/popover.component.mjs +0 -162
  290. package/esm2020/lib/components/select/select-option.directive.mjs +0 -55
  291. package/esm2020/lib/components/select/select.component.mjs +0 -164
  292. package/esm2020/lib/components/sheet/sheet.component.mjs +0 -116
  293. package/esm2020/lib/components/switch/switch.component.mjs +0 -58
  294. package/esm2020/lib/components/table/table.component.mjs +0 -182
  295. package/esm2020/lib/components/tooltip/tooltip.component.mjs +0 -176
  296. package/esm2020/lib/overlay/create-flexible-position-strategy.mjs +0 -54
  297. package/esm2020/lib/overlay/pdm-outside-click.directive.mjs +0 -86
  298. package/esm2020/lib/overlay/pdm-overlay-options.mjs +0 -2
  299. package/esm2020/lib/overlay/z-index-helper.mjs +0 -69
  300. package/esm2020/lib/pdm-ui-kit.module.mjs +0 -258
  301. package/esm2020/lib/utils/responsive.mjs +0 -143
  302. package/esm2020/lib/utils/z-index.mjs +0 -90
  303. package/lib/pdm-ui-kit.module.d.ts +0 -68
  304. /package/{lib/components/accordion → accordion}/accordion.component.d.ts +0 -0
  305. /package/{lib/components/alert-dialog → alert}/alert-dialog.component.d.ts +0 -0
  306. /package/{lib/components/alert → alert}/alert.component.d.ts +0 -0
  307. /package/{lib/components/aspect-ratio → aspect-ratio}/aspect-ratio.component.d.ts +0 -0
  308. /package/{lib/components/avatar → avatar}/avatar.component.d.ts +0 -0
  309. /package/{lib/components/badge → badge}/badge.component.d.ts +0 -0
  310. /package/{lib/components/breadcrumb → breadcrumb}/breadcrumb.component.d.ts +0 -0
  311. /package/{lib/components/button-group → button}/button-group.component.d.ts +0 -0
  312. /package/{lib/components/button → button}/button.component.d.ts +0 -0
  313. /package/{lib/components/calendar → calendar}/calendar.component.d.ts +0 -0
  314. /package/{lib/components/card → card}/card.component.d.ts +0 -0
  315. /package/{lib/components/carousel → carousel}/carousel.component.d.ts +0 -0
  316. /package/{lib/components/chart → chart}/chart.component.d.ts +0 -0
  317. /package/{lib/components/checkbox → checkbox}/checkbox.component.d.ts +0 -0
  318. /package/{lib/components/collapsible → collapsible}/collapsible.component.d.ts +0 -0
  319. /package/{lib/components/combobox → combobox}/combobox.component.d.ts +0 -0
  320. /package/{lib/components/command → command}/command.component.d.ts +0 -0
  321. /package/{lib/components/context-menu → context-menu}/context-menu.component.d.ts +0 -0
  322. /package/{lib/components/dialog → dialog}/dialog.component.d.ts +0 -0
  323. /package/{lib/components/drawer → drawer}/drawer.component.d.ts +0 -0
  324. /package/{lib/components/sheet → drawer}/sheet.component.d.ts +0 -0
  325. /package/{lib/components/empty → empty}/empty.component.d.ts +0 -0
  326. /package/{lib/components/field → field}/field.component.d.ts +0 -0
  327. /package/{lib/components/hover-card → hover-card}/hover-card.component.d.ts +0 -0
  328. /package/{lib/components/icon → icon}/icon.component.d.ts +0 -0
  329. /package/{lib/components/input-group → input}/input-group.component.d.ts +0 -0
  330. /package/{lib/components/input-otp → input}/input-otp.component.d.ts +0 -0
  331. /package/{lib/components/input-password → input}/input-password.component.d.ts +0 -0
  332. /package/{lib/components/input → input}/input.component.d.ts +0 -0
  333. /package/{lib/components/textarea → input}/textarea.component.d.ts +0 -0
  334. /package/{lib/components/item → item}/item.component.d.ts +0 -0
  335. /package/{lib/components/kbd → kbd}/kbd.component.d.ts +0 -0
  336. /package/{lib/components/label → label}/label.component.d.ts +0 -0
  337. /package/{lib/components/menubar → menubar}/menubar.component.d.ts +0 -0
  338. /package/{lib/components/native-select → native-select}/native-select.component.d.ts +0 -0
  339. /package/{lib/components/navigation-menu → navigation-menu}/navigation-menu.component.d.ts +0 -0
  340. /package/{lib/overlay → overlay}/create-flexible-position-strategy.d.ts +0 -0
  341. /package/{lib/overlay → overlay}/pdm-outside-click.directive.d.ts +0 -0
  342. /package/{lib/overlay → overlay}/pdm-overlay-options.d.ts +0 -0
  343. /package/{lib/overlay → overlay}/z-index-helper.d.ts +0 -0
  344. /package/{lib/components/pagination → pagination}/pagination.component.d.ts +0 -0
  345. /package/{lib/components/popover → popover}/popover.component.d.ts +0 -0
  346. /package/{lib/components/progress → progress}/progress.component.d.ts +0 -0
  347. /package/{lib/components/radio-group → radio-group}/radio-group.component.d.ts +0 -0
  348. /package/{lib/components/scroll-area → scroll-area}/scroll-area.component.d.ts +0 -0
  349. /package/{lib/components/select → select}/select-option.directive.d.ts +0 -0
  350. /package/{lib/components/separator → separator}/separator.component.d.ts +0 -0
  351. /package/{lib/components/sidebar → sidebar}/sidebar.component.d.ts +0 -0
  352. /package/{lib/components/skeleton → skeleton}/skeleton.component.d.ts +0 -0
  353. /package/{lib/components/slider → slider}/slider.component.d.ts +0 -0
  354. /package/{lib/components/sonner → sonner}/sonner.component.d.ts +0 -0
  355. /package/{lib/components/spinner → spinner}/spinner.component.d.ts +0 -0
  356. /package/src/{lib/styles → styles}/tokens.css +0 -0
  357. /package/{lib/components/switch → switch}/switch.component.d.ts +0 -0
  358. /package/{lib/components/tabs → tabs}/tabs.component.d.ts +0 -0
  359. /package/{lib/components/toggle-group → toggle}/toggle-group.component.d.ts +0 -0
  360. /package/{lib/components/toggle → toggle}/toggle.component.d.ts +0 -0
  361. /package/{lib/components/tooltip → tooltip}/tooltip.component.d.ts +0 -0
  362. /package/{lib/utils → utils}/responsive.d.ts +0 -0
  363. /package/{lib/utils → utils}/z-index.d.ts +0 -0
@@ -0,0 +1,29 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { NgModule } from '@angular/core';
3
+ import { PdmDataTableComponent } from './data-table.component';
4
+ import { PdmDraggableTableComponent } from './draggable-table.component';
5
+ import { PdmTableComponent } from './table.component';
6
+ import * as i0 from "@angular/core";
7
+ const COMPONENTS = [
8
+ PdmDataTableComponent,
9
+ PdmDraggableTableComponent,
10
+ PdmTableComponent,
11
+ ];
12
+ export class PdmDataTableModule {
13
+ }
14
+ PdmDataTableModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmDataTableModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
15
+ PdmDataTableModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: PdmDataTableModule, declarations: [PdmDataTableComponent,
16
+ PdmDraggableTableComponent,
17
+ PdmTableComponent], imports: [CommonModule], exports: [PdmDataTableComponent,
18
+ PdmDraggableTableComponent,
19
+ PdmTableComponent] });
20
+ PdmDataTableModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmDataTableModule, imports: [CommonModule] });
21
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmDataTableModule, decorators: [{
22
+ type: NgModule,
23
+ args: [{
24
+ imports: [CommonModule],
25
+ declarations: COMPONENTS,
26
+ exports: COMPONENTS
27
+ }]
28
+ }] });
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGF0YS10YWJsZS9kYXRhLXRhYmxlLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7QUFFdEQsTUFBTSxVQUFVLEdBQUc7SUFDakIscUJBQXFCO0lBQ3JCLDBCQUEwQjtJQUMxQixpQkFBaUI7Q0FDbEIsQ0FBQztBQU9GLE1BQU0sT0FBTyxrQkFBa0I7OytHQUFsQixrQkFBa0I7Z0hBQWxCLGtCQUFrQixpQkFWN0IscUJBQXFCO1FBQ3JCLDBCQUEwQjtRQUMxQixpQkFBaUIsYUFJUCxZQUFZLGFBTnRCLHFCQUFxQjtRQUNyQiwwQkFBMEI7UUFDMUIsaUJBQWlCO2dIQVFOLGtCQUFrQixZQUpuQixZQUFZOzJGQUlYLGtCQUFrQjtrQkFMOUIsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUM7b0JBQ3ZCLFlBQVksRUFBRSxVQUFVO29CQUN4QixPQUFPLEVBQUUsVUFBVTtpQkFDcEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBkbURhdGFUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4vZGF0YS10YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGRtRHJhZ2dhYmxlVGFibGVDb21wb25lbnQgfSBmcm9tICcuL2RyYWdnYWJsZS10YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGRtVGFibGVDb21wb25lbnQgfSBmcm9tICcuL3RhYmxlLmNvbXBvbmVudCc7XG5cbmNvbnN0IENPTVBPTkVOVFMgPSBbXG4gIFBkbURhdGFUYWJsZUNvbXBvbmVudCxcbiAgUGRtRHJhZ2dhYmxlVGFibGVDb21wb25lbnQsXG4gIFBkbVRhYmxlQ29tcG9uZW50LFxuXTtcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIGRlY2xhcmF0aW9uczogQ09NUE9ORU5UUyxcbiAgZXhwb3J0czogQ09NUE9ORU5UU1xufSlcbmV4cG9ydCBjbGFzcyBQZG1EYXRhVGFibGVNb2R1bGUge31cbiJdfQ==
@@ -0,0 +1,300 @@
1
+ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/common";
4
+ /**
5
+ * Tabla con funcionalidad de reordenamiento de filas mediante drag & drop
6
+ *
7
+ * Extiende pdm-table agregando la capacidad de reordenar filas.
8
+ * Si no necesitás drag & drop, usá pdm-table directamente (más simple y liviano).
9
+ *
10
+ * @example
11
+ * <pdm-draggable-table
12
+ * variant="interactive"
13
+ * [reorderRows]="true"
14
+ * (rowOrderChange)="onOrderChange($event)">
15
+ * <tbody>
16
+ * <tr data-row-id="1"><td>Row 1</td></tr>
17
+ * <tr data-row-id="2"><td>Row 2</td></tr>
18
+ * </tbody>
19
+ * </pdm-draggable-table>
20
+ *
21
+ * IMPORTANTE: Cada <tr> debe tener un atributo data-row-id único
22
+ */
23
+ export class PdmDraggableTableComponent {
24
+ constructor(renderer) {
25
+ this.renderer = renderer;
26
+ this.variant = 'default';
27
+ this.responsiveStrategy = 'scroll';
28
+ this.className = '';
29
+ this.fullBleed = false;
30
+ /**
31
+ * Habilita el reordenamiento de filas mediante drag & drop
32
+ */
33
+ this.reorderRows = false;
34
+ /**
35
+ * Selector CSS para identificar los handles de drag
36
+ * Por defecto busca: [data-drag-handle], [data-slot=row-drag-handle], .row-drag-handle
37
+ * Si no encuentra ninguno, inserta un handle automático
38
+ */
39
+ this.dragHandleSelector = '[data-drag-handle],[data-slot=row-drag-handle],.row-drag-handle,[data-auto-drag-handle]';
40
+ /**
41
+ * Emite el nuevo orden de las filas cuando el usuario termina de arrastrar
42
+ * Array de data-row-id en el nuevo orden
43
+ */
44
+ this.rowOrderChange = new EventEmitter();
45
+ this.cleanupListeners = [];
46
+ this.draggedRow = null;
47
+ }
48
+ ngAfterViewInit() {
49
+ this.syncReorderBehavior();
50
+ }
51
+ // Getters para clases CSS (mismo comportamiento que pdm-table)
52
+ get wrapperClasses() {
53
+ const baseClasses = ['relative', 'w-full'];
54
+ const strategyClasses = this.getResponsiveStrategyClasses();
55
+ const variantClasses = this.getVariantWrapperClasses();
56
+ if (this.fullBleed && this.responsiveStrategy === 'scroll') {
57
+ baseClasses.push('-mx-4', 'px-4', 'sm:mx-0', 'sm:px-0');
58
+ }
59
+ return [
60
+ ...baseClasses,
61
+ ...strategyClasses,
62
+ ...variantClasses,
63
+ this.className
64
+ ].filter(Boolean);
65
+ }
66
+ get tableClasses() {
67
+ const baseClasses = ['w-full', 'caption-bottom', 'text-sm'];
68
+ const variantClasses = this.getVariantTableClasses();
69
+ const cellClasses = this.getCellClasses();
70
+ return [...baseClasses, ...variantClasses, ...cellClasses].filter(Boolean);
71
+ }
72
+ getResponsiveStrategyClasses() {
73
+ if (this.responsiveStrategy === 'scroll' || this.responsiveStrategy === 'wrap' || this.responsiveStrategy === 'collapse') {
74
+ return ['overflow-x-auto'];
75
+ }
76
+ return [];
77
+ }
78
+ getVariantWrapperClasses() {
79
+ if (this.variant === 'interactive') {
80
+ return ['rounded-xl', 'border border-solid', 'border-border', 'bg-background'];
81
+ }
82
+ if (this.variant === 'data') {
83
+ return ['rounded-md', 'border border-solid', 'border-border', 'bg-background'];
84
+ }
85
+ return [];
86
+ }
87
+ getVariantTableClasses() {
88
+ if (this.variant === 'data') {
89
+ return [
90
+ 'border-collapse', 'text-foreground',
91
+ '[&_thead_tr]:border-b', '[&_thead_tr]:border-border',
92
+ '[&_tbody_tr]:border-b', '[&_tbody_tr]:border-border',
93
+ '[&_tbody_tr:last-child]:border-b-0',
94
+ '[&_th]:h-10', '[&_th]:px-2', '[&_th]:text-left', '[&_th]:align-middle', '[&_th]:font-medium',
95
+ '[&_td]:p-2', '[&_td]:align-middle'
96
+ ];
97
+ }
98
+ if (this.variant === 'interactive') {
99
+ return [
100
+ 'text-foreground',
101
+ '[&_thead]:sticky', '[&_thead]:top-0', '[&_thead]:z-10', '[&_thead]:bg-muted/70',
102
+ '[&_thead_tr]:border-b', '[&_thead_tr]:border-border',
103
+ '[&_th]:h-12', '[&_th]:px-4', '[&_th]:text-left', '[&_th]:align-middle', '[&_th]:text-sm', '[&_th]:font-medium',
104
+ '[&_tbody_tr]:border-b', '[&_tbody_tr]:border-border',
105
+ '[&_tbody_tr]:transition-colors', '[&_tbody_tr:hover]:bg-muted/50',
106
+ '[&_tbody_tr:last-child]:border-b-0',
107
+ '[&_td]:h-14', '[&_td]:px-4', '[&_td]:align-middle', '[&_td]:text-sm',
108
+ '[&_svg]:text-muted-foreground'
109
+ ];
110
+ }
111
+ return [];
112
+ }
113
+ getCellClasses() {
114
+ if (this.responsiveStrategy === 'scroll') {
115
+ return ['[&_td]:whitespace-normal', '[&_th]:whitespace-normal', 'sm:[&_td]:whitespace-nowrap', 'sm:[&_th]:whitespace-nowrap'];
116
+ }
117
+ if (this.responsiveStrategy === 'wrap') {
118
+ return ['[&_td]:whitespace-normal', '[&_td]:break-words', '[&_th]:whitespace-normal'];
119
+ }
120
+ return [];
121
+ }
122
+ ngOnChanges(changes) {
123
+ if (changes['reorderRows'] || changes['variant']) {
124
+ this.syncReorderBehavior();
125
+ }
126
+ }
127
+ ngOnDestroy() {
128
+ this.cleanupReorderBehavior();
129
+ }
130
+ syncReorderBehavior() {
131
+ this.cleanupReorderBehavior();
132
+ if (!this.reorderRows) {
133
+ return;
134
+ }
135
+ const tbody = this.getTbody();
136
+ if (!tbody) {
137
+ return;
138
+ }
139
+ this.setRowsDraggable(tbody, true);
140
+ this.cleanupListeners.push(this.renderer.listen(tbody, 'mousedown', (event) => this.armDragFromHandle(event)), this.renderer.listen(tbody, 'dragstart', (event) => this.onDragStart(event)), this.renderer.listen(tbody, 'dragover', (event) => this.onDragOver(event, tbody)), this.renderer.listen(tbody, 'drop', (event) => this.onDrop(event)), this.renderer.listen(tbody, 'dragend', () => this.onDragEnd()));
141
+ // Observer para detectar cambios en el DOM (filas agregadas/removidas)
142
+ this.observer = new MutationObserver(() => this.setRowsDraggable(tbody, true));
143
+ this.observer.observe(tbody, { childList: true });
144
+ }
145
+ cleanupReorderBehavior() {
146
+ this.cleanupListeners.forEach((dispose) => dispose());
147
+ this.cleanupListeners = [];
148
+ if (this.observer) {
149
+ this.observer.disconnect();
150
+ this.observer = undefined;
151
+ }
152
+ const tbody = this.getTbody();
153
+ if (tbody) {
154
+ this.setRowsDraggable(tbody, false);
155
+ }
156
+ this.draggedRow = null;
157
+ }
158
+ getTbody() {
159
+ return this.tableElement?.nativeElement.tBodies.item(0) ?? null;
160
+ }
161
+ setRowsDraggable(tbody, enabled) {
162
+ const rows = Array.from(tbody.rows);
163
+ rows.forEach((row) => {
164
+ this.syncAutoDragHandle(row, enabled);
165
+ row.draggable = false;
166
+ if (!enabled) {
167
+ delete row.dataset['dragging'];
168
+ delete row.dataset['dragArmed'];
169
+ }
170
+ });
171
+ }
172
+ /**
173
+ * Inserta un handle de drag automático si no existe uno custom
174
+ */
175
+ syncAutoDragHandle(row, enabled) {
176
+ const firstCell = row.cells.item(0);
177
+ if (!firstCell) {
178
+ return;
179
+ }
180
+ const existingAutoHandle = firstCell.querySelector('[data-auto-drag-handle]');
181
+ if (!enabled) {
182
+ existingAutoHandle?.remove();
183
+ return;
184
+ }
185
+ const hasCustomHandle = !!firstCell.querySelector('[data-drag-handle],[data-slot=row-drag-handle],.row-drag-handle');
186
+ if (hasCustomHandle || existingAutoHandle) {
187
+ return;
188
+ }
189
+ // Crear handle automático
190
+ const button = this.renderer.createElement('button');
191
+ this.renderer.setAttribute(button, 'type', 'button');
192
+ this.renderer.setAttribute(button, 'aria-label', 'Drag row');
193
+ this.renderer.setAttribute(button, 'data-auto-drag-handle', 'true');
194
+ this.renderer.addClass(button, 'inline-flex');
195
+ this.renderer.addClass(button, 'h-7');
196
+ this.renderer.addClass(button, 'w-7');
197
+ this.renderer.addClass(button, 'items-center');
198
+ this.renderer.addClass(button, 'justify-center');
199
+ this.renderer.addClass(button, 'cursor-grab');
200
+ this.renderer.addClass(button, 'active:cursor-grabbing');
201
+ this.renderer.addClass(button, 'text-muted-foreground');
202
+ const dots = this.renderer.createElement('span');
203
+ this.renderer.addClass(dots, 'text-sm');
204
+ this.renderer.addClass(dots, 'leading-none');
205
+ this.renderer.setProperty(dots, 'textContent', '⋮⋮');
206
+ this.renderer.appendChild(button, dots);
207
+ this.renderer.insertBefore(firstCell, button, firstCell.firstChild);
208
+ }
209
+ onDragStart(event) {
210
+ const target = event.target;
211
+ const row = target?.closest('tr');
212
+ if (!row) {
213
+ return;
214
+ }
215
+ const handle = target?.closest(this.dragHandleSelector);
216
+ const isArmed = row.dataset['dragArmed'] === 'true';
217
+ if ((!handle || !row.contains(handle)) && !isArmed) {
218
+ event.preventDefault();
219
+ return;
220
+ }
221
+ this.draggedRow = row;
222
+ this.draggedRow.dataset['dragging'] = 'true';
223
+ if (event.dataTransfer) {
224
+ event.dataTransfer.effectAllowed = 'move';
225
+ event.dataTransfer.setData('text/plain', '');
226
+ }
227
+ }
228
+ onDragOver(event, tbody) {
229
+ if (!this.draggedRow) {
230
+ return;
231
+ }
232
+ event.preventDefault();
233
+ const target = event.target;
234
+ const targetRow = target?.closest('tr');
235
+ if (!targetRow || targetRow === this.draggedRow) {
236
+ return;
237
+ }
238
+ const rect = targetRow.getBoundingClientRect();
239
+ const shouldInsertBefore = event.clientY < rect.top + rect.height / 2;
240
+ tbody.insertBefore(this.draggedRow, shouldInsertBefore ? targetRow : targetRow.nextSibling);
241
+ }
242
+ onDrop(event) {
243
+ event.preventDefault();
244
+ }
245
+ onDragEnd() {
246
+ const tbody = this.getTbody();
247
+ if (tbody) {
248
+ Array.from(tbody.rows).forEach((row) => {
249
+ row.draggable = false;
250
+ delete row.dataset['dragArmed'];
251
+ });
252
+ }
253
+ if (this.draggedRow) {
254
+ delete this.draggedRow.dataset['dragging'];
255
+ this.draggedRow = null;
256
+ }
257
+ if (!tbody) {
258
+ return;
259
+ }
260
+ const order = Array.from(tbody.rows).map((row, index) => row.getAttribute('data-row-id') || String(index));
261
+ this.rowOrderChange.emit(order);
262
+ }
263
+ armDragFromHandle(event) {
264
+ const target = event.target;
265
+ const handle = target?.closest(this.dragHandleSelector);
266
+ if (!handle) {
267
+ return;
268
+ }
269
+ const row = handle.closest('tr');
270
+ if (!row) {
271
+ return;
272
+ }
273
+ row.draggable = true;
274
+ row.dataset['dragArmed'] = 'true';
275
+ }
276
+ }
277
+ PdmDraggableTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmDraggableTableComponent, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
278
+ PdmDraggableTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmDraggableTableComponent, selector: "pdm-draggable-table", inputs: { variant: "variant", responsiveStrategy: "responsiveStrategy", className: "className", fullBleed: "fullBleed", reorderRows: "reorderRows", dragHandleSelector: "dragHandleSelector" }, outputs: { rowOrderChange: "rowOrderChange" }, viewQueries: [{ propertyName: "tableElement", first: true, predicate: ["tableElement"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div [ngClass]=\"wrapperClasses\" [attr.data-slot]=\"variant === 'interactive' ? 'table-container' : null\">\n <table #tableElement [ngClass]=\"tableClasses\" [attr.data-slot]=\"variant === 'interactive' ? 'table' : null\">\n <ng-content></ng-content>\n </table>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
279
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmDraggableTableComponent, decorators: [{
280
+ type: Component,
281
+ args: [{ selector: 'pdm-draggable-table', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [ngClass]=\"wrapperClasses\" [attr.data-slot]=\"variant === 'interactive' ? 'table-container' : null\">\n <table #tableElement [ngClass]=\"tableClasses\" [attr.data-slot]=\"variant === 'interactive' ? 'table' : null\">\n <ng-content></ng-content>\n </table>\n</div>\n" }]
282
+ }], ctorParameters: function () { return [{ type: i0.Renderer2 }]; }, propDecorators: { variant: [{
283
+ type: Input
284
+ }], responsiveStrategy: [{
285
+ type: Input
286
+ }], className: [{
287
+ type: Input
288
+ }], fullBleed: [{
289
+ type: Input
290
+ }], reorderRows: [{
291
+ type: Input
292
+ }], dragHandleSelector: [{
293
+ type: Input
294
+ }], rowOrderChange: [{
295
+ type: Output
296
+ }], tableElement: [{
297
+ type: ViewChild,
298
+ args: ['tableElement']
299
+ }] } });
300
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZ2dhYmxlLXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kYXRhLXRhYmxlL2RyYWdnYWJsZS10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvZGF0YS10YWJsZS9kcmFnZ2FibGUtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBR04sU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDOzs7QUFJdkI7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQU1ILE1BQU0sT0FBTywwQkFBMEI7SUE4QnJDLFlBQTZCLFFBQW1CO1FBQW5CLGFBQVEsR0FBUixRQUFRLENBQVc7UUE3QnZDLFlBQU8sR0FBb0IsU0FBUyxDQUFDO1FBQ3JDLHVCQUFrQixHQUE0QixRQUFRLENBQUM7UUFDdkQsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNmLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFFM0I7O1dBRUc7UUFDTSxnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUU3Qjs7OztXQUlHO1FBQ00sdUJBQWtCLEdBQUcseUZBQXlGLENBQUM7UUFFeEg7OztXQUdHO1FBQ08sbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBWSxDQUFDO1FBSWhELHFCQUFnQixHQUFzQixFQUFFLENBQUM7UUFFekMsZUFBVSxHQUErQixJQUFJLENBQUM7SUFFSCxDQUFDO0lBRXBELGVBQWU7UUFDYixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsK0RBQStEO0lBQy9ELElBQUksY0FBYztRQUNoQixNQUFNLFdBQVcsR0FBRyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMzQyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztRQUM1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RSxxQkFBcUIsbUJBRWQsdUJBQXVCLENBQUMsTUFBTTtnR0FHdEMsT0FBTztzQkFBZixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBS0csV0FBVztzQkFBbkIsS0FBSztnQkFPRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBTUksY0FBYztzQkFBdkIsTUFBTTtnQkFFb0IsWUFBWTtzQkFBdEMsU0FBUzt1QkFBQyxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgUmVuZGVyZXIyLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQZG1UYWJsZVZhcmlhbnQgfSBmcm9tICcuL3RhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUYWJsZVJlc3BvbnNpdmVTdHJhdGVneSB9IGZyb20gJy4uL3V0aWxzL3Jlc3BvbnNpdmUnO1xuXG4vKipcbiAqIFRhYmxhIGNvbiBmdW5jaW9uYWxpZGFkIGRlIHJlb3JkZW5hbWllbnRvIGRlIGZpbGFzIG1lZGlhbnRlIGRyYWcgJiBkcm9wXG4gKiBcbiAqIEV4dGllbmRlIHBkbS10YWJsZSBhZ3JlZ2FuZG8gbGEgY2FwYWNpZGFkIGRlIHJlb3JkZW5hciBmaWxhcy5cbiAqIFNpIG5vIG5lY2VzaXTDoXMgZHJhZyAmIGRyb3AsIHVzw6EgcGRtLXRhYmxlIGRpcmVjdGFtZW50ZSAobcOhcyBzaW1wbGUgeSBsaXZpYW5vKS5cbiAqIFxuICogQGV4YW1wbGVcbiAqIDxwZG0tZHJhZ2dhYmxlLXRhYmxlIFxuICogICB2YXJpYW50PVwiaW50ZXJhY3RpdmVcIlxuICogICBbcmVvcmRlclJvd3NdPVwidHJ1ZVwiXG4gKiAgIChyb3dPcmRlckNoYW5nZSk9XCJvbk9yZGVyQ2hhbmdlKCRldmVudClcIj5cbiAqICAgPHRib2R5PlxuICogICAgIDx0ciBkYXRhLXJvdy1pZD1cIjFcIj48dGQ+Um93IDE8L3RkPjwvdHI+XG4gKiAgICAgPHRyIGRhdGEtcm93LWlkPVwiMlwiPjx0ZD5Sb3cgMjwvdGQ+PC90cj5cbiAqICAgPC90Ym9keT5cbiAqIDwvcGRtLWRyYWdnYWJsZS10YWJsZT5cbiAqIFxuICogSU1QT1JUQU5URTogQ2FkYSA8dHI+IGRlYmUgdGVuZXIgdW4gYXRyaWJ1dG8gZGF0YS1yb3ctaWQgw7puaWNvXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3BkbS1kcmFnZ2FibGUtdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vZHJhZ2dhYmxlLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgUGRtRHJhZ2dhYmxlVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIHZhcmlhbnQ6IFBkbVRhYmxlVmFyaWFudCA9ICdkZWZhdWx0JztcbiAgQElucHV0KCkgcmVzcG9uc2l2ZVN0cmF0ZWd5OiBUYWJsZVJlc3BvbnNpdmVTdHJhdGVneSA9ICdzY3JvbGwnO1xuICBASW5wdXQoKSBjbGFzc05hbWUgPSAnJztcbiAgQElucHV0KCkgZnVsbEJsZWVkID0gZmFsc2U7XG4gIFxuICAvKipcbiAgICogSGFiaWxpdGEgZWwgcmVvcmRlbmFtaWVudG8gZGUgZmlsYXMgbWVkaWFudGUgZHJhZyAmIGRyb3BcbiAgICovXG4gIEBJbnB1dCgpIHJlb3JkZXJSb3dzID0gZmFsc2U7XG4gIFxuICAvKipcbiAgICogU2VsZWN0b3IgQ1NTIHBhcmEgaWRlbnRpZmljYXIgbG9zIGhhbmRsZXMgZGUgZHJhZ1xuICAgKiBQb3IgZGVmZWN0byBidXNjYTogW2RhdGEtZHJhZy1oYW5kbGVdLCBbZGF0YS1zbG90PXJvdy1kcmFnLWhhbmRsZV0sIC5yb3ctZHJhZy1oYW5kbGVcbiAgICogU2kgbm8gZW5jdWVudHJhIG5pbmd1bm8sIGluc2VydGEgdW4gaGFuZGxlIGF1dG9tw6F0aWNvXG4gICAqL1xuICBASW5wdXQoKSBkcmFnSGFuZGxlU2VsZWN0b3IgPSAnW2RhdGEtZHJhZy1oYW5kbGVdLFtkYXRhLXNsb3Q9cm93LWRyYWctaGFuZGxlXSwucm93LWRyYWctaGFuZGxlLFtkYXRhLWF1dG8tZHJhZy1oYW5kbGVdJztcbiAgXG4gIC8qKlxuICAgKiBFbWl0ZSBlbCBudWV2byBvcmRlbiBkZSBsYXMgZmlsYXMgY3VhbmRvIGVsIHVzdWFyaW8gdGVybWluYSBkZSBhcnJhc3RyYXJcbiAgICogQXJyYXkgZGUgZGF0YS1yb3ctaWQgZW4gZWwgbnVldm8gb3JkZW5cbiAgICovXG4gIEBPdXRwdXQoKSByb3dPcmRlckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nW10+KCk7XG5cbiAgQFZpZXdDaGlsZCgndGFibGVFbGVtZW50JykgdGFibGVFbGVtZW50PzogRWxlbWVudFJlZjxIVE1MVGFibGVFbGVtZW50PjtcblxuICBwcml2YXRlIGNsZWFudXBMaXN0ZW5lcnM6IEFycmF5PCgpID0+IHZvaWQ+ID0gW107XG4gIHByaXZhdGUgb2JzZXJ2ZXI/OiBNdXRhdGlvbk9ic2VydmVyO1xuICBwcml2YXRlIGRyYWdnZWRSb3c6IEhUTUxUYWJsZVJvd0VsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHJlbmRlcmVyOiBSZW5kZXJlcjIpIHt9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc3luY1Jlb3JkZXJCZWhhdmlvcigpO1xuICB9XG5cbiAgLy8gR2V0dGVycyBwYXJhIGNsYXNlcyBDU1MgKG1pc21vIGNvbXBvcnRhbWllbnRvIHF1ZSBwZG0tdGFibGUpXG4gIGdldCB3cmFwcGVyQ2xhc3NlcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgYmFzZUNsYXNzZXMgPSBbJ3JlbGF0aXZlJywgJ3ctZnVsbCddO1xuICAgIGNvbnN0IHN0cmF0ZWd5Q2xhc3NlcyA9IHRoaXMuZ2V0UmVzcG9uc2l2ZVN0cmF0ZWd5Q2xhc3NlcygpO1xuICAgIGNvbnN0IHZhcmlhbnRDbGFzc2VzID0gdGhpcy5nZXRWYXJpYW50V3JhcHBlckNsYXNzZXMoKTtcbiAgICBcbiAgICBpZiAodGhpcy5mdWxsQmxlZWQgJiYgdGhpcy5yZXNwb25zaXZlU3RyYXRlZ3kgPT09ICdzY3JvbGwnKSB7XG4gICAgICBiYXNlQ2xhc3Nlcy5wdXNoKCctbXgtNCcsICdweC00JywgJ3NtOm14LTAnLCAnc206cHgtMCcpO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gW1xuICAgICAgLi4uYmFzZUNsYXNzZXMsXG4gICAgICAuLi5zdHJhdGVneUNsYXNzZXMsXG4gICAgICAuLi52YXJpYW50Q2xhc3NlcyxcbiAgICAgIHRoaXMuY2xhc3NOYW1lXG4gICAgXS5maWx0ZXIoQm9vbGVhbik7XG4gIH1cblxuICBnZXQgdGFibGVDbGFzc2VzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBiYXNlQ2xhc3NlcyA9IFsndy1mdWxsJywgJ2NhcHRpb24tYm90dG9tJywgJ3RleHQtc20nXTtcbiAgICBjb25zdCB2YXJpYW50Q2xhc3NlcyA9IHRoaXMuZ2V0VmFyaWFudFRhYmxlQ2xhc3NlcygpO1xuICAgIGNvbnN0IGNlbGxDbGFzc2VzID0gdGhpcy5nZXRDZWxsQ2xhc3NlcygpO1xuICAgIFxuICAgIHJldHVybiBbLi4uYmFzZUNsYXNzZXMsIC4uLnZhcmlhbnRDbGFzc2VzLCAuLi5jZWxsQ2xhc3Nlc10uZmlsdGVyKEJvb2xlYW4pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZXNwb25zaXZlU3RyYXRlZ3lDbGFzc2VzKCk6IHN0cmluZ1tdIHtcbiAgICBpZiAodGhpcy5yZXNwb25zaXZlU3RyYXRlZ3kgPT09ICdzY3JvbGwnIHx8IHRoaXMucmVzcG9uc2l2ZVN0cmF0ZWd5ID09PSAnd3JhcCcgfHwgdGhpcy5yZXNwb25zaXZlU3RyYXRlZ3kgPT09ICdjb2xsYXBzZScpIHtcbiAgICAgIHJldHVybiBbJ292ZXJmbG93LXgtYXV0byddO1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH1cblxuICBwcml2YXRlIGdldFZhcmlhbnRXcmFwcGVyQ2xhc3NlcygpOiBzdHJpbmdbXSB7XG4gICAgaWYgKHRoaXMudmFyaWFudCA9PT0gJ2ludGVyYWN0aXZlJykge1xuICAgICAgcmV0dXJuIFsncm91bmRlZC14bCcsICdib3JkZXIgYm9yZGVyLXNvbGlkJywgJ2JvcmRlci1ib3JkZXInLCAnYmctYmFja2dyb3VuZCddO1xuICAgIH1cbiAgICBpZiAodGhpcy52YXJpYW50ID09PSAnZGF0YScpIHtcbiAgICAgIHJldHVybiBbJ3JvdW5kZWQtbWQnLCAnYm9yZGVyIGJvcmRlci1zb2xpZCcsICdib3JkZXItYm9yZGVyJywgJ2JnLWJhY2tncm91bmQnXTtcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRWYXJpYW50VGFibGVDbGFzc2VzKCk6IHN0cmluZ1tdIHtcbiAgICBpZiAodGhpcy52YXJpYW50ID09PSAnZGF0YScpIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgICdib3JkZXItY29sbGFwc2UnLCAndGV4dC1mb3JlZ3JvdW5kJyxcbiAgICAgICAgJ1smX3RoZWFkX3RyXTpib3JkZXItYicsICdbJl90aGVhZF90cl06Ym9yZGVyLWJvcmRlcicsXG4gICAgICAgICdbJl90Ym9keV90cl06Ym9yZGVyLWInLCAnWyZfdGJvZHlfdHJdOmJvcmRlci1ib3JkZXInLFxuICAgICAgICAnWyZfdGJvZHlfdHI6bGFzdC1jaGlsZF06Ym9yZGVyLWItMCcsXG4gICAgICAgICdbJl90aF06aC0xMCcsICdbJl90aF06cHgtMicsICdbJl90aF06dGV4dC1sZWZ0JywgJ1smX3RoXTphbGlnbi1taWRkbGUnLCAnWyZfdGhdOmZvbnQtbWVkaXVtJyxcbiAgICAgICAgJ1smX3RkXTpwLTInLCAnWyZfdGRdOmFsaWduLW1pZGRsZSdcbiAgICAgIF07XG4gICAgfVxuICAgIFxuICAgIGlmICh0aGlzLnZhcmlhbnQgPT09ICdpbnRlcmFjdGl2ZScpIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgICd0ZXh0LWZvcmVncm91bmQnLFxuICAgICAgICAnWyZfdGhlYWRdOnN0aWNreScsICdbJl90aGVhZF06dG9wLTAnLCAnWyZfdGhlYWRdOnotMTAnLCAnWyZfdGhlYWRdOmJnLW11dGVkLzcwJyxcbiAgICAgICAgJ1smX3RoZWFkX3RyXTpib3JkZXItYicsICdbJl90aGVhZF90cl06Ym9yZGVyLWJvcmRlcicsXG4gICAgICAgICdbJl90aF06aC0xMicsICdbJl90aF06cHgtNCcsICdbJl90aF06dGV4dC1sZWZ0JywgJ1smX3RoXTphbGlnbi1taWRkbGUnLCAnWyZfdGhdOnRleHQtc20nLCAnWyZfdGhdOmZvbnQtbWVkaXVtJyxcbiAgICAgICAgJ1smX3Rib2R5X3RyXTpib3JkZXItYicsICdbJl90Ym9keV90cl06Ym9yZGVyLWJvcmRlcicsXG4gICAgICAgICdbJl90Ym9keV90cl06dHJhbnNpdGlvbi1jb2xvcnMnLCAnWyZfdGJvZHlfdHI6aG92ZXJdOmJnLW11dGVkLzUwJyxcbiAgICAgICAgJ1smX3Rib2R5X3RyOmxhc3QtY2hpbGRdOmJvcmRlci1iLTAnLFxuICAgICAgICAnWyZfdGRdOmgtMTQnLCAnWyZfdGRdOnB4LTQnLCAnWyZfdGRdOmFsaWduLW1pZGRsZScsICdbJl90ZF06dGV4dC1zbScsXG4gICAgICAgICdbJl9zdmddOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCdcbiAgICAgIF07XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2VsbENsYXNzZXMoKTogc3RyaW5nW10ge1xuICAgIGlmICh0aGlzLnJlc3BvbnNpdmVTdHJhdGVneSA9PT0gJ3Njcm9sbCcpIHtcbiAgICAgIHJldHVybiBbJ1smX3RkXTp3aGl0ZXNwYWNlLW5vcm1hbCcsICdbJl90aF06d2hpdGVzcGFjZS1ub3JtYWwnLCAnc206WyZfdGRdOndoaXRlc3BhY2Utbm93cmFwJywgJ3NtOlsmX3RoXTp3aGl0ZXNwYWNlLW5vd3JhcCddO1xuICAgIH1cbiAgICBpZiAodGhpcy5yZXNwb25zaXZlU3RyYXRlZ3kgPT09ICd3cmFwJykge1xuICAgICAgcmV0dXJuIFsnWyZfdGRdOndoaXRlc3BhY2Utbm9ybWFsJywgJ1smX3RkXTpicmVhay13b3JkcycsICdbJl90aF06d2hpdGVzcGFjZS1ub3JtYWwnXTtcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydyZW9yZGVyUm93cyddIHx8IGNoYW5nZXNbJ3ZhcmlhbnQnXSkge1xuICAgICAgdGhpcy5zeW5jUmVvcmRlckJlaGF2aW9yKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhbnVwUmVvcmRlckJlaGF2aW9yKCk7XG4gIH1cblxuICBwcml2YXRlIHN5bmNSZW9yZGVyQmVoYXZpb3IoKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhbnVwUmVvcmRlckJlaGF2aW9yKCk7XG5cbiAgICBpZiAoIXRoaXMucmVvcmRlclJvd3MpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0Ym9keSA9IHRoaXMuZ2V0VGJvZHkoKTtcbiAgICBpZiAoIXRib2R5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZXRSb3dzRHJhZ2dhYmxlKHRib2R5LCB0cnVlKTtcblxuICAgIHRoaXMuY2xlYW51cExpc3RlbmVycy5wdXNoKFxuICAgICAgdGhpcy5yZW5kZXJlci5saXN0ZW4odGJvZHksICdtb3VzZWRvd24nLCAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHRoaXMuYXJtRHJhZ0Zyb21IYW5kbGUoZXZlbnQpKSxcbiAgICAgIHRoaXMucmVuZGVyZXIubGlzdGVuKHRib2R5LCAnZHJhZ3N0YXJ0JywgKGV2ZW50OiBEcmFnRXZlbnQpID0+IHRoaXMub25EcmFnU3RhcnQoZXZlbnQpKSxcbiAgICAgIHRoaXMucmVuZGVyZXIubGlzdGVuKHRib2R5LCAnZHJhZ292ZXInLCAoZXZlbnQ6IERyYWdFdmVudCkgPT4gdGhpcy5vbkRyYWdPdmVyKGV2ZW50LCB0Ym9keSkpLFxuICAgICAgdGhpcy5yZW5kZXJlci5saXN0ZW4odGJvZHksICdkcm9wJywgKGV2ZW50OiBEcmFnRXZlbnQpID0+IHRoaXMub25Ecm9wKGV2ZW50KSksXG4gICAgICB0aGlzLnJlbmRlcmVyLmxpc3Rlbih0Ym9keSwgJ2RyYWdlbmQnLCAoKSA9PiB0aGlzLm9uRHJhZ0VuZCgpKVxuICAgICk7XG5cbiAgICAvLyBPYnNlcnZlciBwYXJhIGRldGVjdGFyIGNhbWJpb3MgZW4gZWwgRE9NIChmaWxhcyBhZ3JlZ2FkYXMvcmVtb3ZpZGFzKVxuICAgIHRoaXMub2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigoKSA9PiB0aGlzLnNldFJvd3NEcmFnZ2FibGUodGJvZHksIHRydWUpKTtcbiAgICB0aGlzLm9ic2VydmVyLm9ic2VydmUodGJvZHksIHsgY2hpbGRMaXN0OiB0cnVlIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhbnVwUmVvcmRlckJlaGF2aW9yKCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYW51cExpc3RlbmVycy5mb3JFYWNoKChkaXNwb3NlKSA9PiBkaXNwb3NlKCkpO1xuICAgIHRoaXMuY2xlYW51cExpc3RlbmVycyA9IFtdO1xuXG4gICAgaWYgKHRoaXMub2JzZXJ2ZXIpIHtcbiAgICAgIHRoaXMub2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgdGhpcy5vYnNlcnZlciA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCB0Ym9keSA9IHRoaXMuZ2V0VGJvZHkoKTtcbiAgICBpZiAodGJvZHkpIHtcbiAgICAgIHRoaXMuc2V0Um93c0RyYWdnYWJsZSh0Ym9keSwgZmFsc2UpO1xuICAgIH1cblxuICAgIHRoaXMuZHJhZ2dlZFJvdyA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGdldFRib2R5KCk6IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVFbGVtZW50Py5uYXRpdmVFbGVtZW50LnRCb2RpZXMuaXRlbSgwKSA/PyBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRSb3dzRHJhZ2dhYmxlKHRib2R5OiBIVE1MVGFibGVTZWN0aW9uRWxlbWVudCwgZW5hYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IHJvd3MgPSBBcnJheS5mcm9tKHRib2R5LnJvd3MpO1xuICAgIHJvd3MuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICB0aGlzLnN5bmNBdXRvRHJhZ0hhbmRsZShyb3csIGVuYWJsZWQpO1xuICAgICAgcm93LmRyYWdnYWJsZSA9IGZhbHNlO1xuICAgICAgaWYgKCFlbmFibGVkKSB7XG4gICAgICAgIGRlbGV0ZSByb3cuZGF0YXNldFsnZHJhZ2dpbmcnXTtcbiAgICAgICAgZGVsZXRlIHJvdy5kYXRhc2V0WydkcmFnQXJtZWQnXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnNlcnRhIHVuIGhhbmRsZSBkZSBkcmFnIGF1dG9tw6F0aWNvIHNpIG5vIGV4aXN0ZSB1bm8gY3VzdG9tXG4gICAqL1xuICBwcml2YXRlIHN5bmNBdXRvRHJhZ0hhbmRsZShyb3c6IEhUTUxUYWJsZVJvd0VsZW1lbnQsIGVuYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBmaXJzdENlbGwgPSByb3cuY2VsbHMuaXRlbSgwKTtcbiAgICBpZiAoIWZpcnN0Q2VsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGV4aXN0aW5nQXV0b0hhbmRsZSA9IGZpcnN0Q2VsbC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1hdXRvLWRyYWctaGFuZGxlXScpO1xuICAgIGlmICghZW5hYmxlZCkge1xuICAgICAgZXhpc3RpbmdBdXRvSGFuZGxlPy5yZW1vdmUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBoYXNDdXN0b21IYW5kbGUgPSAhIWZpcnN0Q2VsbC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1kcmFnLWhhbmRsZV0sW2RhdGEtc2xvdD1yb3ctZHJhZy1oYW5kbGVdLC5yb3ctZHJhZy1oYW5kbGUnKTtcbiAgICBpZiAoaGFzQ3VzdG9tSGFuZGxlIHx8IGV4aXN0aW5nQXV0b0hhbmRsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENyZWFyIGhhbmRsZSBhdXRvbcOhdGljb1xuICAgIGNvbnN0IGJ1dHRvbiA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnYnV0dG9uJykgYXMgSFRNTEJ1dHRvbkVsZW1lbnQ7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoYnV0dG9uLCAndHlwZScsICdidXR0b24nKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShidXR0b24sICdhcmlhLWxhYmVsJywgJ0RyYWcgcm93Jyk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoYnV0dG9uLCAnZGF0YS1hdXRvLWRyYWctaGFuZGxlJywgJ3RydWUnKTtcbiAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGJ1dHRvbiwgJ2lubGluZS1mbGV4Jyk7XG4gICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhidXR0b24sICdoLTcnKTtcbiAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGJ1dHRvbiwgJ3ctNycpO1xuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoYnV0dG9uLCAnaXRlbXMtY2VudGVyJyk7XG4gICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhidXR0b24sICdqdXN0aWZ5LWNlbnRlcicpO1xuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoYnV0dG9uLCAnY3Vyc29yLWdyYWInKTtcbiAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGJ1dHRvbiwgJ2FjdGl2ZTpjdXJzb3ItZ3JhYmJpbmcnKTtcbiAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGJ1dHRvbiwgJ3RleHQtbXV0ZWQtZm9yZWdyb3VuZCcpO1xuXG4gICAgY29uc3QgZG90cyA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZG90cywgJ3RleHQtc20nKTtcbiAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGRvdHMsICdsZWFkaW5nLW5vbmUnKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KGRvdHMsICd0ZXh0Q29udGVudCcsICfii67ii64nKTtcbiAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKGJ1dHRvbiwgZG90cyk7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmluc2VydEJlZm9yZShmaXJzdENlbGwsIGJ1dHRvbiwgZmlyc3RDZWxsLmZpcnN0Q2hpbGQpO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkRyYWdTdGFydChldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgICBjb25zdCByb3cgPSB0YXJnZXQ/LmNsb3Nlc3QoJ3RyJyk7XG4gICAgaWYgKCFyb3cpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBoYW5kbGUgPSB0YXJnZXQ/LmNsb3Nlc3QodGhpcy5kcmFnSGFuZGxlU2VsZWN0b3IpO1xuICAgIGNvbnN0IGlzQXJtZWQgPSByb3cuZGF0YXNldFsnZHJhZ0FybWVkJ10gPT09ICd0cnVlJztcbiAgICBpZiAoKCFoYW5kbGUgfHwgIXJvdy5jb250YWlucyhoYW5kbGUpKSAmJiAhaXNBcm1lZCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRyYWdnZWRSb3cgPSByb3cgYXMgSFRNTFRhYmxlUm93RWxlbWVudDtcbiAgICB0aGlzLmRyYWdnZWRSb3cuZGF0YXNldFsnZHJhZ2dpbmcnXSA9ICd0cnVlJztcblxuICAgIGlmIChldmVudC5kYXRhVHJhbnNmZXIpIHtcbiAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkID0gJ21vdmUnO1xuICAgICAgZXZlbnQuZGF0YVRyYW5zZmVyLnNldERhdGEoJ3RleHQvcGxhaW4nLCAnJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvbkRyYWdPdmVyKGV2ZW50OiBEcmFnRXZlbnQsIHRib2R5OiBIVE1MVGFibGVTZWN0aW9uRWxlbWVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kcmFnZ2VkUm93KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgIGNvbnN0IHRhcmdldFJvdyA9IHRhcmdldD8uY2xvc2VzdCgndHInKSBhcyBIVE1MVGFibGVSb3dFbGVtZW50IHwgbnVsbDtcblxuICAgIGlmICghdGFyZ2V0Um93IHx8IHRhcmdldFJvdyA9PT0gdGhpcy5kcmFnZ2VkUm93KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcmVjdCA9IHRhcmdldFJvdy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBzaG91bGRJbnNlcnRCZWZvcmUgPSBldmVudC5jbGllbnRZIDwgcmVjdC50b3AgKyByZWN0LmhlaWdodCAvIDI7XG4gICAgdGJvZHkuaW5zZXJ0QmVmb3JlKHRoaXMuZHJhZ2dlZFJvdywgc2hvdWxkSW5zZXJ0QmVmb3JlID8gdGFyZ2V0Um93IDogdGFyZ2V0Um93Lm5leHRTaWJsaW5nKTtcbiAgfVxuXG4gIHByaXZhdGUgb25Ecm9wKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkRyYWdFbmQoKTogdm9pZCB7XG4gICAgY29uc3QgdGJvZHkgPSB0aGlzLmdldFRib2R5KCk7XG4gICAgaWYgKHRib2R5KSB7XG4gICAgICBBcnJheS5mcm9tKHRib2R5LnJvd3MpLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICByb3cuZHJhZ2dhYmxlID0gZmFsc2U7XG4gICAgICAgIGRlbGV0ZSByb3cuZGF0YXNldFsnZHJhZ0FybWVkJ107XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kcmFnZ2VkUm93KSB7XG4gICAgICBkZWxldGUgdGhpcy5kcmFnZ2VkUm93LmRhdGFzZXRbJ2RyYWdnaW5nJ107XG4gICAgICB0aGlzLmRyYWdnZWRSb3cgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICghdGJvZHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBvcmRlciA9IEFycmF5LmZyb20odGJvZHkucm93cykubWFwKChyb3csIGluZGV4KSA9PiByb3cuZ2V0QXR0cmlidXRlKCdkYXRhLXJvdy1pZCcpIHx8IFN0cmluZyhpbmRleCkpO1xuICAgIHRoaXMucm93T3JkZXJDaGFuZ2UuZW1pdChvcmRlcik7XG4gIH1cblxuICBwcml2YXRlIGFybURyYWdGcm9tSGFuZGxlKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgICBjb25zdCBoYW5kbGUgPSB0YXJnZXQ/LmNsb3Nlc3QodGhpcy5kcmFnSGFuZGxlU2VsZWN0b3IpO1xuICAgIGlmICghaGFuZGxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgcm93ID0gaGFuZGxlLmNsb3Nlc3QoJ3RyJykgYXMgSFRNTFRhYmxlUm93RWxlbWVudCB8IG51bGw7XG4gICAgaWYgKCFyb3cpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByb3cuZHJhZ2dhYmxlID0gdHJ1ZTtcbiAgICByb3cuZGF0YXNldFsnZHJhZ0FybWVkJ10gPSAndHJ1ZSc7XG4gIH1cbn1cbiIsIjxkaXYgW25nQ2xhc3NdPVwid3JhcHBlckNsYXNzZXNcIiBbYXR0ci5kYXRhLXNsb3RdPVwidmFyaWFudCA9PT0gJ2ludGVyYWN0aXZlJyA/ICd0YWJsZS1jb250YWluZXInIDogbnVsbFwiPlxuICA8dGFibGUgI3RhYmxlRWxlbWVudCBbbmdDbGFzc109XCJ0YWJsZUNsYXNzZXNcIiBbYXR0ci5kYXRhLXNsb3RdPVwidmFyaWFudCA9PT0gJ2ludGVyYWN0aXZlJyA/ICd0YWJsZScgOiBudWxsXCI+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICA8L3RhYmxlPlxuPC9kaXY+XG4iXX0=
@@ -0,0 +1,182 @@
1
+ import { ChangeDetectionStrategy, Component, Input } from "@angular/core";
2
+ import { TABLE_RESPONSIVE, } from "../utils/responsive";
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ /**
6
+ * Componente base de tabla con soporte responsive
7
+ *
8
+ * SIMPLIFICADO: Ya no incluye drag & drop (usar pdm-draggable-table para eso)
9
+ *
10
+ * @example
11
+ * // Tabla simple con scroll horizontal
12
+ * <pdm-table variant="default">
13
+ * <thead><tr><th>Name</th><th>Email</th></tr></thead>
14
+ * <tbody><tr><td>John</td><td>john@example.com</td></tr></tbody>
15
+ * </pdm-table>
16
+ *
17
+ * @example
18
+ * // Tabla interactiva con wrap en mobile
19
+ * <pdm-table variant="interactive" responsiveStrategy="wrap">
20
+ * ...
21
+ * </pdm-table>
22
+ */
23
+ export class PdmTableComponent {
24
+ constructor() {
25
+ /**
26
+ * Variante visual de la tabla
27
+ * - default: tabla básica sin estilos extra
28
+ * - data: tabla con bordes y espaciado para data
29
+ * - interactive: tabla con hover, sticky header y estilos interactivos
30
+ */
31
+ this.variant = "default";
32
+ /**
33
+ * Estrategia responsive para la tabla
34
+ * - scroll: scroll horizontal en mobile (default, más simple)
35
+ * - wrap: permite que el contenido haga wrap
36
+ * - stack: convierte filas en cards en mobile (requiere data-label en celdas)
37
+ * - collapse: oculta columnas menos importantes en mobile
38
+ */
39
+ this.responsiveStrategy = "scroll";
40
+ /**
41
+ * Clases CSS adicionales para el wrapper
42
+ */
43
+ this.className = "";
44
+ /**
45
+ * Si es true, aplica padding negativo en mobile para scroll edge-to-edge
46
+ * Útil cuando la tabla está dentro de un container con padding
47
+ */
48
+ this.fullBleed = false;
49
+ }
50
+ get wrapperClasses() {
51
+ const baseClasses = ["relative", "w-full"];
52
+ const strategyClasses = this.getResponsiveStrategyClasses();
53
+ const variantClasses = this.getVariantWrapperClasses();
54
+ // Full bleed: scroll edge-to-edge en mobile
55
+ if (this.fullBleed && this.responsiveStrategy === "scroll") {
56
+ baseClasses.push("-mx-4", "px-4", "sm:mx-0", "sm:px-0");
57
+ }
58
+ return [
59
+ ...baseClasses,
60
+ ...strategyClasses,
61
+ ...variantClasses,
62
+ this.className,
63
+ ].filter(Boolean);
64
+ }
65
+ get tableClasses() {
66
+ const baseClasses = ["w-full", "caption-bottom", "text-sm"];
67
+ const variantClasses = this.getVariantTableClasses();
68
+ const cellClasses = this.getCellClasses();
69
+ return [...baseClasses, ...variantClasses, ...cellClasses].filter(Boolean);
70
+ }
71
+ getResponsiveStrategyClasses() {
72
+ const strategy = TABLE_RESPONSIVE[this.responsiveStrategy];
73
+ if (this.responsiveStrategy === "scroll") {
74
+ return ["overflow-x-auto"];
75
+ }
76
+ if (this.responsiveStrategy === "wrap") {
77
+ return ["overflow-x-auto"];
78
+ }
79
+ if (this.responsiveStrategy === "stack") {
80
+ // Stack requiere lógica en el template, aquí solo el wrapper
81
+ return [];
82
+ }
83
+ if (this.responsiveStrategy === "collapse") {
84
+ return ["overflow-x-auto"];
85
+ }
86
+ return ["overflow-auto"];
87
+ }
88
+ getVariantWrapperClasses() {
89
+ if (this.variant === "interactive") {
90
+ return ["rounded-xl", "border border-solid", "border-border", "bg-background"];
91
+ }
92
+ if (this.variant === "data") {
93
+ return ["rounded-md", "border border-solid", "border-border", "bg-background"];
94
+ }
95
+ return [];
96
+ }
97
+ getVariantTableClasses() {
98
+ if (this.variant === "data") {
99
+ return [
100
+ "border-collapse",
101
+ "text-foreground",
102
+ "[&_thead_tr]:border-b",
103
+ "[&_thead_tr]:border-border",
104
+ "[&_tbody_tr]:border-b",
105
+ "[&_tbody_tr]:border-border",
106
+ "[&_tbody_tr:last-child]:border-b-0",
107
+ "[&_th]:h-10",
108
+ "[&_th]:px-2",
109
+ "[&_th]:text-left",
110
+ "[&_th]:align-middle",
111
+ "[&_th]:font-medium",
112
+ "[&_td]:p-2",
113
+ "[&_td]:align-middle",
114
+ ];
115
+ }
116
+ if (this.variant === "interactive") {
117
+ return [
118
+ "text-foreground",
119
+ "[&_thead]:sticky",
120
+ "[&_thead]:top-0",
121
+ "[&_thead]:z-10",
122
+ "[&_thead]:bg-muted/70",
123
+ "[&_thead_tr]:border-b",
124
+ "[&_thead_tr]:border-border",
125
+ "[&_th]:h-12",
126
+ "[&_th]:px-4",
127
+ "[&_th]:text-left",
128
+ "[&_th]:align-middle",
129
+ "[&_th]:text-sm",
130
+ "[&_th]:font-medium",
131
+ "[&_tbody_tr]:border-b",
132
+ "[&_tbody_tr]:border-border",
133
+ "[&_tbody_tr]:transition-colors",
134
+ "[&_tbody_tr:hover]:bg-muted/50",
135
+ "[&_tbody_tr:last-child]:border-b-0",
136
+ "[&_td]:h-14",
137
+ "[&_td]:px-4",
138
+ "[&_td]:align-middle",
139
+ "[&_td]:text-sm",
140
+ "[&_svg]:text-muted-foreground",
141
+ ];
142
+ }
143
+ return [];
144
+ }
145
+ getCellClasses() {
146
+ // Manejo responsive de whitespace
147
+ if (this.responsiveStrategy === "scroll") {
148
+ // En scroll, permitir wrap en mobile, nowrap en desktop
149
+ return [
150
+ "[&_td]:whitespace-normal",
151
+ "[&_th]:whitespace-normal",
152
+ "sm:[&_td]:whitespace-nowrap",
153
+ "sm:[&_th]:whitespace-nowrap",
154
+ ];
155
+ }
156
+ if (this.responsiveStrategy === "wrap") {
157
+ // En wrap, siempre permitir wrap
158
+ return [
159
+ "[&_td]:whitespace-normal",
160
+ "[&_td]:break-words",
161
+ "[&_th]:whitespace-normal",
162
+ ];
163
+ }
164
+ // Default: nowrap (comportamiento anterior para backward compatibility)
165
+ return [];
166
+ }
167
+ }
168
+ PdmTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
169
+ PdmTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmTableComponent, selector: "pdm-table", inputs: { variant: "variant", responsiveStrategy: "responsiveStrategy", className: "className", fullBleed: "fullBleed" }, ngImport: i0, template: "<div [ngClass]=\"wrapperClasses\" [attr.data-slot]=\"variant === 'interactive' ? 'table-container' : null\">\n <table #tableElement [ngClass]=\"tableClasses\" [attr.data-slot]=\"variant === 'interactive' ? 'table' : null\">\n <ng-content></ng-content>\n </table>\n</div>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
170
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmTableComponent, decorators: [{
171
+ type: Component,
172
+ args: [{ selector: "pdm-table", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [ngClass]=\"wrapperClasses\" [attr.data-slot]=\"variant === 'interactive' ? 'table-container' : null\">\n <table #tableElement [ngClass]=\"tableClasses\" [attr.data-slot]=\"variant === 'interactive' ? 'table' : null\">\n <ng-content></ng-content>\n </table>\n</div>\n", styles: [":host{display:block}\n"] }]
173
+ }], propDecorators: { variant: [{
174
+ type: Input
175
+ }], responsiveStrategy: [{
176
+ type: Input
177
+ }], className: [{
178
+ type: Input
179
+ }], fullBleed: [{
180
+ type: Input
181
+ }] } });
182
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2RhdGEtdGFibGUvdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vc3JjL2RhdGEtdGFibGUvdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUUsT0FBTyxFQUVOLGdCQUFnQixHQUNoQixNQUFNLHFCQUFxQixDQUFDOzs7QUFJN0I7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBT0gsTUFBTSxPQUFPLGlCQUFpQjtJQU45QjtRQU9DOzs7OztXQUtHO1FBQ00sWUFBTyxHQUFvQixTQUFTLENBQUM7UUFFOUM7Ozs7OztXQU1HO1FBQ00sdUJBQWtCLEdBQTRCLFFBQVEsQ0FBQztRQUVoRTs7V0FFRztRQUNNLGNBQVMsR0FBRyxFQUFFLENBQUM7UUFFeEI7OztXQUdHO1FBQ00sY0FBUyxHQUFHLEtBQUssQ0FBQztLQTBJM0I7SUF4SUEsSUFBSSxjQUFjO1FBQ2pCLE1BQU0sV0FBVyxHQUFHLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzNDLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO1FBQzVELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBRXZELDRDQUE0QztRQUM1QyxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLGtCQUFrQixLQUFLLFFBQVEsRUFBRTtZQUMzRCxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1NBQ3hEO1FBRUQsT0FBTztZQUNOLEdBQUcsV0FBVztZQUNkLEdBQUcsZUFBZTtZQUNsQixHQUFHLGNBQWM7WUFDakIs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LDBCQUEwQjtnQkFDMUIsMEJBQTBCO2dCQUMxQiw2QkFBNkI7Z0JBQzdCLDZCQUE2QjthQUM3QixDQUFDO1NBQ0Y7UUFFRCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsS0FBSyxNQUFNLEVBQUU7WUFDdkMsaUNBQWlDO1lBQ2pDLE9BQU87Z0JBQ04sMEJBQTBCO2dCQUMxQixvQkFBb0I7Z0JBQ3BCLDBCQUEwQjthQUMxQixDQUFDO1NBQ0Y7UUFFRCx3RUFBd0U7UUFDeEUsT0FBTyxFQUFFLENBQUM7SUFDWCxDQUFDOzs4R0FwS1csaUJBQWlCO2tHQUFqQixpQkFBaUIsMktDaEM5Qix1UkFLQTsyRkQyQmEsaUJBQWlCO2tCQU43QixTQUFTOytCQUNDLFdBQVcsbUJBR0osdUJBQXVCLENBQUMsTUFBTTs4QkFTdEMsT0FBTztzQkFBZixLQUFLO2dCQVNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFLRyxTQUFTO3NCQUFqQixLQUFLO2dCQU1HLFNBQVM7c0JBQWpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge1xuXHR0eXBlIFRhYmxlUmVzcG9uc2l2ZVN0cmF0ZWd5LFxuXHRUQUJMRV9SRVNQT05TSVZFLFxufSBmcm9tIFwiLi4vdXRpbHMvcmVzcG9uc2l2ZVwiO1xuXG5leHBvcnQgdHlwZSBQZG1UYWJsZVZhcmlhbnQgPSBcImRlZmF1bHRcIiB8IFwiZGF0YVwiIHwgXCJpbnRlcmFjdGl2ZVwiO1xuXG4vKipcbiAqIENvbXBvbmVudGUgYmFzZSBkZSB0YWJsYSBjb24gc29wb3J0ZSByZXNwb25zaXZlXG4gKlxuICogU0lNUExJRklDQURPOiBZYSBubyBpbmNsdXllIGRyYWcgJiBkcm9wICh1c2FyIHBkbS1kcmFnZ2FibGUtdGFibGUgcGFyYSBlc28pXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRhYmxhIHNpbXBsZSBjb24gc2Nyb2xsIGhvcml6b250YWxcbiAqIDxwZG0tdGFibGUgdmFyaWFudD1cImRlZmF1bHRcIj5cbiAqICAgPHRoZWFkPjx0cj48dGg+TmFtZTwvdGg+PHRoPkVtYWlsPC90aD48L3RyPjwvdGhlYWQ+XG4gKiAgIDx0Ym9keT48dHI+PHRkPkpvaG48L3RkPjx0ZD5qb2huQGV4YW1wbGUuY29tPC90ZD48L3RyPjwvdGJvZHk+XG4gKiA8L3BkbS10YWJsZT5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gVGFibGEgaW50ZXJhY3RpdmEgY29uIHdyYXAgZW4gbW9iaWxlXG4gKiA8cGRtLXRhYmxlIHZhcmlhbnQ9XCJpbnRlcmFjdGl2ZVwiIHJlc3BvbnNpdmVTdHJhdGVneT1cIndyYXBcIj5cbiAqICAgLi4uXG4gKiA8L3BkbS10YWJsZT5cbiAqL1xuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiBcInBkbS10YWJsZVwiLFxuXHR0ZW1wbGF0ZVVybDogXCIuL3RhYmxlLmNvbXBvbmVudC5odG1sXCIsXG5cdHN0eWxlczogW1wiOmhvc3QgeyBkaXNwbGF5OiBibG9jazsgfVwiXSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFBkbVRhYmxlQ29tcG9uZW50IHtcblx0LyoqXG5cdCAqIFZhcmlhbnRlIHZpc3VhbCBkZSBsYSB0YWJsYVxuXHQgKiAtIGRlZmF1bHQ6IHRhYmxhIGLDoXNpY2Egc2luIGVzdGlsb3MgZXh0cmFcblx0ICogLSBkYXRhOiB0YWJsYSBjb24gYm9yZGVzIHkgZXNwYWNpYWRvIHBhcmEgZGF0YVxuXHQgKiAtIGludGVyYWN0aXZlOiB0YWJsYSBjb24gaG92ZXIsIHN0aWNreSBoZWFkZXIgeSBlc3RpbG9zIGludGVyYWN0aXZvc1xuXHQgKi9cblx0QElucHV0KCkgdmFyaWFudDogUGRtVGFibGVWYXJpYW50ID0gXCJkZWZhdWx0XCI7XG5cblx0LyoqXG5cdCAqIEVzdHJhdGVnaWEgcmVzcG9uc2l2ZSBwYXJhIGxhIHRhYmxhXG5cdCAqIC0gc2Nyb2xsOiBzY3JvbGwgaG9yaXpvbnRhbCBlbiBtb2JpbGUgKGRlZmF1bHQsIG3DoXMgc2ltcGxlKVxuXHQgKiAtIHdyYXA6IHBlcm1pdGUgcXVlIGVsIGNvbnRlbmlkbyBoYWdhIHdyYXBcblx0ICogLSBzdGFjazogY29udmllcnRlIGZpbGFzIGVuIGNhcmRzIGVuIG1vYmlsZSAocmVxdWllcmUgZGF0YS1sYWJlbCBlbiBjZWxkYXMpXG5cdCAqIC0gY29sbGFwc2U6IG9jdWx0YSBjb2x1bW5hcyBtZW5vcyBpbXBvcnRhbnRlcyBlbiBtb2JpbGVcblx0ICovXG5cdEBJbnB1dCgpIHJlc3BvbnNpdmVTdHJhdGVneTogVGFibGVSZXNwb25zaXZlU3RyYXRlZ3kgPSBcInNjcm9sbFwiO1xuXG5cdC8qKlxuXHQgKiBDbGFzZXMgQ1NTIGFkaWNpb25hbGVzIHBhcmEgZWwgd3JhcHBlclxuXHQgKi9cblx0QElucHV0KCkgY2xhc3NOYW1lID0gXCJcIjtcblxuXHQvKipcblx0ICogU2kgZXMgdHJ1ZSwgYXBsaWNhIHBhZGRpbmcgbmVnYXRpdm8gZW4gbW9iaWxlIHBhcmEgc2Nyb2xsIGVkZ2UtdG8tZWRnZVxuXHQgKiDDmnRpbCBjdWFuZG8gbGEgdGFibGEgZXN0w6EgZGVudHJvIGRlIHVuIGNvbnRhaW5lciBjb24gcGFkZGluZ1xuXHQgKi9cblx0QElucHV0KCkgZnVsbEJsZWVkID0gZmFsc2U7XG5cblx0Z2V0IHdyYXBwZXJDbGFzc2VzKCk6IHN0cmluZ1tdIHtcblx0XHRjb25zdCBiYXNlQ2xhc3NlcyA9IFtcInJlbGF0aXZlXCIsIFwidy1mdWxsXCJdO1xuXHRcdGNvbnN0IHN0cmF0ZWd5Q2xhc3NlcyA9IHRoaXMuZ2V0UmVzcG9uc2l2ZVN0cmF0ZWd5Q2xhc3NlcygpO1xuXHRcdGNvbnN0IHZhcmlhbnRDbGFzc2VzID0gdGhpcy5nZXRWYXJpYW50V3JhcHBlckNsYXNzZXMoKTtcblxuXHRcdC8vIEZ1bGwgYmxlZWQ6IHNjcm9sbCBlZGdlLXRvLWVkZ2UgZW4gbW9iaWxlXG5cdFx0aWYgKHRoaXMuZnVsbEJsZWVkICYmIHRoaXMucmVzcG9uc2l2ZVN0cmF0ZWd5ID09PSBcInNjcm9sbFwiKSB7XG5cdFx0XHRiYXNlQ2xhc3Nlcy5wdXNoKFwiLW14LTRcIiwgXCJweC00XCIsIFwic206bXgtMFwiLCBcInNtOnB4LTBcIik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFtcblx0XHRcdC4uLmJhc2VDbGFzc2VzLFxuXHRcdFx0Li4uc3RyYXRlZ3lDbGFzc2VzLFxuXHRcdFx0Li4udmFyaWFudENsYXNzZXMsXG5cdFx0XHR0aGlzLmNsYXNzTmFtZSxcblx0XHRdLmZpbHRlcihCb29sZWFuKTtcblx0fVxuXG5cdGdldCB0YWJsZUNsYXNzZXMoKTogc3RyaW5nW10ge1xuXHRcdGNvbnN0IGJhc2VDbGFzc2VzID0gW1widy1mdWxsXCIsIFwiY2FwdGlvbi1ib3R0b21cIiwgXCJ0ZXh0LXNtXCJdO1xuXHRcdGNvbnN0IHZhcmlhbnRDbGFzc2VzID0gdGhpcy5nZXRWYXJpYW50VGFibGVDbGFzc2VzKCk7XG5cdFx0Y29uc3QgY2VsbENsYXNzZXMgPSB0aGlzLmdldENlbGxDbGFzc2VzKCk7XG5cblx0XHRyZXR1cm4gWy4uLmJhc2VDbGFzc2VzLCAuLi52YXJpYW50Q2xhc3NlcywgLi4uY2VsbENsYXNzZXNdLmZpbHRlcihCb29sZWFuKTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0UmVzcG9uc2l2ZVN0cmF0ZWd5Q2xhc3NlcygpOiBzdHJpbmdbXSB7XG5cdFx0Y29uc3Qgc3RyYXRlZ3kgPSBUQUJMRV9SRVNQT05TSVZFW3RoaXMucmVzcG9uc2l2ZVN0cmF0ZWd5XTtcblxuXHRcdGlmICh0aGlzLnJlc3BvbnNpdmVTdHJhdGVneSA9PT0gXCJzY3JvbGxcIikge1xuXHRcdFx0cmV0dXJuIFtcIm92ZXJmbG93LXgtYXV0b1wiXTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5yZXNwb25zaXZlU3RyYXRlZ3kgPT09IFwid3JhcFwiKSB7XG5cdFx0XHRyZXR1cm4gW1wib3ZlcmZsb3cteC1hdXRvXCJdO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLnJlc3BvbnNpdmVTdHJhdGVneSA9PT0gXCJzdGFja1wiKSB7XG5cdFx0XHQvLyBTdGFjayByZXF1aWVyZSBsw7NnaWNhIGVuIGVsIHRlbXBsYXRlLCBhcXXDrSBzb2xvIGVsIHdyYXBwZXJcblx0XHRcdHJldHVybiBbXTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5yZXNwb25zaXZlU3RyYXRlZ3kgPT09IFwiY29sbGFwc2VcIikge1xuXHRcdFx0cmV0dXJuIFtcIm92ZXJmbG93LXgtYXV0b1wiXTtcblx0XHR9XG5cblx0XHRyZXR1cm4gW1wib3ZlcmZsb3ctYXV0b1wiXTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0VmFyaWFudFdyYXBwZXJDbGFzc2VzKCk6IHN0cmluZ1tdIHtcblx0XHRpZiAodGhpcy52YXJpYW50ID09PSBcImludGVyYWN0aXZlXCIpIHtcblx0XHRcdHJldHVybiBbXCJyb3VuZGVkLXhsXCIsIFwiYm9yZGVyIGJvcmRlci1zb2xpZFwiLCBcImJvcmRlci1ib3JkZXJcIiwgXCJiZy1iYWNrZ3JvdW5kXCJdO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLnZhcmlhbnQgPT09IFwiZGF0YVwiKSB7XG5cdFx0XHRyZXR1cm4gW1wicm91bmRlZC1tZFwiLCBcImJvcmRlciBib3JkZXItc29saWRcIiwgXCJib3JkZXItYm9yZGVyXCIsIFwiYmctYmFja2dyb3VuZFwiXTtcblx0XHR9XG5cblx0XHRyZXR1cm4gW107XG5cdH1cblxuXHRwcml2YXRlIGdldFZhcmlhbnRUYWJsZUNsYXNzZXMoKTogc3RyaW5nW10ge1xuXHRcdGlmICh0aGlzLnZhcmlhbnQgPT09IFwiZGF0YVwiKSB7XG5cdFx0XHRyZXR1cm4gW1xuXHRcdFx0XHRcImJvcmRlci1jb2xsYXBzZVwiLFxuXHRcdFx0XHRcInRleHQtZm9yZWdyb3VuZFwiLFxuXHRcdFx0XHRcIlsmX3RoZWFkX3RyXTpib3JkZXItYlwiLFxuXHRcdFx0XHRcIlsmX3RoZWFkX3RyXTpib3JkZXItYm9yZGVyXCIsXG5cdFx0XHRcdFwiWyZfdGJvZHlfdHJdOmJvcmRlci1iXCIsXG5cdFx0XHRcdFwiWyZfdGJvZHlfdHJdOmJvcmRlci1ib3JkZXJcIixcblx0XHRcdFx0XCJbJl90Ym9keV90cjpsYXN0LWNoaWxkXTpib3JkZXItYi0wXCIsXG5cdFx0XHRcdFwiWyZfdGhdOmgtMTBcIixcblx0XHRcdFx0XCJbJl90aF06cHgtMlwiLFxuXHRcdFx0XHRcIlsmX3RoXTp0ZXh0LWxlZnRcIixcblx0XHRcdFx0XCJbJl90aF06YWxpZ24tbWlkZGxlXCIsXG5cdFx0XHRcdFwiWyZfdGhdOmZvbnQtbWVkaXVtXCIsXG5cdFx0XHRcdFwiWyZfdGRdOnAtMlwiLFxuXHRcdFx0XHRcIlsmX3RkXTphbGlnbi1taWRkbGVcIixcblx0XHRcdF07XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMudmFyaWFudCA9PT0gXCJpbnRlcmFjdGl2ZVwiKSB7XG5cdFx0XHRyZXR1cm4gW1xuXHRcdFx0XHRcInRleHQtZm9yZWdyb3VuZFwiLFxuXHRcdFx0XHRcIlsmX3RoZWFkXTpzdGlja3lcIixcblx0XHRcdFx0XCJbJl90aGVhZF06dG9wLTBcIixcblx0XHRcdFx0XCJbJl90aGVhZF06ei0xMFwiLFxuXHRcdFx0XHRcIlsmX3RoZWFkXTpiZy1tdXRlZC83MFwiLFxuXHRcdFx0XHRcIlsmX3RoZWFkX3RyXTpib3JkZXItYlwiLFxuXHRcdFx0XHRcIlsmX3RoZWFkX3RyXTpib3JkZXItYm9yZGVyXCIsXG5cdFx0XHRcdFwiWyZfdGhdOmgtMTJcIixcblx0XHRcdFx0XCJbJl90aF06cHgtNFwiLFxuXHRcdFx0XHRcIlsmX3RoXTp0ZXh0LWxlZnRcIixcblx0XHRcdFx0XCJbJl90aF06YWxpZ24tbWlkZGxlXCIsXG5cdFx0XHRcdFwiWyZfdGhdOnRleHQtc21cIixcblx0XHRcdFx0XCJbJl90aF06Zm9udC1tZWRpdW1cIixcblx0XHRcdFx0XCJbJl90Ym9keV90cl06Ym9yZGVyLWJcIixcblx0XHRcdFx0XCJbJl90Ym9keV90cl06Ym9yZGVyLWJvcmRlclwiLFxuXHRcdFx0XHRcIlsmX3Rib2R5X3RyXTp0cmFuc2l0aW9uLWNvbG9yc1wiLFxuXHRcdFx0XHRcIlsmX3Rib2R5X3RyOmhvdmVyXTpiZy1tdXRlZC81MFwiLFxuXHRcdFx0XHRcIlsmX3Rib2R5X3RyOmxhc3QtY2hpbGRdOmJvcmRlci1iLTBcIixcblx0XHRcdFx0XCJbJl90ZF06aC0xNFwiLFxuXHRcdFx0XHRcIlsmX3RkXTpweC00XCIsXG5cdFx0XHRcdFwiWyZfdGRdOmFsaWduLW1pZGRsZVwiLFxuXHRcdFx0XHRcIlsmX3RkXTp0ZXh0LXNtXCIsXG5cdFx0XHRcdFwiWyZfc3ZnXTp0ZXh0LW11dGVkLWZvcmVncm91bmRcIixcblx0XHRcdF07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRDZWxsQ2xhc3NlcygpOiBzdHJpbmdbXSB7XG5cdFx0Ly8gTWFuZWpvIHJlc3BvbnNpdmUgZGUgd2hpdGVzcGFjZVxuXHRcdGlmICh0aGlzLnJlc3BvbnNpdmVTdHJhdGVneSA9PT0gXCJzY3JvbGxcIikge1xuXHRcdFx0Ly8gRW4gc2Nyb2xsLCBwZXJtaXRpciB3cmFwIGVuIG1vYmlsZSwgbm93cmFwIGVuIGRlc2t0b3Bcblx0XHRcdHJldHVybiBbXG5cdFx0XHRcdFwiWyZfdGRdOndoaXRlc3BhY2Utbm9ybWFsXCIsXG5cdFx0XHRcdFwiWyZfdGhdOndoaXRlc3BhY2Utbm9ybWFsXCIsXG5cdFx0XHRcdFwic206WyZfdGRdOndoaXRlc3BhY2Utbm93cmFwXCIsXG5cdFx0XHRcdFwic206WyZfdGhdOndoaXRlc3BhY2Utbm93cmFwXCIsXG5cdFx0XHRdO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLnJlc3BvbnNpdmVTdHJhdGVneSA9PT0gXCJ3cmFwXCIpIHtcblx0XHRcdC8vIEVuIHdyYXAsIHNpZW1wcmUgcGVybWl0aXIgd3JhcFxuXHRcdFx0cmV0dXJuIFtcblx0XHRcdFx0XCJbJl90ZF06d2hpdGVzcGFjZS1ub3JtYWxcIixcblx0XHRcdFx0XCJbJl90ZF06YnJlYWstd29yZHNcIixcblx0XHRcdFx0XCJbJl90aF06d2hpdGVzcGFjZS1ub3JtYWxcIixcblx0XHRcdF07XG5cdFx0fVxuXG5cdFx0Ly8gRGVmYXVsdDogbm93cmFwIChjb21wb3J0YW1pZW50byBhbnRlcmlvciBwYXJhIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpXG5cdFx0cmV0dXJuIFtdO1xuXHR9XG59XG4iLCI8ZGl2IFtuZ0NsYXNzXT1cIndyYXBwZXJDbGFzc2VzXCIgW2F0dHIuZGF0YS1zbG90XT1cInZhcmlhbnQgPT09ICdpbnRlcmFjdGl2ZScgPyAndGFibGUtY29udGFpbmVyJyA6IG51bGxcIj5cbiAgPHRhYmxlICN0YWJsZUVsZW1lbnQgW25nQ2xhc3NdPVwidGFibGVDbGFzc2VzXCIgW2F0dHIuZGF0YS1zbG90XT1cInZhcmlhbnQgPT09ICdpbnRlcmFjdGl2ZScgPyAndGFibGUnIDogbnVsbFwiPlxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgPC90YWJsZT5cbjwvZGl2PlxuIl19