@rivet-health/design-system 40.44.3 → 41.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 (302) hide show
  1. package/fesm2022/rivet-health-design-system.mjs +23103 -18772
  2. package/fesm2022/rivet-health-design-system.mjs.map +1 -1
  3. package/package.json +8 -9
  4. package/types/rivet-health-design-system.d.ts +6566 -0
  5. package/esm2022/lib/accessibility/sr-only/sr-only.component.mjs +0 -18
  6. package/esm2022/lib/download/download.service.mjs +0 -47
  7. package/esm2022/lib/format/pipes/common.mjs +0 -24
  8. package/esm2022/lib/format/pipes/date.pipe.mjs +0 -20
  9. package/esm2022/lib/format/pipes/days.pipe.mjs +0 -20
  10. package/esm2022/lib/format/pipes/dollars.pipe.mjs +0 -19
  11. package/esm2022/lib/format/pipes/number.pipe.mjs +0 -19
  12. package/esm2022/lib/format/pipes/percentage.pipe.mjs +0 -19
  13. package/esm2022/lib/format/pipes/sentence-case.pipe.mjs +0 -61
  14. package/esm2022/lib/format/pipes/small-currency.pipe.mjs +0 -24
  15. package/esm2022/lib/format/pipes/small-number.pipe.mjs +0 -29
  16. package/esm2022/lib/format/svg-text-truncate/svg-text-truncate.directive.mjs +0 -62
  17. package/esm2022/lib/format/truncate/truncate.component.mjs +0 -51
  18. package/esm2022/lib/icon/dom-cache.mjs +0 -32
  19. package/esm2022/lib/icon/icon.component.mjs +0 -86
  20. package/esm2022/lib/icon/icons.mjs +0 -271
  21. package/esm2022/lib/input/alphabetic-field/alphabetic-field.component.mjs +0 -42
  22. package/esm2022/lib/input/auto-focus/auto-focus.directive.mjs +0 -48
  23. package/esm2022/lib/input/button/button.component.mjs +0 -139
  24. package/esm2022/lib/input/button-group/button-group.component.mjs +0 -39
  25. package/esm2022/lib/input/calendar/calendar.component.mjs +0 -318
  26. package/esm2022/lib/input/card-checkbox/card-checkbox.component.mjs +0 -13
  27. package/esm2022/lib/input/checkbox/checkbox.component.mjs +0 -84
  28. package/esm2022/lib/input/currency-field/currency-field.component.mjs +0 -26
  29. package/esm2022/lib/input/date/date.component.mjs +0 -279
  30. package/esm2022/lib/input/date-range/date-range.component.mjs +0 -477
  31. package/esm2022/lib/input/filter-chip/filter-chip.component.mjs +0 -47
  32. package/esm2022/lib/input/filter-dropdown/filter-dropdown.component.mjs +0 -89
  33. package/esm2022/lib/input/input-label/input-label.component.mjs +0 -38
  34. package/esm2022/lib/input/mentions-input/mentions-input.component.mjs +0 -745
  35. package/esm2022/lib/input/number-field/number-field.component.mjs +0 -125
  36. package/esm2022/lib/input/percentage-field/percentage-field.component.mjs +0 -20
  37. package/esm2022/lib/input/phone-field/phone-field.component.mjs +0 -74
  38. package/esm2022/lib/input/radio/radio.component.mjs +0 -58
  39. package/esm2022/lib/input/search/search.component.mjs +0 -26
  40. package/esm2022/lib/input/search-select/search-select.component.mjs +0 -189
  41. package/esm2022/lib/input/select/select/select.component.mjs +0 -178
  42. package/esm2022/lib/input/select/select-node/select-node.component.mjs +0 -60
  43. package/esm2022/lib/input/select/state.mjs +0 -882
  44. package/esm2022/lib/input/simple-select/option-group.pipe.mjs +0 -19
  45. package/esm2022/lib/input/simple-select/simple-select.component.mjs +0 -178
  46. package/esm2022/lib/input/switch-checkbox/switch-checkbox.component.mjs +0 -33
  47. package/esm2022/lib/input/text-field/text-field.component.mjs +0 -115
  48. package/esm2022/lib/input/textarea-field/textarea-field.component.mjs +0 -21
  49. package/esm2022/lib/input/validation-message/validation-message.component.mjs +0 -17
  50. package/esm2022/lib/layout/card/card-actions.component.mjs +0 -72
  51. package/esm2022/lib/layout/card/card-content.component.mjs +0 -64
  52. package/esm2022/lib/layout/card/card-header.component.mjs +0 -201
  53. package/esm2022/lib/layout/card/card-link.component.mjs +0 -94
  54. package/esm2022/lib/layout/card/card-media.component.mjs +0 -70
  55. package/esm2022/lib/layout/card/card.component.mjs +0 -291
  56. package/esm2022/lib/layout/setting-row/setting-row.component.mjs +0 -111
  57. package/esm2022/lib/load/loading/loading.component.mjs +0 -43
  58. package/esm2022/lib/load/loading-cover/loading-cover.component.mjs +0 -25
  59. package/esm2022/lib/navigation/editable-heading/editable-heading.component.mjs +0 -243
  60. package/esm2022/lib/navigation/link/link.component.mjs +0 -48
  61. package/esm2022/lib/navigation/page-header/page-header.component.mjs +0 -68
  62. package/esm2022/lib/navigation/simple-tabs/simple-tab/simple-tab.component.mjs +0 -43
  63. package/esm2022/lib/navigation/simple-tabs/simple-tabs/simple-tabs.component.mjs +0 -11
  64. package/esm2022/lib/navigation/tabs/tab/tab.component.mjs +0 -16
  65. package/esm2022/lib/navigation/tabs/tabs/tabs.component.mjs +0 -11
  66. package/esm2022/lib/navigation/views/all-views-modal/all-views-modal.component.mjs +0 -43
  67. package/esm2022/lib/navigation/views/edit-view/edit-view.component.mjs +0 -118
  68. package/esm2022/lib/navigation/views/permission-picker/permission-picker.component.mjs +0 -151
  69. package/esm2022/lib/navigation/views/state.mjs +0 -456
  70. package/esm2022/lib/navigation/views/view-menu/view-menu.component.mjs +0 -30
  71. package/esm2022/lib/navigation/views/views/views.component.mjs +0 -90
  72. package/esm2022/lib/notification/badge/badge.component.mjs +0 -45
  73. package/esm2022/lib/notification/banner/banner-action.component.mjs +0 -48
  74. package/esm2022/lib/notification/banner/banner.component.mjs +0 -61
  75. package/esm2022/lib/notification/map-indicator/map-indicator.component.mjs +0 -50
  76. package/esm2022/lib/notification/map-indicator/map-indicators.mjs +0 -15
  77. package/esm2022/lib/notification/notification-badge/notification-badge.component.mjs +0 -26
  78. package/esm2022/lib/overlay/callout/callout.component.mjs +0 -130
  79. package/esm2022/lib/overlay/callout/callout.helpers.mjs +0 -113
  80. package/esm2022/lib/overlay/callout/help/help.component.mjs +0 -23
  81. package/esm2022/lib/overlay/callout/lock-scroll.directive.mjs +0 -69
  82. package/esm2022/lib/overlay/callout/menu/menu-item/menu-item.component.mjs +0 -71
  83. package/esm2022/lib/overlay/callout/menu/menu.component.mjs +0 -38
  84. package/esm2022/lib/overlay/callout/select-callout-defaults.mjs +0 -13
  85. package/esm2022/lib/overlay/callout/tooltip/locked-tooltip.directive.mjs +0 -30
  86. package/esm2022/lib/overlay/callout/tooltip/tooltip.component.mjs +0 -57
  87. package/esm2022/lib/overlay/callout/tooltip/tooltip.directive.mjs +0 -138
  88. package/esm2022/lib/overlay/modal/dialog/dialog.component.mjs +0 -47
  89. package/esm2022/lib/overlay/modal/dialog-stack.service.mjs +0 -41
  90. package/esm2022/lib/overlay/modal/form-dialog/form-dialog.component.mjs +0 -146
  91. package/esm2022/lib/overlay/modal/modal.component.mjs +0 -31
  92. package/esm2022/lib/overlay/modal/side-sheet/side-sheet.component.mjs +0 -30
  93. package/esm2022/lib/overlay/overlay-outlet.component.mjs +0 -98
  94. package/esm2022/lib/overlay/overlay.directive.mjs +0 -25
  95. package/esm2022/lib/overlay/overlay.service.mjs +0 -35
  96. package/esm2022/lib/overlay/toast/toast-action.component.mjs +0 -11
  97. package/esm2022/lib/overlay/toast/toast.component.mjs +0 -41
  98. package/esm2022/lib/riv.module.mjs +0 -580
  99. package/esm2022/lib/size/size.directive.mjs +0 -33
  100. package/esm2022/lib/table/simple-table/coordinate-helper.mjs +0 -61
  101. package/esm2022/lib/table/simple-table/simple-table-cell.component.mjs +0 -36
  102. package/esm2022/lib/table/simple-table/simple-table-header-cell.component.mjs +0 -37
  103. package/esm2022/lib/table/simple-table/simple-table-row.component.mjs +0 -19
  104. package/esm2022/lib/table/simple-table/simple-table.component.mjs +0 -104
  105. package/esm2022/lib/table/table/clipboard.mjs +0 -182
  106. package/esm2022/lib/table/table/state-helpers/collapse-helpers.mjs +0 -116
  107. package/esm2022/lib/table/table/state-helpers/column-helpers.mjs +0 -383
  108. package/esm2022/lib/table/table/state-helpers/display-helpers.mjs +0 -50
  109. package/esm2022/lib/table/table/state-helpers/nesting-helpers.mjs +0 -123
  110. package/esm2022/lib/table/table/state-helpers/order-helpers.mjs +0 -164
  111. package/esm2022/lib/table/table/state-helpers/pagination-helpers.mjs +0 -139
  112. package/esm2022/lib/table/table/state-helpers/result-helpers.mjs +0 -70
  113. package/esm2022/lib/table/table/state-helpers/search-helpers.mjs +0 -72
  114. package/esm2022/lib/table/table/state-helpers/selection-helpers.mjs +0 -180
  115. package/esm2022/lib/table/table/state.mjs +0 -1035
  116. package/esm2022/lib/table/table/table/table.component.mjs +0 -367
  117. package/esm2022/lib/table/table/table-collapse-all/table-collapse-all.component.mjs +0 -25
  118. package/esm2022/lib/table/table/table-column-settings/table-column-settings-side-sheet.component.mjs +0 -227
  119. package/esm2022/lib/table/table/table-column-settings/table-column-settings.component.mjs +0 -134
  120. package/esm2022/lib/table/table/table-csv-export/table-csv-export.component.mjs +0 -35
  121. package/esm2022/lib/table/table/table-header-resize-handle/table-header-resize-handle.component.mjs +0 -28
  122. package/esm2022/lib/table/table/table-search/table-search.component.mjs +0 -71
  123. package/esm2022/lib/table/table/table-search-columns/table-search-columns.component.mjs +0 -57
  124. package/esm2022/lib/util/local-storage.mjs +0 -17
  125. package/esm2022/lib/visibility/visibility.directive.mjs +0 -34
  126. package/esm2022/lib/visualization/chart/chart-scaling.mjs +0 -380
  127. package/esm2022/lib/visualization/chart/chart.component.mjs +0 -626
  128. package/esm2022/lib/visualization/chart/chart.mjs +0 -3768
  129. package/esm2022/lib/visualization/data-table/data-table-cell.component.mjs +0 -22
  130. package/esm2022/lib/visualization/data-table/data-table-header-cell.component.mjs +0 -11
  131. package/esm2022/lib/visualization/data-table/data-table-row.component.mjs +0 -19
  132. package/esm2022/lib/visualization/data-table/data-table.component.mjs +0 -17
  133. package/esm2022/lib/visualization/donut/donut.component.mjs +0 -54
  134. package/esm2022/lib/visualization/funnel-chart/funnel-chart.component.mjs +0 -73
  135. package/esm2022/lib/visualization/funnel-chart/funnel-chart.helpers.mjs +0 -33
  136. package/esm2022/lib/visualization/highlight/highlight.component.mjs +0 -24
  137. package/esm2022/lib/visualization/highlight/highlight.helpers.mjs +0 -20
  138. package/esm2022/lib/visualization/intervals.mjs +0 -63
  139. package/esm2022/lib/visualization/issue/issue.component.mjs +0 -30
  140. package/esm2022/lib/visualization/legend-item/legend-item.component.mjs +0 -49
  141. package/esm2022/lib/visualization/metric/metric.component.mjs +0 -52
  142. package/esm2022/lib/visualization/mini-pie/mini-pie.component.mjs +0 -51
  143. package/esm2022/lib/visualization/progress/progress.component.mjs +0 -24
  144. package/esm2022/lib/visualization/stacked-column/stacked-column.component.mjs +0 -377
  145. package/esm2022/lib/visualization/stacked-column/stacked-column.helpers.mjs +0 -18
  146. package/esm2022/lib/visualization/stacked-row/stacked-row.component.mjs +0 -270
  147. package/esm2022/lib/visualization/stacked-row/stacked-row.helpers.mjs +0 -74
  148. package/esm2022/lib/visualization/time-series/time-series.component.mjs +0 -374
  149. package/esm2022/lib/visualization/time-series/time-series.helpers.mjs +0 -15
  150. package/esm2022/lib/visualization/trend/trend.component.mjs +0 -51
  151. package/esm2022/lib/visualization/zero-state/zero-state.component.mjs +0 -22
  152. package/esm2022/public-api.mjs +0 -118
  153. package/esm2022/rivet-health-design-system.mjs +0 -5
  154. package/index.d.ts +0 -5
  155. package/lib/accessibility/sr-only/sr-only.component.d.ts +0 -12
  156. package/lib/download/download.service.d.ts +0 -9
  157. package/lib/format/pipes/common.d.ts +0 -6
  158. package/lib/format/pipes/date.pipe.d.ts +0 -8
  159. package/lib/format/pipes/days.pipe.d.ts +0 -8
  160. package/lib/format/pipes/dollars.pipe.d.ts +0 -9
  161. package/lib/format/pipes/number.pipe.d.ts +0 -8
  162. package/lib/format/pipes/percentage.pipe.d.ts +0 -8
  163. package/lib/format/pipes/sentence-case.pipe.d.ts +0 -8
  164. package/lib/format/pipes/small-currency.pipe.d.ts +0 -8
  165. package/lib/format/pipes/small-number.pipe.d.ts +0 -8
  166. package/lib/format/svg-text-truncate/svg-text-truncate.directive.d.ts +0 -14
  167. package/lib/format/truncate/truncate.component.d.ts +0 -17
  168. package/lib/icon/dom-cache.d.ts +0 -13
  169. package/lib/icon/icon.component.d.ts +0 -27
  170. package/lib/icon/icons.d.ts +0 -137
  171. package/lib/input/alphabetic-field/alphabetic-field.component.d.ts +0 -14
  172. package/lib/input/auto-focus/auto-focus.directive.d.ts +0 -21
  173. package/lib/input/button/button.component.d.ts +0 -37
  174. package/lib/input/button-group/button-group.component.d.ts +0 -11
  175. package/lib/input/calendar/calendar.component.d.ts +0 -67
  176. package/lib/input/card-checkbox/card-checkbox.component.d.ts +0 -6
  177. package/lib/input/checkbox/checkbox.component.d.ts +0 -32
  178. package/lib/input/currency-field/currency-field.component.d.ts +0 -9
  179. package/lib/input/date/date.component.d.ts +0 -62
  180. package/lib/input/date-range/date-range.component.d.ts +0 -97
  181. package/lib/input/filter-chip/filter-chip.component.d.ts +0 -13
  182. package/lib/input/filter-dropdown/filter-dropdown.component.d.ts +0 -30
  183. package/lib/input/input-label/input-label.component.d.ts +0 -17
  184. package/lib/input/mentions-input/mentions-input.component.d.ts +0 -93
  185. package/lib/input/number-field/number-field.component.d.ts +0 -36
  186. package/lib/input/percentage-field/percentage-field.component.d.ts +0 -7
  187. package/lib/input/phone-field/phone-field.component.d.ts +0 -17
  188. package/lib/input/radio/radio.component.d.ts +0 -28
  189. package/lib/input/search/search.component.d.ts +0 -10
  190. package/lib/input/search-select/search-select.component.d.ts +0 -62
  191. package/lib/input/select/select/select.component.d.ts +0 -63
  192. package/lib/input/select/select-node/select-node.component.d.ts +0 -30
  193. package/lib/input/select/state.d.ts +0 -250
  194. package/lib/input/simple-select/option-group.pipe.d.ts +0 -8
  195. package/lib/input/simple-select/simple-select.component.d.ts +0 -63
  196. package/lib/input/switch-checkbox/switch-checkbox.component.d.ts +0 -18
  197. package/lib/input/text-field/text-field.component.d.ts +0 -38
  198. package/lib/input/textarea-field/textarea-field.component.d.ts +0 -8
  199. package/lib/input/validation-message/validation-message.component.d.ts +0 -6
  200. package/lib/layout/card/card-actions.component.d.ts +0 -38
  201. package/lib/layout/card/card-content.component.d.ts +0 -33
  202. package/lib/layout/card/card-header.component.d.ts +0 -132
  203. package/lib/layout/card/card-link.component.d.ts +0 -54
  204. package/lib/layout/card/card-media.component.d.ts +0 -43
  205. package/lib/layout/card/card.component.d.ts +0 -215
  206. package/lib/layout/setting-row/setting-row.component.d.ts +0 -72
  207. package/lib/load/loading/loading.component.d.ts +0 -17
  208. package/lib/load/loading-cover/loading-cover.component.d.ts +0 -10
  209. package/lib/navigation/editable-heading/editable-heading.component.d.ts +0 -118
  210. package/lib/navigation/link/link.component.d.ts +0 -19
  211. package/lib/navigation/page-header/page-header.component.d.ts +0 -50
  212. package/lib/navigation/simple-tabs/simple-tab/simple-tab.component.d.ts +0 -11
  213. package/lib/navigation/simple-tabs/simple-tabs/simple-tabs.component.d.ts +0 -5
  214. package/lib/navigation/tabs/tab/tab.component.d.ts +0 -6
  215. package/lib/navigation/tabs/tabs/tabs.component.d.ts +0 -5
  216. package/lib/navigation/views/all-views-modal/all-views-modal.component.d.ts +0 -14
  217. package/lib/navigation/views/edit-view/edit-view.component.d.ts +0 -31
  218. package/lib/navigation/views/permission-picker/permission-picker.component.d.ts +0 -37
  219. package/lib/navigation/views/state.d.ts +0 -175
  220. package/lib/navigation/views/view-menu/view-menu.component.d.ts +0 -13
  221. package/lib/navigation/views/views/views.component.d.ts +0 -25
  222. package/lib/notification/badge/badge.component.d.ts +0 -14
  223. package/lib/notification/banner/banner-action.component.d.ts +0 -15
  224. package/lib/notification/banner/banner.component.d.ts +0 -25
  225. package/lib/notification/map-indicator/map-indicator.component.d.ts +0 -24
  226. package/lib/notification/map-indicator/map-indicators.d.ts +0 -9
  227. package/lib/notification/notification-badge/notification-badge.component.d.ts +0 -11
  228. package/lib/overlay/callout/callout.component.d.ts +0 -36
  229. package/lib/overlay/callout/callout.helpers.d.ts +0 -16
  230. package/lib/overlay/callout/help/help.component.d.ts +0 -11
  231. package/lib/overlay/callout/lock-scroll.directive.d.ts +0 -22
  232. package/lib/overlay/callout/menu/menu-item/menu-item.component.d.ts +0 -27
  233. package/lib/overlay/callout/menu/menu.component.d.ts +0 -17
  234. package/lib/overlay/callout/select-callout-defaults.d.ts +0 -5
  235. package/lib/overlay/callout/tooltip/locked-tooltip.directive.d.ts +0 -14
  236. package/lib/overlay/callout/tooltip/tooltip.component.d.ts +0 -26
  237. package/lib/overlay/callout/tooltip/tooltip.directive.d.ts +0 -48
  238. package/lib/overlay/modal/dialog/dialog.component.d.ts +0 -19
  239. package/lib/overlay/modal/dialog-stack.service.d.ts +0 -23
  240. package/lib/overlay/modal/form-dialog/form-dialog.component.d.ts +0 -63
  241. package/lib/overlay/modal/modal.component.d.ts +0 -11
  242. package/lib/overlay/modal/side-sheet/side-sheet.component.d.ts +0 -13
  243. package/lib/overlay/overlay-outlet.component.d.ts +0 -19
  244. package/lib/overlay/overlay.directive.d.ts +0 -13
  245. package/lib/overlay/overlay.service.d.ts +0 -14
  246. package/lib/overlay/toast/toast-action.component.d.ts +0 -5
  247. package/lib/overlay/toast/toast.component.d.ts +0 -17
  248. package/lib/riv.module.d.ts +0 -122
  249. package/lib/size/size.directive.d.ts +0 -12
  250. package/lib/table/simple-table/coordinate-helper.d.ts +0 -13
  251. package/lib/table/simple-table/simple-table-cell.component.d.ts +0 -19
  252. package/lib/table/simple-table/simple-table-header-cell.component.d.ts +0 -20
  253. package/lib/table/simple-table/simple-table-row.component.d.ts +0 -6
  254. package/lib/table/simple-table/simple-table.component.d.ts +0 -11
  255. package/lib/table/table/clipboard.d.ts +0 -38
  256. package/lib/table/table/state-helpers/collapse-helpers.d.ts +0 -9
  257. package/lib/table/table/state-helpers/column-helpers.d.ts +0 -29
  258. package/lib/table/table/state-helpers/display-helpers.d.ts +0 -5
  259. package/lib/table/table/state-helpers/nesting-helpers.d.ts +0 -13
  260. package/lib/table/table/state-helpers/order-helpers.d.ts +0 -13
  261. package/lib/table/table/state-helpers/pagination-helpers.d.ts +0 -12
  262. package/lib/table/table/state-helpers/result-helpers.d.ts +0 -10
  263. package/lib/table/table/state-helpers/search-helpers.d.ts +0 -17
  264. package/lib/table/table/state-helpers/selection-helpers.d.ts +0 -13
  265. package/lib/table/table/state.d.ts +0 -512
  266. package/lib/table/table/table/table.component.d.ts +0 -88
  267. package/lib/table/table/table-collapse-all/table-collapse-all.component.d.ts +0 -10
  268. package/lib/table/table/table-column-settings/table-column-settings-side-sheet.component.d.ts +0 -52
  269. package/lib/table/table/table-column-settings/table-column-settings.component.d.ts +0 -37
  270. package/lib/table/table/table-csv-export/table-csv-export.component.d.ts +0 -14
  271. package/lib/table/table/table-header-resize-handle/table-header-resize-handle.component.d.ts +0 -11
  272. package/lib/table/table/table-search/table-search.component.d.ts +0 -21
  273. package/lib/table/table/table-search-columns/table-search-columns.component.d.ts +0 -23
  274. package/lib/util/local-storage.d.ts +0 -14
  275. package/lib/visibility/visibility.directive.d.ts +0 -12
  276. package/lib/visualization/chart/chart-scaling.d.ts +0 -100
  277. package/lib/visualization/chart/chart.component.d.ts +0 -116
  278. package/lib/visualization/chart/chart.d.ts +0 -354
  279. package/lib/visualization/data-table/data-table-cell.component.d.ts +0 -11
  280. package/lib/visualization/data-table/data-table-header-cell.component.d.ts +0 -5
  281. package/lib/visualization/data-table/data-table-row.component.d.ts +0 -6
  282. package/lib/visualization/data-table/data-table.component.d.ts +0 -6
  283. package/lib/visualization/donut/donut.component.d.ts +0 -22
  284. package/lib/visualization/funnel-chart/funnel-chart.component.d.ts +0 -30
  285. package/lib/visualization/funnel-chart/funnel-chart.helpers.d.ts +0 -4
  286. package/lib/visualization/highlight/highlight.component.d.ts +0 -15
  287. package/lib/visualization/highlight/highlight.helpers.d.ts +0 -2
  288. package/lib/visualization/intervals.d.ts +0 -8
  289. package/lib/visualization/issue/issue.component.d.ts +0 -10
  290. package/lib/visualization/legend-item/legend-item.component.d.ts +0 -22
  291. package/lib/visualization/metric/metric.component.d.ts +0 -20
  292. package/lib/visualization/mini-pie/mini-pie.component.d.ts +0 -17
  293. package/lib/visualization/progress/progress.component.d.ts +0 -8
  294. package/lib/visualization/stacked-column/stacked-column.component.d.ts +0 -129
  295. package/lib/visualization/stacked-column/stacked-column.helpers.d.ts +0 -3
  296. package/lib/visualization/stacked-row/stacked-row.component.d.ts +0 -109
  297. package/lib/visualization/stacked-row/stacked-row.helpers.d.ts +0 -53
  298. package/lib/visualization/time-series/time-series.component.d.ts +0 -126
  299. package/lib/visualization/time-series/time-series.helpers.d.ts +0 -34
  300. package/lib/visualization/trend/trend.component.d.ts +0 -13
  301. package/lib/visualization/zero-state/zero-state.component.d.ts +0 -9
  302. package/public-api.d.ts +0 -118
@@ -1,43 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, } from '@angular/core';
2
- import { RivViews } from '../state';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/common";
5
- import * as i2 from "../../../input/button/button.component";
6
- import * as i3 from "../../../visualization/highlight/highlight.component";
7
- import * as i4 from "../../../icon/icon.component";
8
- import * as i5 from "../../../input/search/search.component";
9
- import * as i6 from "../../../overlay/modal/side-sheet/side-sheet.component";
10
- import * as i7 from "../../../overlay/callout/tooltip/tooltip.directive";
11
- import * as i8 from "../../../format/truncate/truncate.component";
12
- import * as i9 from "../view-menu/view-menu.component";
13
- export class AllViewsModalComponent {
14
- constructor() {
15
- this.topOffset = 0;
16
- this.close = new EventEmitter();
17
- this.getPermissionTitle = RivViews.getPermissionTitle;
18
- this.getPermissionDescription = RivViews.getPermissionDescription;
19
- }
20
- getOpenChange(permission) {
21
- return (open) => this.manager?.actions?.next({
22
- type: 'setAllViewsToggle',
23
- permission,
24
- open,
25
- });
26
- }
27
- trackById(_, view) {
28
- return view.id;
29
- }
30
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AllViewsModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
31
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: AllViewsModalComponent, selector: "riv-all-views-modal", inputs: { manager: "manager", topOffset: "topOffset" }, outputs: { close: "close" }, ngImport: i0, template: "<ng-container *ngIf=\"manager?.state | async; let s\">\n <riv-side-sheet\n [label]=\"'All views'\"\n [topOffset]=\"topOffset\"\n (close)=\"close.emit()\"\n >\n <div class=\"content\">\n <header>\n <span class=\"title\">All views</span>\n <button\n type=\"button\"\n rivButton\n [variant]=\"'ghost'\"\n [icon]=\"'X'\"\n (click)=\"close.emit()\"\n ></button>\n </header>\n\n <riv-search\n (valueChange)=\"\n manager?.actions?.next({\n type: 'setAllViewsSearchQuery',\n query: $event\n })\n \"\n [value]=\"s.all.search\"\n placeholder=\"Search\"\n ></riv-search>\n\n <div class=\"views\">\n <!-- View sections by permission type -->\n <ng-container\n *ngIf=\"s.all.privateViews.length > 0\"\n [ngTemplateOutlet]=\"permissionSection\"\n [ngTemplateOutletContext]=\"{\n permission: 'private',\n open: s.all.privateOpen,\n openChange: getOpenChange('private'),\n views: s.all.privateViews,\n title: getPermissionTitle('private'),\n description: getPermissionDescription('private')\n }\"\n ></ng-container>\n <ng-container\n *ngIf=\"s.all.sharedViews.length > 0\"\n [ngTemplateOutlet]=\"permissionSection\"\n [ngTemplateOutletContext]=\"{\n permission: 'shared',\n open: s.all.sharedOpen,\n openChange: getOpenChange('shared'),\n views: s.all.sharedViews,\n title: getPermissionTitle('shared'),\n description: getPermissionDescription('shared')\n }\"\n ></ng-container>\n <ng-container\n *ngIf=\"s.all.publicViews.length > 0\"\n [ngTemplateOutlet]=\"permissionSection\"\n [ngTemplateOutletContext]=\"{\n permission: 'public',\n open: s.all.publicOpen,\n openChange: getOpenChange('public'),\n views: s.all.publicViews,\n title: getPermissionTitle('public'),\n description: getPermissionDescription('public')\n }\"\n ></ng-container>\n\n <!-- Permission section -->\n <ng-template\n #permissionSection\n let-permission=\"permission\"\n let-open=\"open\"\n let-openChange=\"openChange\"\n let-views=\"views\"\n let-title=\"title\"\n let-description=\"description\"\n >\n <div class=\"permission-section\">\n <button\n type=\"button\"\n class=\"permission-header\"\n (click)=\"openChange(!open)\"\n [disabled]=\"!!s.all.search\"\n [attr.aria-disabled]=\"!!s.all.search ? 'true' : null\"\n >\n <div class=\"permission-header-content\">\n <h3 class=\"permission-title\">{{ title }}</h3>\n <span class=\"permission-description\">{{ description }}</span>\n </div>\n <riv-icon\n [name]=\"open ? 'ChevronUp' : 'ChevronDown'\"\n [size]=\"20\"\n ></riv-icon>\n </button>\n\n <div class=\"permission-content\" *ngIf=\"open\">\n <div class=\"views-list\" *ngIf=\"views.length > 0\">\n <button\n type=\"button\"\n *ngFor=\"let view of views; trackBy: trackById\"\n class=\"view-item\"\n (click)=\"\n manager?.actions?.next({\n type: 'setActiveView',\n id: view.id,\n source: 'menu'\n });\n close.emit()\n \"\n >\n <div class=\"view-title\" rivTruncate>\n <riv-highlight\n [text]=\"view.title\"\n [indices]=\"view.titleHighlightIndices ?? []\"\n >\n </riv-highlight>\n </div>\n <riv-view-menu\n [manager]=\"manager\"\n [view]=\"view\"\n [menuContext]=\"'all-views'\"\n ></riv-view-menu>\n <button\n type=\"button\"\n class=\"enable-view\"\n [class.enabled]=\"view.enabled && !view.system\"\n (click)=\"\n $event.stopPropagation();\n manager?.actions?.next({\n type: 'setEnabled',\n id: view.id,\n enabled: !view.enabled,\n source: 'eyeIcon'\n })\n \"\n [disabled]=\"view.system\"\n [attr.aria-disabled]=\"view.system ? 'true' : null\"\n >\n <riv-icon\n *ngIf=\"view.enabled\"\n [name]=\"view.system ? 'Lock' : 'Eye'\"\n [rivTooltip]=\"view.system ? '' : 'Hide tab'\"\n [size]=\"20\"\n ></riv-icon>\n <riv-icon\n *ngIf=\"!view.enabled\"\n [name]=\"'EyeOff'\"\n [rivTooltip]=\"'Show tab'\"\n [size]=\"20\"\n ></riv-icon>\n </button>\n </button>\n </div>\n </div>\n </div>\n </ng-template>\n </div>\n </div>\n </riv-side-sheet>\n</ng-container>\n", styles: [".content{padding:var(--size-xlarge);display:flex;flex-direction:column;gap:var(--size-medium);height:100%}header{display:flex;justify-content:space-between;align-items:center}.title{font:var(--title-02)}.views{flex-grow:1;overflow-y:auto;display:flex;flex-direction:column;gap:var(--size-xlarge);scrollbar-gutter:stable;margin-right:calc(var(--size-medium) * -1)}.permission-section{display:flex;flex-direction:column}.permission-header{display:flex;justify-content:space-between;align-items:center;width:100%;padding:var(--size-xsmall);border:none;background:none;cursor:pointer;gap:var(--size-small);border-radius:var(--border-radius-medium);transition:background-color var(--short-transition)}.permission-header:disabled{cursor:default;color:var(--type-light-disabled)}.permission-header:hover:not(:disabled){background-color:var(--surface-light-1)}.permission-header:active:not(:disabled){background-color:var(--surface-light-2)}.permission-header-content{display:flex;flex-direction:column;align-items:flex-start;text-align:left}.permission-title{font:var(--title-02)}.permission-description{font:var(--body-medium);color:var(--type-light-low-contrast)}.permission-content{padding-top:var(--size-small)}.views-list{display:flex;flex-direction:column;gap:var(--size-small)}.view-item{display:flex;align-items:center;padding:var(--size-xsmall);border-radius:var(--border-radius-small);cursor:pointer;background-color:var(--surface-light-0);transition:background-color var(--short-transition)}.view-item:hover{background-color:var(--surface-light-1)}.view-item:active{background-color:var(--surface-light-2)}.view-title{text-align:left;flex-grow:1;font:var(--input-medium)}.view-item riv-view-menu{align-self:flex-end;opacity:0;transition:opacity var(--short-transition)}.view-item:hover riv-view-menu{opacity:1}.enable-view{cursor:pointer;display:inline-flex;justify-content:center;align-items:center;padding-left:var(--size-xsmall);transition:color var(--medium-transition);color:var(--type-light-low-contrast)}.enable-view.enabled{color:var(--type-light-link)}.enable-view.enabled:hover{color:var(--type-light-link-hover)}.enable-view.enabled:active{color:var(--type-light-link-active)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.ButtonComponent, selector: "[rivButton]", inputs: ["locked", "disabled", "loading", "full", "size", "variant", "icon", "iconPosition", "current"] }, { kind: "component", type: i3.HighlightComponent, selector: "riv-highlight", inputs: ["text", "indices"] }, { kind: "component", type: i4.IconComponent, selector: "riv-icon", inputs: ["name", "fillColor", "size", "customSize", "strokeWidth"] }, { kind: "component", type: i5.SearchComponent, selector: "riv-search", inputs: ["placeholder", "name", "labelTemplate"] }, { kind: "component", type: i6.SideSheetComponent, selector: "riv-side-sheet", inputs: ["topOffset", "width", "obscure", "label"], outputs: ["close"] }, { kind: "directive", type: i7.TooltipDirective, selector: "[rivTooltip]", inputs: ["rivTooltip", "rivTooltipTheme", "rivTooltipMaxWidth", "rivTooltipPreferredPosition", "rivTooltipAnchor", "rivTooltipCloseDelay", "rivTooltipOpenDelay", "rivTooltipGracePeriod"] }, { kind: "component", type: i8.TruncateComponent, selector: "[rivTruncate]", inputs: ["maxTooltipWidth"] }, { kind: "component", type: i9.ViewMenuComponent, selector: "riv-view-menu", inputs: ["manager", "view", "menuContext"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
32
- }
33
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AllViewsModalComponent, decorators: [{
34
- type: Component,
35
- args: [{ selector: 'riv-all-views-modal', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"manager?.state | async; let s\">\n <riv-side-sheet\n [label]=\"'All views'\"\n [topOffset]=\"topOffset\"\n (close)=\"close.emit()\"\n >\n <div class=\"content\">\n <header>\n <span class=\"title\">All views</span>\n <button\n type=\"button\"\n rivButton\n [variant]=\"'ghost'\"\n [icon]=\"'X'\"\n (click)=\"close.emit()\"\n ></button>\n </header>\n\n <riv-search\n (valueChange)=\"\n manager?.actions?.next({\n type: 'setAllViewsSearchQuery',\n query: $event\n })\n \"\n [value]=\"s.all.search\"\n placeholder=\"Search\"\n ></riv-search>\n\n <div class=\"views\">\n <!-- View sections by permission type -->\n <ng-container\n *ngIf=\"s.all.privateViews.length > 0\"\n [ngTemplateOutlet]=\"permissionSection\"\n [ngTemplateOutletContext]=\"{\n permission: 'private',\n open: s.all.privateOpen,\n openChange: getOpenChange('private'),\n views: s.all.privateViews,\n title: getPermissionTitle('private'),\n description: getPermissionDescription('private')\n }\"\n ></ng-container>\n <ng-container\n *ngIf=\"s.all.sharedViews.length > 0\"\n [ngTemplateOutlet]=\"permissionSection\"\n [ngTemplateOutletContext]=\"{\n permission: 'shared',\n open: s.all.sharedOpen,\n openChange: getOpenChange('shared'),\n views: s.all.sharedViews,\n title: getPermissionTitle('shared'),\n description: getPermissionDescription('shared')\n }\"\n ></ng-container>\n <ng-container\n *ngIf=\"s.all.publicViews.length > 0\"\n [ngTemplateOutlet]=\"permissionSection\"\n [ngTemplateOutletContext]=\"{\n permission: 'public',\n open: s.all.publicOpen,\n openChange: getOpenChange('public'),\n views: s.all.publicViews,\n title: getPermissionTitle('public'),\n description: getPermissionDescription('public')\n }\"\n ></ng-container>\n\n <!-- Permission section -->\n <ng-template\n #permissionSection\n let-permission=\"permission\"\n let-open=\"open\"\n let-openChange=\"openChange\"\n let-views=\"views\"\n let-title=\"title\"\n let-description=\"description\"\n >\n <div class=\"permission-section\">\n <button\n type=\"button\"\n class=\"permission-header\"\n (click)=\"openChange(!open)\"\n [disabled]=\"!!s.all.search\"\n [attr.aria-disabled]=\"!!s.all.search ? 'true' : null\"\n >\n <div class=\"permission-header-content\">\n <h3 class=\"permission-title\">{{ title }}</h3>\n <span class=\"permission-description\">{{ description }}</span>\n </div>\n <riv-icon\n [name]=\"open ? 'ChevronUp' : 'ChevronDown'\"\n [size]=\"20\"\n ></riv-icon>\n </button>\n\n <div class=\"permission-content\" *ngIf=\"open\">\n <div class=\"views-list\" *ngIf=\"views.length > 0\">\n <button\n type=\"button\"\n *ngFor=\"let view of views; trackBy: trackById\"\n class=\"view-item\"\n (click)=\"\n manager?.actions?.next({\n type: 'setActiveView',\n id: view.id,\n source: 'menu'\n });\n close.emit()\n \"\n >\n <div class=\"view-title\" rivTruncate>\n <riv-highlight\n [text]=\"view.title\"\n [indices]=\"view.titleHighlightIndices ?? []\"\n >\n </riv-highlight>\n </div>\n <riv-view-menu\n [manager]=\"manager\"\n [view]=\"view\"\n [menuContext]=\"'all-views'\"\n ></riv-view-menu>\n <button\n type=\"button\"\n class=\"enable-view\"\n [class.enabled]=\"view.enabled && !view.system\"\n (click)=\"\n $event.stopPropagation();\n manager?.actions?.next({\n type: 'setEnabled',\n id: view.id,\n enabled: !view.enabled,\n source: 'eyeIcon'\n })\n \"\n [disabled]=\"view.system\"\n [attr.aria-disabled]=\"view.system ? 'true' : null\"\n >\n <riv-icon\n *ngIf=\"view.enabled\"\n [name]=\"view.system ? 'Lock' : 'Eye'\"\n [rivTooltip]=\"view.system ? '' : 'Hide tab'\"\n [size]=\"20\"\n ></riv-icon>\n <riv-icon\n *ngIf=\"!view.enabled\"\n [name]=\"'EyeOff'\"\n [rivTooltip]=\"'Show tab'\"\n [size]=\"20\"\n ></riv-icon>\n </button>\n </button>\n </div>\n </div>\n </div>\n </ng-template>\n </div>\n </div>\n </riv-side-sheet>\n</ng-container>\n", styles: [".content{padding:var(--size-xlarge);display:flex;flex-direction:column;gap:var(--size-medium);height:100%}header{display:flex;justify-content:space-between;align-items:center}.title{font:var(--title-02)}.views{flex-grow:1;overflow-y:auto;display:flex;flex-direction:column;gap:var(--size-xlarge);scrollbar-gutter:stable;margin-right:calc(var(--size-medium) * -1)}.permission-section{display:flex;flex-direction:column}.permission-header{display:flex;justify-content:space-between;align-items:center;width:100%;padding:var(--size-xsmall);border:none;background:none;cursor:pointer;gap:var(--size-small);border-radius:var(--border-radius-medium);transition:background-color var(--short-transition)}.permission-header:disabled{cursor:default;color:var(--type-light-disabled)}.permission-header:hover:not(:disabled){background-color:var(--surface-light-1)}.permission-header:active:not(:disabled){background-color:var(--surface-light-2)}.permission-header-content{display:flex;flex-direction:column;align-items:flex-start;text-align:left}.permission-title{font:var(--title-02)}.permission-description{font:var(--body-medium);color:var(--type-light-low-contrast)}.permission-content{padding-top:var(--size-small)}.views-list{display:flex;flex-direction:column;gap:var(--size-small)}.view-item{display:flex;align-items:center;padding:var(--size-xsmall);border-radius:var(--border-radius-small);cursor:pointer;background-color:var(--surface-light-0);transition:background-color var(--short-transition)}.view-item:hover{background-color:var(--surface-light-1)}.view-item:active{background-color:var(--surface-light-2)}.view-title{text-align:left;flex-grow:1;font:var(--input-medium)}.view-item riv-view-menu{align-self:flex-end;opacity:0;transition:opacity var(--short-transition)}.view-item:hover riv-view-menu{opacity:1}.enable-view{cursor:pointer;display:inline-flex;justify-content:center;align-items:center;padding-left:var(--size-xsmall);transition:color var(--medium-transition);color:var(--type-light-low-contrast)}.enable-view.enabled{color:var(--type-light-link)}.enable-view.enabled:hover{color:var(--type-light-link-hover)}.enable-view.enabled:active{color:var(--type-light-link-active)}\n"] }]
36
- }], propDecorators: { manager: [{
37
- type: Input
38
- }], topOffset: [{
39
- type: Input
40
- }], close: [{
41
- type: Output
42
- }] } });
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxsLXZpZXdzLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL25hdmlnYXRpb24vdmlld3MvYWxsLXZpZXdzLW1vZGFsL2FsbC12aWV3cy1tb2RhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi9uYXZpZ2F0aW9uL3ZpZXdzL2FsbC12aWV3cy1tb2RhbC9hbGwtdmlld3MtbW9kYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQzs7Ozs7Ozs7Ozs7QUFRcEMsTUFBTSxPQUFPLHNCQUFzQjtJQU5uQztRQWNFLGNBQVMsR0FBVyxDQUFDLENBQUM7UUFHdEIsVUFBSyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFXakMsdUJBQWtCLEdBQUcsUUFBUSxDQUFDLGtCQUFrQixDQUFDO1FBQ2pELDZCQUF3QixHQUFHLFFBQVEsQ0FBQyx3QkFBd0IsQ0FBQztLQUs5RDtJQWZDLGFBQWEsQ0FBQyxVQUFtQztRQUMvQyxPQUFPLENBQUMsSUFBYSxFQUFFLEVBQUUsQ0FDdkIsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDO1lBQzFCLElBQUksRUFBRSxtQkFBbUI7WUFDekIsVUFBVTtZQUNWLElBQUk7U0FDTCxDQUFDLENBQUM7SUFDUCxDQUFDO0lBS0QsU0FBUyxDQUFDLENBQVMsRUFBRSxJQUE2QjtRQUNoRCxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDakIsQ0FBQzsrR0EzQlUsc0JBQXNCO21HQUF0QixzQkFBc0IsZ0pDZm5DLHdwTEFpS0E7OzRGRGxKYSxzQkFBc0I7a0JBTmxDLFNBQVM7K0JBQ0UscUJBQXFCLG1CQUdkLHVCQUF1QixDQUFDLE1BQU07OEJBTy9DLE9BQU87c0JBRE4sS0FBSztnQkFJTixTQUFTO3NCQURSLEtBQUs7Z0JBSU4sS0FBSztzQkFESixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJpdlZpZXdzIH0gZnJvbSAnLi4vc3RhdGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyaXYtYWxsLXZpZXdzLW1vZGFsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FsbC12aWV3cy1tb2RhbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2FsbC12aWV3cy1tb2RhbC5jb21wb25lbnQuY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBBbGxWaWV3c01vZGFsQ29tcG9uZW50PFxuICBVIGV4dGVuZHMgUml2Vmlld3MuVXNlcixcbiAgViBleHRlbmRzIFJpdlZpZXdzLlZpZXc8VT4sXG4+IHtcbiAgQElucHV0KClcbiAgbWFuYWdlcj86IFJpdlZpZXdzLk1hbmFnZXI8VSwgVj47XG5cbiAgQElucHV0KClcbiAgdG9wT2Zmc2V0OiBudW1iZXIgPSAwO1xuXG4gIEBPdXRwdXQoKVxuICBjbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBnZXRPcGVuQ2hhbmdlKHBlcm1pc3Npb246IFJpdlZpZXdzLlZpZXdQZXJtaXNzaW9uKTogKG9wZW46IGJvb2xlYW4pID0+IHZvaWQge1xuICAgIHJldHVybiAob3BlbjogYm9vbGVhbikgPT5cbiAgICAgIHRoaXMubWFuYWdlcj8uYWN0aW9ucz8ubmV4dCh7XG4gICAgICAgIHR5cGU6ICdzZXRBbGxWaWV3c1RvZ2dsZScsXG4gICAgICAgIHBlcm1pc3Npb24sXG4gICAgICAgIG9wZW4sXG4gICAgICB9KTtcbiAgfVxuXG4gIGdldFBlcm1pc3Npb25UaXRsZSA9IFJpdlZpZXdzLmdldFBlcm1pc3Npb25UaXRsZTtcbiAgZ2V0UGVybWlzc2lvbkRlc2NyaXB0aW9uID0gUml2Vmlld3MuZ2V0UGVybWlzc2lvbkRlc2NyaXB0aW9uO1xuXG4gIHRyYWNrQnlJZChfOiBudW1iZXIsIHZpZXc6IFJpdlZpZXdzLkZ1bGxWaWV3PFUsIFY+KTogVlsnaWQnXSB7XG4gICAgcmV0dXJuIHZpZXcuaWQ7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJtYW5hZ2VyPy5zdGF0ZSB8IGFzeW5jOyBsZXQgc1wiPlxuICA8cml2LXNpZGUtc2hlZXRcbiAgICBbbGFiZWxdPVwiJ0FsbCB2aWV3cydcIlxuICAgIFt0b3BPZmZzZXRdPVwidG9wT2Zmc2V0XCJcbiAgICAoY2xvc2UpPVwiY2xvc2UuZW1pdCgpXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJjb250ZW50XCI+XG4gICAgICA8aGVhZGVyPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInRpdGxlXCI+QWxsIHZpZXdzPC9zcGFuPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgcml2QnV0dG9uXG4gICAgICAgICAgW3ZhcmlhbnRdPVwiJ2dob3N0J1wiXG4gICAgICAgICAgW2ljb25dPVwiJ1gnXCJcbiAgICAgICAgICAoY2xpY2spPVwiY2xvc2UuZW1pdCgpXCJcbiAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgPC9oZWFkZXI+XG5cbiAgICAgIDxyaXYtc2VhcmNoXG4gICAgICAgICh2YWx1ZUNoYW5nZSk9XCJcbiAgICAgICAgICBtYW5hZ2VyPy5hY3Rpb25zPy5uZXh0KHtcbiAgICAgICAgICAgIHR5cGU6ICdzZXRBbGxWaWV3c1NlYXJjaFF1ZXJ5JyxcbiAgICAgICAgICAgIHF1ZXJ5OiAkZXZlbnRcbiAgICAgICAgICB9KVxuICAgICAgICBcIlxuICAgICAgICBbdmFsdWVdPVwicy5hbGwuc2VhcmNoXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2hcIlxuICAgICAgPjwvcml2LXNlYXJjaD5cblxuICAgICAgPGRpdiBjbGFzcz1cInZpZXdzXCI+XG4gICAgICAgIDwhLS0gVmlldyBzZWN0aW9ucyBieSBwZXJtaXNzaW9uIHR5cGUgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdJZj1cInMuYWxsLnByaXZhdGVWaWV3cy5sZW5ndGggPiAwXCJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJwZXJtaXNzaW9uU2VjdGlvblwiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgIHBlcm1pc3Npb246ICdwcml2YXRlJyxcbiAgICAgICAgICAgIG9wZW46IHMuYWxsLnByaXZhdGVPcGVuLFxuICAgICAgICAgICAgb3BlbkNoYW5nZTogZ2V0T3BlbkNoYW5nZSgncHJpdmF0ZScpLFxuICAgICAgICAgICAgdmlld3M6IHMuYWxsLnByaXZhdGVWaWV3cyxcbiAgICAgICAgICAgIHRpdGxlOiBnZXRQZXJtaXNzaW9uVGl0bGUoJ3ByaXZhdGUnKSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBnZXRQZXJtaXNzaW9uRGVzY3JpcHRpb24oJ3ByaXZhdGUnKVxuICAgICAgICAgIH1cIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdJZj1cInMuYWxsLnNoYXJlZFZpZXdzLmxlbmd0aCA+IDBcIlxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInBlcm1pc3Npb25TZWN0aW9uXCJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgcGVybWlzc2lvbjogJ3NoYXJlZCcsXG4gICAgICAgICAgICBvcGVuOiBzLmFsbC5zaGFyZWRPcGVuLFxuICAgICAgICAgICAgb3BlbkNoYW5nZTogZ2V0T3BlbkNoYW5nZSgnc2hhcmVkJyksXG4gICAgICAgICAgICB2aWV3czogcy5hbGwuc2hhcmVkVmlld3MsXG4gICAgICAgICAgICB0aXRsZTogZ2V0UGVybWlzc2lvblRpdGxlKCdzaGFyZWQnKSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBnZXRQZXJtaXNzaW9uRGVzY3JpcHRpb24oJ3NoYXJlZCcpXG4gICAgICAgICAgfVwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0lmPVwicy5hbGwucHVibGljVmlld3MubGVuZ3RoID4gMFwiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwicGVybWlzc2lvblNlY3Rpb25cIlxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICBwZXJtaXNzaW9uOiAncHVibGljJyxcbiAgICAgICAgICAgIG9wZW46IHMuYWxsLnB1YmxpY09wZW4sXG4gICAgICAgICAgICBvcGVuQ2hhbmdlOiBnZXRPcGVuQ2hhbmdlKCdwdWJsaWMnKSxcbiAgICAgICAgICAgIHZpZXdzOiBzLmFsbC5wdWJsaWNWaWV3cyxcbiAgICAgICAgICAgIHRpdGxlOiBnZXRQZXJtaXNzaW9uVGl0bGUoJ3B1YmxpYycpLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGdldFBlcm1pc3Npb25EZXNjcmlwdGlvbigncHVibGljJylcbiAgICAgICAgICB9XCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDwhLS0gUGVybWlzc2lvbiBzZWN0aW9uIC0tPlxuICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAjcGVybWlzc2lvblNlY3Rpb25cbiAgICAgICAgICBsZXQtcGVybWlzc2lvbj1cInBlcm1pc3Npb25cIlxuICAgICAgICAgIGxldC1vcGVuPVwib3BlblwiXG4gICAgICAgICAgbGV0LW9wZW5DaGFuZ2U9XCJvcGVuQ2hhbmdlXCJcbiAgICAgICAgICBsZXQtdmlld3M9XCJ2aWV3c1wiXG4gICAgICAgICAgbGV0LXRpdGxlPVwidGl0bGVcIlxuICAgICAgICAgIGxldC1kZXNjcmlwdGlvbj1cImRlc2NyaXB0aW9uXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwZXJtaXNzaW9uLXNlY3Rpb25cIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwicGVybWlzc2lvbi1oZWFkZXJcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkNoYW5nZSghb3BlbilcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiISFzLmFsbC5zZWFyY2hcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cIiEhcy5hbGwuc2VhcmNoID8gJ3RydWUnIDogbnVsbFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwZXJtaXNzaW9uLWhlYWRlci1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwicGVybWlzc2lvbi10aXRsZVwiPnt7IHRpdGxlIH19PC9oMz5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBlcm1pc3Npb24tZGVzY3JpcHRpb25cIj57eyBkZXNjcmlwdGlvbiB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxyaXYtaWNvblxuICAgICAgICAgICAgICAgIFtuYW1lXT1cIm9wZW4gPyAnQ2hldnJvblVwJyA6ICdDaGV2cm9uRG93bidcIlxuICAgICAgICAgICAgICAgIFtzaXplXT1cIjIwXCJcbiAgICAgICAgICAgICAgPjwvcml2LWljb24+XG4gICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBlcm1pc3Npb24tY29udGVudFwiICpuZ0lmPVwib3BlblwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidmlld3MtbGlzdFwiICpuZ0lmPVwidmlld3MubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHZpZXcgb2Ygdmlld3M7IHRyYWNrQnk6IHRyYWNrQnlJZFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInZpZXctaXRlbVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgIG1hbmFnZXI/LmFjdGlvbnM/Lm5leHQoe1xuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdzZXRBY3RpdmVWaWV3JyxcbiAgICAgICAgICAgICAgICAgICAgICBpZDogdmlldy5pZCxcbiAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U6ICdtZW51J1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgY2xvc2UuZW1pdCgpXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2aWV3LXRpdGxlXCIgcml2VHJ1bmNhdGU+XG4gICAgICAgICAgICAgICAgICAgIDxyaXYtaGlnaGxpZ2h0XG4gICAgICAgICAgICAgICAgICAgICAgW3RleHRdPVwidmlldy50aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2luZGljZXNdPVwidmlldy50aXRsZUhpZ2hsaWdodEluZGljZXMgPz8gW11cIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDwvcml2LWhpZ2hsaWdodD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPHJpdi12aWV3LW1lbnVcbiAgICAgICAgICAgICAgICAgICAgW21hbmFnZXJdPVwibWFuYWdlclwiXG4gICAgICAgICAgICAgICAgICAgIFt2aWV3XT1cInZpZXdcIlxuICAgICAgICAgICAgICAgICAgICBbbWVudUNvbnRleHRdPVwiJ2FsbC12aWV3cydcIlxuICAgICAgICAgICAgICAgICAgPjwvcml2LXZpZXctbWVudT5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZW5hYmxlLXZpZXdcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZW5hYmxlZF09XCJ2aWV3LmVuYWJsZWQgJiYgIXZpZXcuc3lzdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICBtYW5hZ2VyPy5hY3Rpb25zPy5uZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdzZXRFbmFibGVkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB2aWV3LmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlZDogIXZpZXcuZW5hYmxlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZTogJ2V5ZUljb24nXG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInZpZXcuc3lzdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJ2aWV3LnN5c3RlbSA/ICd0cnVlJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8cml2LWljb25cbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInZpZXcuZW5hYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwidmlldy5zeXN0ZW0gPyAnTG9jaycgOiAnRXllJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgW3JpdlRvb2x0aXBdPVwidmlldy5zeXN0ZW0gPyAnJyA6ICdIaWRlIHRhYidcIlxuICAgICAgICAgICAgICAgICAgICAgIFtzaXplXT1cIjIwXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvcml2LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDxyaXYtaWNvblxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIXZpZXcuZW5hYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiJ0V5ZU9mZidcIlxuICAgICAgICAgICAgICAgICAgICAgIFtyaXZUb29sdGlwXT1cIidTaG93IHRhYidcIlxuICAgICAgICAgICAgICAgICAgICAgIFtzaXplXT1cIjIwXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvcml2LWljb24+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L3Jpdi1zaWRlLXNoZWV0PlxuPC9uZy1jb250YWluZXI+XG4iXX0=
@@ -1,118 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, } from '@angular/core';
2
- import { cloneDeep, isEqual } from 'lodash';
3
- import { RivViews } from '../state';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "@angular/common";
6
- import * as i2 from "../../../input/button/button.component";
7
- import * as i3 from "../../../overlay/callout/callout.component";
8
- import * as i4 from "../../../overlay/overlay.directive";
9
- import * as i5 from "../permission-picker/permission-picker.component";
10
- import * as i6 from "../../../input/text-field/text-field.component";
11
- export class EditViewComponent {
12
- constructor(cdr) {
13
- this.cdr = cdr;
14
- this.autoSelectName = false;
15
- this.userSelectMode = 'select';
16
- this.mode = 'edit';
17
- this.save = new EventEmitter();
18
- this.delete = new EventEmitter();
19
- this.close = new EventEmitter();
20
- }
21
- resetView() {
22
- this.editedView = cloneDeep(this.view);
23
- }
24
- ngOnInit() {
25
- this.resetView();
26
- }
27
- ngOnChanges(changes) {
28
- if (changes['view']) {
29
- this.resetView();
30
- }
31
- }
32
- canEdit() {
33
- return this.mode === 'edit';
34
- }
35
- isClean() {
36
- return isEqual(this.editedView, this.view);
37
- }
38
- titleChange(value) {
39
- if (this.editedView)
40
- this.editedView.title = value;
41
- // These handlers fire from the permission picker / text field, which render
42
- // in the overlay outlet's change-detection subtree — a different branch than
43
- // this OnPush component. Without markForCheck the updated editedView never
44
- // flows back into the child input bindings (e.g. the highlighted option).
45
- this.cdr.markForCheck();
46
- }
47
- onPermissionChange(value) {
48
- if (!this.editedView)
49
- return;
50
- if (value === 'shared') {
51
- if (!RivViews.isSharedView(this.editedView)) {
52
- this.editedView = {
53
- ...this.editedView,
54
- permission: 'shared',
55
- sharedUsers: [],
56
- };
57
- }
58
- }
59
- else {
60
- if (RivViews.isSharedView(this.editedView)) {
61
- const { sharedUsers, ...rest } = this.editedView;
62
- this.editedView = {
63
- ...rest,
64
- permission: value,
65
- };
66
- }
67
- else {
68
- this.editedView.permission = value;
69
- }
70
- }
71
- this.cdr.markForCheck();
72
- }
73
- onSharedUsersChange(users) {
74
- if (RivViews.isSharedView(this.editedView)) {
75
- this.editedView.sharedUsers = users;
76
- }
77
- this.cdr.markForCheck();
78
- }
79
- // Stable empty-array reference for the non-shared branch, so this getter
80
- // doesn't hand the permission picker a fresh [] on every change-detection
81
- // cycle (which would churn its @Input and trigger needless work).
82
- static { this.NO_SHARED_USERS = []; }
83
- getSharedUsers(view) {
84
- if (RivViews.isSharedView(view)) {
85
- return view.sharedUsers;
86
- }
87
- return EditViewComponent.NO_SHARED_USERS;
88
- }
89
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EditViewComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
90
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: EditViewComponent, selector: "riv-edit-view", inputs: { anchor: "anchor", autoSelectName: "autoSelectName", view: "view", userSource: "userSource", userSelectMode: "userSelectMode", onAddUser: "onAddUser", newTooltip: "newTooltip", mode: "mode" }, outputs: { save: "save", delete: "delete", close: "close" }, usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"editedView; let ev\">\n <riv-callout\n *riv-overlay\n [anchor]=\"anchor ?? null\"\n [isModal]=\"true\"\n [showCaret]=\"false\"\n [theme]=\"'light'\"\n [preferredPosition]=\"'bottom-right'\"\n [fallbackDirection]=\"'clockwise'\"\n (close)=\"close.emit()\"\n >\n <div class=\"edit-view\">\n <div class=\"name-input\">\n <span class=\"name-label\">Name * </span>\n <riv-text-field\n [autoFocus]=\"autoSelectName ? 'select' : false\"\n [value]=\"ev.title ?? ''\"\n (valueChange)=\"titleChange($event)\"\n ></riv-text-field>\n </div>\n\n <hr class=\"divider\" />\n\n <riv-permission-picker\n [permission]=\"ev.permission\"\n [sharedUsers]=\"getSharedUsers(ev)\"\n [userSelectMode]=\"userSelectMode\"\n [userSource]=\"userSource\"\n [onAddUser]=\"onAddUser\"\n [newTooltip]=\"newTooltip\"\n (permissionChange)=\"onPermissionChange($event)\"\n (sharedUsersChange)=\"onSharedUsersChange($event)\"\n ></riv-permission-picker>\n\n <hr class=\"divider\" />\n\n <div class=\"actions\">\n <button\n type=\"button\"\n rivButton\n [variant]=\"'ghost'\"\n [icon]=\"'Trash2'\"\n (click)=\"delete.emit(ev); close.emit()\"\n *ngIf=\"canEdit()\"\n >\n Delete\n </button>\n\n <div class=\"actions-spacer\"></div>\n\n <div class=\"primary-actions\">\n <button\n type=\"button\"\n rivButton\n [variant]=\"'ghost'\"\n (click)=\"close.emit()\"\n >\n Cancel\n </button>\n <button\n type=\"button\"\n rivButton\n [variant]=\"'primary'\"\n [disabled]=\"canEdit() && isClean()\"\n (click)=\"save.emit(ev); close.emit()\"\n >\n Save\n </button>\n </div>\n </div>\n </div>\n </riv-callout>\n</ng-container>\n", styles: [".edit-view{padding:var(--size-large);display:flex;flex-direction:column;gap:var(--size-large);width:calc(var(--base-grid-size) * 104);max-width:50vw;max-height:80vh;overflow-y:auto}.divider{height:var(--border-width);background-color:var(--border-light);border:0;width:100%}.name-label{font:var(--title-02)}.name-input{display:flex;flex-direction:column;gap:var(--size-small)}.actions{display:flex;justify-content:space-between;align-items:center}.actions-spacer{flex-grow:1}.primary-actions{display:flex;align-items:center;gap:var(--size-small)}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.ButtonComponent, selector: "[rivButton]", inputs: ["locked", "disabled", "loading", "full", "size", "variant", "icon", "iconPosition", "current"] }, { kind: "component", type: i3.CalloutComponent, selector: "riv-callout", inputs: ["anchor", "isModal", "preferredPosition", "allowedPositions", "fallbackDirection", "showCaret", "theme"], outputs: ["close"] }, { kind: "directive", type: i4.OverlayDirective, selector: "[riv-overlay]" }, { kind: "component", type: i5.PermissionPickerComponent, selector: "riv-permission-picker", inputs: ["permission", "sharedUsers", "userSelectMode", "userSource", "onAddUser", "newTooltip", "disabledPermissions"], outputs: ["permissionChange", "sharedUsersChange"] }, { kind: "component", type: i6.TextFieldComponent, selector: "riv-text-field", inputs: ["disabled", "readonly", "placeholder", "casing", "type", "size", "autoFocus", "name", "minLength", "maxLength", "value"], outputs: ["valueChange", "blur"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
91
- }
92
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EditViewComponent, decorators: [{
93
- type: Component,
94
- args: [{ selector: 'riv-edit-view', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"editedView; let ev\">\n <riv-callout\n *riv-overlay\n [anchor]=\"anchor ?? null\"\n [isModal]=\"true\"\n [showCaret]=\"false\"\n [theme]=\"'light'\"\n [preferredPosition]=\"'bottom-right'\"\n [fallbackDirection]=\"'clockwise'\"\n (close)=\"close.emit()\"\n >\n <div class=\"edit-view\">\n <div class=\"name-input\">\n <span class=\"name-label\">Name * </span>\n <riv-text-field\n [autoFocus]=\"autoSelectName ? 'select' : false\"\n [value]=\"ev.title ?? ''\"\n (valueChange)=\"titleChange($event)\"\n ></riv-text-field>\n </div>\n\n <hr class=\"divider\" />\n\n <riv-permission-picker\n [permission]=\"ev.permission\"\n [sharedUsers]=\"getSharedUsers(ev)\"\n [userSelectMode]=\"userSelectMode\"\n [userSource]=\"userSource\"\n [onAddUser]=\"onAddUser\"\n [newTooltip]=\"newTooltip\"\n (permissionChange)=\"onPermissionChange($event)\"\n (sharedUsersChange)=\"onSharedUsersChange($event)\"\n ></riv-permission-picker>\n\n <hr class=\"divider\" />\n\n <div class=\"actions\">\n <button\n type=\"button\"\n rivButton\n [variant]=\"'ghost'\"\n [icon]=\"'Trash2'\"\n (click)=\"delete.emit(ev); close.emit()\"\n *ngIf=\"canEdit()\"\n >\n Delete\n </button>\n\n <div class=\"actions-spacer\"></div>\n\n <div class=\"primary-actions\">\n <button\n type=\"button\"\n rivButton\n [variant]=\"'ghost'\"\n (click)=\"close.emit()\"\n >\n Cancel\n </button>\n <button\n type=\"button\"\n rivButton\n [variant]=\"'primary'\"\n [disabled]=\"canEdit() && isClean()\"\n (click)=\"save.emit(ev); close.emit()\"\n >\n Save\n </button>\n </div>\n </div>\n </div>\n </riv-callout>\n</ng-container>\n", styles: [".edit-view{padding:var(--size-large);display:flex;flex-direction:column;gap:var(--size-large);width:calc(var(--base-grid-size) * 104);max-width:50vw;max-height:80vh;overflow-y:auto}.divider{height:var(--border-width);background-color:var(--border-light);border:0;width:100%}.name-label{font:var(--title-02)}.name-input{display:flex;flex-direction:column;gap:var(--size-small)}.actions{display:flex;justify-content:space-between;align-items:center}.actions-spacer{flex-grow:1}.primary-actions{display:flex;align-items:center;gap:var(--size-small)}\n"] }]
95
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { anchor: [{
96
- type: Input
97
- }], autoSelectName: [{
98
- type: Input
99
- }], view: [{
100
- type: Input
101
- }], userSource: [{
102
- type: Input
103
- }], userSelectMode: [{
104
- type: Input
105
- }], onAddUser: [{
106
- type: Input
107
- }], newTooltip: [{
108
- type: Input
109
- }], mode: [{
110
- type: Input
111
- }], save: [{
112
- type: Output
113
- }], delete: [{
114
- type: Output
115
- }], close: [{
116
- type: Output
117
- }] } });
118
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL25hdmlnYXRpb24vdmlld3MvZWRpdC12aWV3L2VkaXQtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi9uYXZpZ2F0aW9uL3ZpZXdzL2VkaXQtdmlldy9lZGl0LXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEdBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDNUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQzs7Ozs7Ozs7QUFRcEMsTUFBTSxPQUFPLGlCQUFpQjtJQXdDNUIsWUFBNkIsR0FBc0I7UUFBdEIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUEvQm5ELG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBV2hDLG1CQUFjLEdBQTRCLFFBQVEsQ0FBQztRQVNuRCxTQUFJLEdBQXNCLE1BQU0sQ0FBQztRQUdqQyxTQUFJLEdBQUcsSUFBSSxZQUFZLEVBQTJCLENBQUM7UUFHbkQsV0FBTSxHQUFHLElBQUksWUFBWSxFQUEyQixDQUFDO1FBR3JELFVBQUssR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO0lBRXFCLENBQUM7SUFFL0MsU0FBUztRQUNmLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hD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REgsTUFBTTtnQkFJUCxNQUFNO3NCQURMLE1BQU07Z0JBSVAsS0FBSztzQkFESixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY2xvbmVEZWVwLCBpc0VxdWFsIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IFJpdlZpZXdzIH0gZnJvbSAnLi4vc3RhdGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyaXYtZWRpdC12aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2VkaXQtdmlldy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2VkaXQtdmlldy5jb21wb25lbnQuY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBFZGl0Vmlld0NvbXBvbmVudDxcbiAgVSBleHRlbmRzIFJpdlZpZXdzLlVzZXIsXG4gIFYgZXh0ZW5kcyBSaXZWaWV3cy5WaWV3PFU+LFxuPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzXG57XG4gIEBJbnB1dCgpXG4gIGFuY2hvcj86IEVsZW1lbnQgfCBET01SZWN0IHwgbnVsbDtcblxuICBASW5wdXQoKVxuICBhdXRvU2VsZWN0TmFtZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHZpZXc/OiBSaXZWaWV3cy5GdWxsVmlldzxVLCBWPjtcblxuICBlZGl0ZWRWaWV3PzogUml2Vmlld3MuRnVsbFZpZXc8VSwgVj47XG5cbiAgQElucHV0KClcbiAgdXNlclNvdXJjZT86IFJpdlZpZXdzLlVzZXJTb3VyY2U8VT47XG5cbiAgQElucHV0KClcbiAgdXNlclNlbGVjdE1vZGU6IFJpdlZpZXdzLlVzZXJTZWxlY3RNb2RlID0gJ3NlbGVjdCc7XG5cbiAgQElucHV0KClcbiAgb25BZGRVc2VyPzogUml2Vmlld3MuT25BZGRVc2VyPFU+O1xuXG4gIEBJbnB1dCgpXG4gIG5ld1Rvb2x0aXA/OiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgbW9kZTogJ2VkaXQnIHwgJ2NyZWF0ZScgPSAnZWRpdCc7XG5cbiAgQE91dHB1dCgpXG4gIHNhdmUgPSBuZXcgRXZlbnRFbWl0dGVyPFJpdlZpZXdzLkZ1bGxWaWV3PFUsIFY+PigpO1xuXG4gIEBPdXRwdXQoKVxuICBkZWxldGUgPSBuZXcgRXZlbnRFbWl0dGVyPFJpdlZpZXdzLkZ1bGxWaWV3PFUsIFY+PigpO1xuXG4gIEBPdXRwdXQoKVxuICBjbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgcHJpdmF0ZSByZXNldFZpZXcoKSB7XG4gICAgdGhpcy5lZGl0ZWRWaWV3ID0gY2xvbmVEZWVwKHRoaXMudmlldyk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2V0VmlldygpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWyd2aWV3J10pIHtcbiAgICAgIHRoaXMucmVzZXRWaWV3KCk7XG4gICAgfVxuICB9XG5cbiAgY2FuRWRpdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlID09PSAnZWRpdCc7XG4gIH1cblxuICBpc0NsZWFuKCkge1xuICAgIHJldHVybiBpc0VxdWFsKHRoaXMuZWRpdGVkVmlldywgdGhpcy52aWV3KTtcbiAgfVxuXG4gIHRpdGxlQ2hhbmdlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5lZGl0ZWRWaWV3KSB0aGlzLmVkaXRlZFZpZXcudGl0bGUgPSB2YWx1ZTtcbiAgICAvLyBUaGVzZSBoYW5kbGVycyBmaXJlIGZyb20gdGhlIHBlcm1pc3Npb24gcGlja2VyIC8gdGV4dCBmaWVsZCwgd2hpY2ggcmVuZGVyXG4gICAgLy8gaW4gdGhlIG92ZXJsYXkgb3V0bGV0J3MgY2hhbmdlLWRldGVjdGlvbiBzdWJ0cmVlIOKAlCBhIGRpZmZlcmVudCBicmFuY2ggdGhhblxuICAgIC8vIHRoaXMgT25QdXNoIGNvbXBvbmVudC4gV2l0aG91dCBtYXJrRm9yQ2hlY2sgdGhlIHVwZGF0ZWQgZWRpdGVkVmlldyBuZXZlclxuICAgIC8vIGZsb3dzIGJhY2sgaW50byB0aGUgY2hpbGQgaW5wdXQgYmluZGluZ3MgKGUuZy4gdGhlIGhpZ2hsaWdodGVkIG9wdGlvbikuXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvblBlcm1pc3Npb25DaGFuZ2UodmFsdWU6IFJpdlZpZXdzLlZpZXdQZXJtaXNzaW9uKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmVkaXRlZFZpZXcpIHJldHVybjtcblxuICAgIGlmICh2YWx1ZSA9PT0gJ3NoYXJlZCcpIHtcbiAgICAgIGlmICghUml2Vmlld3MuaXNTaGFyZWRWaWV3KHRoaXMuZWRpdGVkVmlldykpIHtcbiAgICAgICAgdGhpcy5lZGl0ZWRWaWV3ID0ge1xuICAgICAgICAgIC4uLnRoaXMuZWRpdGVkVmlldyxcbiAgICAgICAgICBwZXJtaXNzaW9uOiAnc2hhcmVkJyxcbiAgICAgICAgICBzaGFyZWRVc2VyczogW10sXG4gICAgICAgIH0gYXMgdW5rbm93biBhcyBSaXZWaWV3cy5GdWxsVmlldzxVLCBWPjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKFJpdlZpZXdzLmlzU2hhcmVkVmlldyh0aGlzLmVkaXRlZFZpZXcpKSB7XG4gICAgICAgIGNvbnN0IHsgc2hhcmVkVXNlcnMsIC4uLnJlc3QgfSA9IHRoaXMuZWRpdGVkVmlldztcbiAgICAgICAgdGhpcy5lZGl0ZWRWaWV3ID0ge1xuICAgICAgICAgIC4uLnJlc3QsXG4gICAgICAgICAgcGVybWlzc2lvbjogdmFsdWUsXG4gICAgICAgIH0gYXMgdW5rbm93biBhcyBSaXZWaWV3cy5GdWxsVmlldzxVLCBWPjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZWRpdGVkVmlldy5wZXJtaXNzaW9uID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25TaGFyZWRVc2Vyc0NoYW5nZSh1c2VyczogVVtdKTogdm9pZCB7XG4gICAgaWYgKFJpdlZpZXdzLmlzU2hhcmVkVmlldyh0aGlzLmVkaXRlZFZpZXcpKSB7XG4gICAgICB0aGlzLmVkaXRlZFZpZXcuc2hhcmVkVXNlcnMgPSB1c2VycztcbiAgICB9XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvLyBTdGFibGUgZW1wdHktYXJyYXkgcmVmZXJlbmNlIGZvciB0aGUgbm9uLXNoYXJlZCBicmFuY2gsIHNvIHRoaXMgZ2V0dGVyXG4gIC8vIGRvZXNuJ3QgaGFuZCB0aGUgcGVybWlzc2lvbiBwaWNrZXIgYSBmcmVzaCBbXSBvbiBldmVyeSBjaGFuZ2UtZGV0ZWN0aW9uXG4gIC8vIGN5Y2xlICh3aGljaCB3b3VsZCBjaHVybiBpdHMgQElucHV0IGFuZCB0cmlnZ2VyIG5lZWRsZXNzIHdvcmspLlxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBOT19TSEFSRURfVVNFUlM6IFJpdlZpZXdzLlVzZXJbXSA9IFtdO1xuXG4gIGdldFNoYXJlZFVzZXJzKHZpZXc/OiBSaXZWaWV3cy5GdWxsVmlldzxVLCBWPik6IFVbXSB7XG4gICAgaWYgKFJpdlZpZXdzLmlzU2hhcmVkVmlldyh2aWV3KSkge1xuICAgICAgcmV0dXJuIHZpZXcuc2hhcmVkVXNlcnM7XG4gICAgfVxuICAgIHJldHVybiBFZGl0Vmlld0NvbXBvbmVudC5OT19TSEFSRURfVVNFUlMgYXMgVVtdO1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiZWRpdGVkVmlldzsgbGV0IGV2XCI+XG4gIDxyaXYtY2FsbG91dFxuICAgICpyaXYtb3ZlcmxheVxuICAgIFthbmNob3JdPVwiYW5jaG9yID8/IG51bGxcIlxuICAgIFtpc01vZGFsXT1cInRydWVcIlxuICAgIFtzaG93Q2FyZXRdPVwiZmFsc2VcIlxuICAgIFt0aGVtZV09XCInbGlnaHQnXCJcbiAgICBbcHJlZmVycmVkUG9zaXRpb25dPVwiJ2JvdHRvbS1yaWdodCdcIlxuICAgIFtmYWxsYmFja0RpcmVjdGlvbl09XCInY2xvY2t3aXNlJ1wiXG4gICAgKGNsb3NlKT1cImNsb3NlLmVtaXQoKVwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwiZWRpdC12aWV3XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibmFtZS1pbnB1dFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cIm5hbWUtbGFiZWxcIj5OYW1lICogPC9zcGFuPlxuICAgICAgICA8cml2LXRleHQtZmllbGRcbiAgICAgICAgICBbYXV0b0ZvY3VzXT1cImF1dG9TZWxlY3ROYW1lID8gJ3NlbGVjdCcgOiBmYWxzZVwiXG4gICAgICAgICAgW3ZhbHVlXT1cImV2LnRpdGxlID8/ICcnXCJcbiAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwidGl0bGVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgID48L3Jpdi10ZXh0LWZpZWxkPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxociBjbGFzcz1cImRpdmlkZXJcIiAvPlxuXG4gICAgICA8cml2LXBlcm1pc3Npb24tcGlja2VyXG4gICAgICAgIFtwZXJtaXNzaW9uXT1cImV2LnBlcm1pc3Npb25cIlxuICAgICAgICBbc2hhcmVkVXNlcnNdPVwiZ2V0U2hhcmVkVXNlcnMoZXYpXCJcbiAgICAgICAgW3VzZXJTZWxlY3RNb2RlXT1cInVzZXJTZWxlY3RNb2RlXCJcbiAgICAgICAgW3VzZXJTb3VyY2VdPVwidXNlclNvdXJjZVwiXG4gICAgICAgIFtvbkFkZFVzZXJdPVwib25BZGRVc2VyXCJcbiAgICAgICAgW25ld1Rvb2x0aXBdPVwibmV3VG9vbHRpcFwiXG4gICAgICAgIChwZXJtaXNzaW9uQ2hhbmdlKT1cIm9uUGVybWlzc2lvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgKHNoYXJlZFVzZXJzQ2hhbmdlKT1cIm9uU2hhcmVkVXNlcnNDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICA+PC9yaXYtcGVybWlzc2lvbi1waWNrZXI+XG5cbiAgICAgIDxociBjbGFzcz1cImRpdmlkZXJcIiAvPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uc1wiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgcml2QnV0dG9uXG4gICAgICAgICAgW3ZhcmlhbnRdPVwiJ2dob3N0J1wiXG4gICAgICAgICAgW2ljb25dPVwiJ1RyYXNoMidcIlxuICAgICAgICAgIChjbGljayk9XCJkZWxldGUuZW1pdChldik7IGNsb3NlLmVtaXQoKVwiXG4gICAgICAgICAgKm5nSWY9XCJjYW5FZGl0KClcIlxuICAgICAgICA+XG4gICAgICAgICAgRGVsZXRlXG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25zLXNwYWNlclwiPjwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwcmltYXJ5LWFjdGlvbnNcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIHJpdkJ1dHRvblxuICAgICAgICAgICAgW3ZhcmlhbnRdPVwiJ2dob3N0J1wiXG4gICAgICAgICAgICAoY2xpY2spPVwiY2xvc2UuZW1pdCgpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBDYW5jZWxcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIHJpdkJ1dHRvblxuICAgICAgICAgICAgW3ZhcmlhbnRdPVwiJ3ByaW1hcnknXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjYW5FZGl0KCkgJiYgaXNDbGVhbigpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJzYXZlLmVtaXQoZXYpOyBjbG9zZS5lbWl0KClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIFNhdmVcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9yaXYtY2FsbG91dD5cbjwvbmctY29udGFpbmVyPlxuIl19
@@ -1,151 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, } from '@angular/core';
2
- import { isEqual } from 'lodash';
3
- import { distinctUntilChanged, map } from 'rxjs/operators';
4
- import { RivSelect } from '../../../input/select/state';
5
- import { RivViews } from '../state';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "@angular/common";
8
- import * as i2 from "../../../icon/icon.component";
9
- import * as i3 from "../../../input/search-select/search-select.component";
10
- import * as i4 from "../../../input/select/select/select.component";
11
- const titles = {
12
- private: 'Private',
13
- public: 'Public',
14
- shared: 'Shared',
15
- };
16
- const subtitles = {
17
- private: 'Only visible to you',
18
- public: 'Visible to everyone',
19
- shared: 'Only visible to those with access',
20
- };
21
- export class PermissionPickerComponent {
22
- constructor(cdr) {
23
- this.cdr = cdr;
24
- this.permission = 'private';
25
- this.sharedUsers = [];
26
- this.userSelectMode = 'select';
27
- this.disabledPermissions = [];
28
- this.permissionChange = new EventEmitter();
29
- this.sharedUsersChange = new EventEmitter();
30
- this.permissionOptions = RivViews.ViewPermissions.map(permission => ({
31
- value: permission,
32
- title: titles[permission],
33
- subtitle: subtitles[permission],
34
- }));
35
- this.userOptions = [];
36
- this.selectedUsers = [];
37
- }
38
- ngOnInit() {
39
- this.setUpUserSelectManager();
40
- }
41
- ngOnChanges(changes) {
42
- // ngOnInit performs the initial setup, so ignore first-change events here.
43
- // Rebuild only on a genuine change: a new data source, a mode switch, or a
44
- // value-level change to the seeded selection. Comparing sharedUsers by value
45
- // (rather than reference) is essential — the parent binds a fresh array each
46
- // change-detection cycle, and reacting to that reference churn would rebuild
47
- // the manager on every cycle.
48
- const userSourceChanged = changes['userSource'] && !changes['userSource'].firstChange;
49
- const userSelectModeChanged = changes['userSelectMode'] && !changes['userSelectMode'].firstChange;
50
- const sharedUsersChanged = changes['sharedUsers'] &&
51
- !changes['sharedUsers'].firstChange &&
52
- !isEqual(changes['sharedUsers'].previousValue, changes['sharedUsers'].currentValue);
53
- if (userSourceChanged || userSelectModeChanged || sharedUsersChanged) {
54
- this.setUpUserSelectManager();
55
- }
56
- }
57
- ngOnDestroy() {
58
- this.tearDownUserSelectManager();
59
- }
60
- tearDownUserSelectManager() {
61
- this.userSelectSubscription?.unsubscribe();
62
- }
63
- async setUpUserSelectManager() {
64
- this.tearDownUserSelectManager();
65
- if (this.userSelectMode === 'search-select') {
66
- const users = await (this.userSource || (() => []))();
67
- this.userOptions = users.map(u => ({
68
- ...u,
69
- new: u.new ?? false,
70
- }));
71
- this.selectedUsers = this.sharedUsers.map(u => ({
72
- ...u,
73
- new: u.new ?? false,
74
- }));
75
- this.cdr.markForCheck();
76
- }
77
- else {
78
- this.userSelectManager = RivSelect.createInMemoryManager(async () => [{ options: await (this.userSource || (() => []))() }], {
79
- allowSearch: true,
80
- allowSelectAll: true,
81
- allowMultiSelect: true,
82
- displayLimit: 500,
83
- initialState: {
84
- selection: {
85
- selected: new RivSelect.OptionSet(this.sharedUsers),
86
- },
87
- },
88
- });
89
- this.userSelectSubscription = this.userSelectManager.state
90
- .pipe(map(state => [...state.selection.selected]), distinctUntilChanged(isEqual))
91
- .subscribe(users => {
92
- // The manager replays its initial (seeded) selection synchronously on
93
- // subscribe. Emitting that back would echo the sharedUsers input to
94
- // the parent, which mutates its view and feeds a new array reference
95
- // straight back into this component — an infinite change-detection
96
- // loop. Only propagate genuine, user-driven selection changes.
97
- if (!isEqual(users, this.sharedUsers)) {
98
- this.sharedUsersChange.emit(users);
99
- }
100
- });
101
- this.userSelectManager.actions.next({ type: 'load' });
102
- }
103
- }
104
- onPermissionClick(value) {
105
- if (this.isDisabled(value)) {
106
- return;
107
- }
108
- this.permissionChange.emit(value);
109
- }
110
- isDisabled(permission) {
111
- return this.disabledPermissions?.includes(permission) ?? false;
112
- }
113
- onSelectedUsersChange(users) {
114
- this.selectedUsers = users;
115
- this.sharedUsersChange.emit(RivViews.toSharedUsers(users));
116
- }
117
- handleAddUser(searchText) {
118
- if (!this.onAddUser)
119
- return;
120
- const newUser = this.onAddUser(searchText);
121
- this.userOptions = [...this.userOptions, newUser];
122
- this.selectedUsers = [...this.selectedUsers, newUser];
123
- this.sharedUsersChange.emit(RivViews.toSharedUsers(this.selectedUsers));
124
- this.cdr.markForCheck();
125
- }
126
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PermissionPickerComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
127
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: PermissionPickerComponent, selector: "riv-permission-picker", inputs: { permission: "permission", sharedUsers: "sharedUsers", userSelectMode: "userSelectMode", userSource: "userSource", onAddUser: "onAddUser", newTooltip: "newTooltip", disabledPermissions: "disabledPermissions" }, outputs: { permissionChange: "permissionChange", sharedUsersChange: "sharedUsersChange" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"permission-picker\">\n <div class=\"permission-label\">View permissions</div>\n\n <div class=\"permission-options\">\n <button\n *ngFor=\"let option of permissionOptions\"\n class=\"permission-option\"\n [class.current]=\"permission === option.value\"\n [class.disabled]=\"isDisabled(option.value)\"\n type=\"button\"\n [attr.aria-checked]=\"permission === option.value\"\n [attr.aria-label]=\"option.title + ' permission'\"\n [attr.aria-disabled]=\"isDisabled(option.value)\"\n (click)=\"onPermissionClick(option.value)\"\n >\n <div class=\"option-content\">\n <div class=\"option-title\">\n <span>{{ option.title }}</span>\n <span class=\"option-description\">{{ option.subtitle }}</span>\n </div>\n <riv-icon\n *ngIf=\"permission === option.value\"\n class=\"permission-indicator\"\n [name]=\"'Check'\"\n [size]=\"16\"\n ></riv-icon>\n </div>\n <riv-select\n *ngIf=\"\n permission === 'shared' &&\n option.value === 'shared' &&\n userSelectMode === 'select' &&\n userSelectManager\n \"\n [label]=\"'Users with access'\"\n [manager]=\"userSelectManager\"\n ></riv-select>\n <riv-search-select\n *ngIf=\"\n permission === 'shared' &&\n option.value === 'shared' &&\n userSelectMode === 'search-select'\n \"\n (click)=\"$event.stopPropagation()\"\n [label]=\"'Users with access'\"\n [options]=\"userOptions\"\n [selected]=\"selectedUsers\"\n [placeholder]=\"'Search users'\"\n [addNewLabel]=\"'Add'\"\n [newTooltip]=\"newTooltip\"\n (selectedChange)=\"onSelectedUsersChange($event)\"\n (addNew)=\"handleAddUser($event)\"\n ></riv-search-select>\n </button>\n </div>\n</div>\n", styles: [".permission-picker{display:flex;flex-direction:column;gap:var(--size-medium)}.permission-options{display:flex;flex-direction:column}.permission-label{font:var(--title-02)}.permission-option{display:flex;flex-direction:column;gap:var(--size-small);padding:var(--size-small) var(--size-medium);border-radius:var(--border-radius-large);cursor:pointer;text-align:left}.permission-option:hover:not(.disabled){background-color:var(--surface-light-1)}.permission-option:active:not(.disabled),.permission-option.current{background-color:var(--surface-light-2)}.permission-option.disabled{cursor:not-allowed;opacity:.5}.option-content{display:flex;justify-content:space-between;align-items:center}.option-title{font:var(--body-medium);display:flex;flex-direction:column;align-items:flex-start}.option-description{font:var(--body-medium);color:var(--type-light-low-contrast)}.permission-indicator{color:var(--type-light-link)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.IconComponent, selector: "riv-icon", inputs: ["name", "fillColor", "size", "customSize", "strokeWidth"] }, { kind: "component", type: i3.SearchSelectComponent, selector: "riv-search-select", inputs: ["options", "selected", "placeholder", "addNewLabel", "newTooltip", "size", "disabled", "label", "help", "required", "state", "errorMessage", "optionTemplate", "chipTemplate"], outputs: ["selectedChange", "addNew"] }, { kind: "component", type: i4.SelectComponent, selector: "riv-select", inputs: ["manager", "size", "disabled", "locked", "grow", "allowedCalloutPositions", "preferredCalloutPosition"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
128
- }
129
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PermissionPickerComponent, decorators: [{
130
- type: Component,
131
- args: [{ selector: 'riv-permission-picker', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"permission-picker\">\n <div class=\"permission-label\">View permissions</div>\n\n <div class=\"permission-options\">\n <button\n *ngFor=\"let option of permissionOptions\"\n class=\"permission-option\"\n [class.current]=\"permission === option.value\"\n [class.disabled]=\"isDisabled(option.value)\"\n type=\"button\"\n [attr.aria-checked]=\"permission === option.value\"\n [attr.aria-label]=\"option.title + ' permission'\"\n [attr.aria-disabled]=\"isDisabled(option.value)\"\n (click)=\"onPermissionClick(option.value)\"\n >\n <div class=\"option-content\">\n <div class=\"option-title\">\n <span>{{ option.title }}</span>\n <span class=\"option-description\">{{ option.subtitle }}</span>\n </div>\n <riv-icon\n *ngIf=\"permission === option.value\"\n class=\"permission-indicator\"\n [name]=\"'Check'\"\n [size]=\"16\"\n ></riv-icon>\n </div>\n <riv-select\n *ngIf=\"\n permission === 'shared' &&\n option.value === 'shared' &&\n userSelectMode === 'select' &&\n userSelectManager\n \"\n [label]=\"'Users with access'\"\n [manager]=\"userSelectManager\"\n ></riv-select>\n <riv-search-select\n *ngIf=\"\n permission === 'shared' &&\n option.value === 'shared' &&\n userSelectMode === 'search-select'\n \"\n (click)=\"$event.stopPropagation()\"\n [label]=\"'Users with access'\"\n [options]=\"userOptions\"\n [selected]=\"selectedUsers\"\n [placeholder]=\"'Search users'\"\n [addNewLabel]=\"'Add'\"\n [newTooltip]=\"newTooltip\"\n (selectedChange)=\"onSelectedUsersChange($event)\"\n (addNew)=\"handleAddUser($event)\"\n ></riv-search-select>\n </button>\n </div>\n</div>\n", styles: [".permission-picker{display:flex;flex-direction:column;gap:var(--size-medium)}.permission-options{display:flex;flex-direction:column}.permission-label{font:var(--title-02)}.permission-option{display:flex;flex-direction:column;gap:var(--size-small);padding:var(--size-small) var(--size-medium);border-radius:var(--border-radius-large);cursor:pointer;text-align:left}.permission-option:hover:not(.disabled){background-color:var(--surface-light-1)}.permission-option:active:not(.disabled),.permission-option.current{background-color:var(--surface-light-2)}.permission-option.disabled{cursor:not-allowed;opacity:.5}.option-content{display:flex;justify-content:space-between;align-items:center}.option-title{font:var(--body-medium);display:flex;flex-direction:column;align-items:flex-start}.option-description{font:var(--body-medium);color:var(--type-light-low-contrast)}.permission-indicator{color:var(--type-light-link)}\n"] }]
132
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { permission: [{
133
- type: Input
134
- }], sharedUsers: [{
135
- type: Input
136
- }], userSelectMode: [{
137
- type: Input
138
- }], userSource: [{
139
- type: Input
140
- }], onAddUser: [{
141
- type: Input
142
- }], newTooltip: [{
143
- type: Input
144
- }], disabledPermissions: [{
145
- type: Input
146
- }], permissionChange: [{
147
- type: Output
148
- }], sharedUsersChange: [{
149
- type: Output
150
- }] } });
151
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvbmF2aWdhdGlvbi92aWV3cy9wZXJtaXNzaW9uLXBpY2tlci9wZXJtaXNzaW9uLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi9uYXZpZ2F0aW9uL3ZpZXdzL3Blcm1pc3Npb24tcGlja2VyL3Blcm1pc3Npb24tcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxHQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFakMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDOzs7Ozs7QUFFcEMsTUFBTSxNQUFNLEdBQTRDO0lBQ3RELE9BQU8sRUFBRSxTQUFTO0lBQ2xCLE1BQU0sRUFBRSxRQUFRO0lBQ2hCLE1BQU0sRUFBRSxRQUFRO0NBQ2pCLENBQUM7QUFFRixNQUFNLFNBQVMsR0FBNEM7SUFDekQsT0FBTyxFQUFFLHFCQUFxQjtJQUM5QixNQUFNLEVBQUUscUJBQXFCO0lBQzdCLE1BQU0sRUFBRSxtQ0FBbUM7Q0FDNUMsQ0FBQztBQVFGLE1BQU0sT0FBTyx5QkFBeUI7SUEwQ3BDLFlBQW9CLEdBQXNCO1FBQXRCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBdEMxQyxlQUFVLEdBQTRCLFNBQVMsQ0FBQztRQUdoRCxnQkFBVyxH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Y0FBYztzQkFEYixLQUFLO2dCQUlOLFVBQVU7c0JBRFQsS0FBSztnQkFJTixTQUFTO3NCQURSLEtBQUs7Z0JBSU4sVUFBVTtzQkFEVCxLQUFLO2dCQUlOLG1CQUFtQjtzQkFEbEIsS0FBSztnQkFJTixnQkFBZ0I7c0JBRGYsTUFBTTtnQkFJUCxpQkFBaUI7c0JBRGhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzRXF1YWwgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgUml2U2VsZWN0IH0gZnJvbSAnLi4vLi4vLi4vaW5wdXQvc2VsZWN0L3N0YXRlJztcbmltcG9ydCB7IFJpdlZpZXdzIH0gZnJvbSAnLi4vc3RhdGUnO1xuXG5jb25zdCB0aXRsZXM6IFJlY29yZDxSaXZWaWV3cy5WaWV3UGVybWlzc2lvbiwgc3RyaW5nPiA9IHtcbiAgcHJpdmF0ZTogJ1ByaXZhdGUnLFxuICBwdWJsaWM6ICdQdWJsaWMnLFxuICBzaGFyZWQ6ICdTaGFyZWQnLFxufTtcblxuY29uc3Qgc3VidGl0bGVzOiBSZWNvcmQ8Uml2Vmlld3MuVmlld1Blcm1pc3Npb24sIHN0cmluZz4gPSB7XG4gIHByaXZhdGU6ICdPbmx5IHZpc2libGUgdG8geW91JyxcbiAgcHVibGljOiAnVmlzaWJsZSB0byBldmVyeW9uZScsXG4gIHNoYXJlZDogJ09ubHkgdmlzaWJsZSB0byB0aG9zZSB3aXRoIGFjY2VzcycsXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyaXYtcGVybWlzc2lvbi1waWNrZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vcGVybWlzc2lvbi1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wZXJtaXNzaW9uLXBpY2tlci5jb21wb25lbnQuY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBQZXJtaXNzaW9uUGlja2VyQ29tcG9uZW50PFUgZXh0ZW5kcyBSaXZWaWV3cy5Vc2VyPlxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3lcbntcbiAgQElucHV0KClcbiAgcGVybWlzc2lvbjogUml2Vmlld3MuVmlld1Blcm1pc3Npb24gPSAncHJpdmF0ZSc7XG5cbiAgQElucHV0KClcbiAgc2hhcmVkVXNlcnM6IFVbXSA9IFtdO1xuXG4gIEBJbnB1dCgpXG4gIHVzZXJTZWxlY3RNb2RlOiBSaXZWaWV3cy5Vc2VyU2VsZWN0TW9kZSA9ICdzZWxlY3QnO1xuXG4gIEBJbnB1dCgpXG4gIHVzZXJTb3VyY2U/OiBSaXZWaWV3cy5Vc2VyU291cmNlPFU+O1xuXG4gIEBJbnB1dCgpXG4gIG9uQWRkVXNlcj86IFJpdlZpZXdzLk9uQWRkVXNlcjxVPjtcblxuICBASW5wdXQoKVxuICBuZXdUb29sdGlwPzogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIGRpc2FibGVkUGVybWlzc2lvbnM6IFJpdlZpZXdzLlZpZXdQZXJtaXNzaW9uW10gPSBbXTtcblxuICBAT3V0cHV0KClcbiAgcGVybWlzc2lvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Uml2Vmlld3MuVmlld1Blcm1pc3Npb24+KCk7XG5cbiAgQE91dHB1dCgpXG4gIHNoYXJlZFVzZXJzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxVW10+KCk7XG5cbiAgcmVhZG9ubHkgcGVybWlzc2lvbk9wdGlvbnMgPSBSaXZWaWV3cy5WaWV3UGVybWlzc2lvbnMubWFwKHBlcm1pc3Npb24gPT4gKHtcbiAgICB2YWx1ZTogcGVybWlzc2lvbixcbiAgICB0aXRsZTogdGl0bGVzW3Blcm1pc3Npb25dLFxuICAgIHN1YnRpdGxlOiBzdWJ0aXRsZXNbcGVybWlzc2lvbl0sXG4gIH0pKTtcblxuICB1c2VyU2VsZWN0TWFuYWdlcj86IFJpdlNlbGVjdC5NYW5hZ2VyPFU+O1xuICBwcml2YXRlIHVzZXJTZWxlY3RTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgdXNlck9wdGlvbnM6IFJpdlZpZXdzLlNlYXJjaFNlbGVjdFVzZXI8VT5bXSA9IFtdO1xuICBzZWxlY3RlZFVzZXJzOiBSaXZWaWV3cy5TZWFyY2hTZWxlY3RVc2VyPFU+W10gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRVcFVzZXJTZWxlY3RNYW5hZ2VyKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgLy8gbmdPbkluaXQgcGVyZm9ybXMgdGhlIGluaXRpYWwgc2V0dXAsIHNvIGlnbm9yZSBmaXJzdC1jaGFuZ2UgZXZlbnRzIGhlcmUuXG4gICAgLy8gUmVidWlsZCBvbmx5IG9uIGEgZ2VudWluZSBjaGFuZ2U6IGEgbmV3IGRhdGEgc291cmNlLCBhIG1vZGUgc3dpdGNoLCBvciBhXG4gICAgLy8gdmFsdWUtbGV2ZWwgY2hhbmdlIHRvIHRoZSBzZWVkZWQgc2VsZWN0aW9uLiBDb21wYXJpbmcgc2hhcmVkVXNlcnMgYnkgdmFsdWVcbiAgICAvLyAocmF0aGVyIHRoYW4gcmVmZXJlbmNlKSBpcyBlc3NlbnRpYWwg4oCUIHRoZSBwYXJlbnQgYmluZHMgYSBmcmVzaCBhcnJheSBlYWNoXG4gICAgLy8gY2hhbmdlLWRldGVjdGlvbiBjeWNsZSwgYW5kIHJlYWN0aW5nIHRvIHRoYXQgcmVmZXJlbmNlIGNodXJuIHdvdWxkIHJlYnVpbGRcbiAgICAvLyB0aGUgbWFuYWdlciBvbiBldmVyeSBjeWNsZS5cbiAgICBjb25zdCB1c2VyU291cmNlQ2hhbmdlZCA9XG4gICAgICBjaGFuZ2VzWyd1c2VyU291cmNlJ10gJiYgIWNoYW5nZXNbJ3VzZXJTb3VyY2UnXS5maXJzdENoYW5nZTtcbiAgICBjb25zdCB1c2VyU2VsZWN0TW9kZUNoYW5nZWQgPVxuICAgICAgY2hhbmdlc1sndXNlclNlbGVjdE1vZGUnXSAmJiAhY2hhbmdlc1sndXNlclNlbGVjdE1vZGUnXS5maXJzdENoYW5nZTtcbiAgICBjb25zdCBzaGFyZWRVc2Vyc0NoYW5nZWQgPVxuICAgICAgY2hhbmdlc1snc2hhcmVkVXNlcnMnXSAmJlxuICAgICAgIWNoYW5nZXNbJ3NoYXJlZFVzZXJzJ10uZmlyc3RDaGFuZ2UgJiZcbiAgICAgICFpc0VxdWFsKFxuICAgICAgICBjaGFuZ2VzWydzaGFyZWRVc2VycyddLnByZXZpb3VzVmFsdWUsXG4gICAgICAgIGNoYW5nZXNbJ3NoYXJlZFVzZXJzJ10uY3VycmVudFZhbHVlLFxuICAgICAgKTtcblxuICAgIGlmICh1c2VyU291cmNlQ2hhbmdlZCB8fCB1c2VyU2VsZWN0TW9kZUNoYW5nZWQgfHwgc2hhcmVkVXNlcnNDaGFuZ2VkKSB7XG4gICAgICB0aGlzLnNldFVwVXNlclNlbGVjdE1hbmFnZXIoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnRlYXJEb3duVXNlclNlbGVjdE1hbmFnZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgdGVhckRvd25Vc2VyU2VsZWN0TWFuYWdlcigpOiB2b2lkIHtcbiAgICB0aGlzLnVzZXJTZWxlY3RTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNldFVwVXNlclNlbGVjdE1hbmFnZXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy50ZWFyRG93blVzZXJTZWxlY3RNYW5hZ2VyKCk7XG5cbiAgICBpZiAodGhpcy51c2VyU2VsZWN0TW9kZSA9PT0gJ3NlYXJjaC1zZWxlY3QnKSB7XG4gICAgICBjb25zdCB1c2VycyA9IGF3YWl0ICh0aGlzLnVzZXJTb3VyY2UgfHwgKCgpID0+IFtdKSkoKTtcbiAgICAgIHRoaXMudXNlck9wdGlvbnMgPSB1c2Vycy5tYXAodSA9PiAoe1xuICAgICAgICAuLi51LFxuICAgICAgICBuZXc6ICh1IGFzIFJpdlZpZXdzLlNlYXJjaFNlbGVjdFVzZXI8VT4pLm5ldyA/PyBmYWxzZSxcbiAgICAgIH0pKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRVc2VycyA9IHRoaXMuc2hhcmVkVXNlcnMubWFwKHUgPT4gKHtcbiAgICAgICAgLi4udSxcbiAgICAgICAgbmV3OiAodSBhcyBSaXZWaWV3cy5TZWFyY2hTZWxlY3RVc2VyPFU+KS5uZXcgPz8gZmFsc2UsXG4gICAgICB9KSk7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51c2VyU2VsZWN0TWFuYWdlciA9IFJpdlNlbGVjdC5jcmVhdGVJbk1lbW9yeU1hbmFnZXIoXG4gICAgICAgIGFzeW5jICgpID0+IFt7IG9wdGlvbnM6IGF3YWl0ICh0aGlzLnVzZXJTb3VyY2UgfHwgKCgpID0+IFtdKSkoKSB9XSxcbiAgICAgICAge1xuICAgICAgICAgIGFsbG93U2VhcmNoOiB0cnVlLFxuICAgICAgICAgIGFsbG93U2VsZWN0QWxsOiB0cnVlLFxuICAgICAgICAgIGFsbG93TXVsdGlTZWxlY3Q6IHRydWUsXG4gICAgICAgICAgZGlzcGxheUxpbWl0OiA1MDAsXG4gICAgICAgICAgaW5pdGlhbFN0YXRlOiB7XG4gICAgICAgICAgICBzZWxlY3Rpb246IHtcbiAgICAgICAgICAgICAgc2VsZWN0ZWQ6IG5ldyBSaXZTZWxlY3QuT3B0aW9uU2V0KHRoaXMuc2hhcmVkVXNlcnMpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICAgIHRoaXMudXNlclNlbGVjdFN1YnNjcmlwdGlvbiA9IHRoaXMudXNlclNlbGVjdE1hbmFnZXIuc3RhdGVcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKHN0YXRlID0+IFsuLi5zdGF0ZS5zZWxlY3Rpb24uc2VsZWN0ZWRdIGFzIFVbXSksXG4gICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoaXNFcXVhbCksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSh1c2VycyA9PiB7XG4gICAgICAgICAgLy8gVGhlIG1hbmFnZXIgcmVwbGF5cyBpdHMgaW5pdGlhbCAoc2VlZGVkKSBzZWxlY3Rpb24gc3luY2hyb25vdXNseSBvblxuICAgICAgICAgIC8vIHN1YnNjcmliZS4gRW1pdHRpbmcgdGhhdCBiYWNrIHdvdWxkIGVjaG8gdGhlIHNoYXJlZFVzZXJzIGlucHV0IHRvXG4gICAgICAgICAgLy8gdGhlIHBhcmVudCwgd2hpY2ggbXV0YXRlcyBpdHMgdmlldyBhbmQgZmVlZHMgYSBuZXcgYXJyYXkgcmVmZXJlbmNlXG4gICAgICAgICAgLy8gc3RyYWlnaHQgYmFjayBpbnRvIHRoaXMgY29tcG9uZW50IOKAlCBhbiBpbmZpbml0ZSBjaGFuZ2UtZGV0ZWN0aW9uXG4gICAgICAgICAgLy8gbG9vcC4gT25seSBwcm9wYWdhdGUgZ2VudWluZSwgdXNlci1kcml2ZW4gc2VsZWN0aW9uIGNoYW5nZXMuXG4gICAgICAgICAgaWYgKCFpc0VxdWFsKHVzZXJzLCB0aGlzLnNoYXJlZFVzZXJzKSkge1xuICAgICAgICAgICAgdGhpcy5zaGFyZWRVc2Vyc0NoYW5nZS5lbWl0KHVzZXJzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgdGhpcy51c2VyU2VsZWN0TWFuYWdlci5hY3Rpb25zLm5leHQoeyB0eXBlOiAnbG9hZCcgfSk7XG4gICAgfVxuICB9XG5cbiAgb25QZXJtaXNzaW9uQ2xpY2sodmFsdWU6IFJpdlZpZXdzLlZpZXdQZXJtaXNzaW9uKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEaXNhYmxlZCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5wZXJtaXNzaW9uQ2hhbmdlLmVtaXQodmFsdWUpO1xuICB9XG5cbiAgaXNEaXNhYmxlZChwZXJtaXNzaW9uOiBSaXZWaWV3cy5WaWV3UGVybWlzc2lvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRpc2FibGVkUGVybWlzc2lvbnM/LmluY2x1ZGVzKHBlcm1pc3Npb24pID8/IGZhbHNlO1xuICB9XG5cbiAgb25TZWxlY3RlZFVzZXJzQ2hhbmdlKHVzZXJzOiBSaXZWaWV3cy5TZWFyY2hTZWxlY3RVc2VyPFU+W10pOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkVXNlcnMgPSB1c2VycztcbiAgICB0aGlzLnNoYXJlZFVzZXJzQ2hhbmdlLmVtaXQoUml2Vmlld3MudG9TaGFyZWRVc2Vycyh1c2VycykpO1xuICB9XG5cbiAgaGFuZGxlQWRkVXNlcihzZWFyY2hUZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMub25BZGRVc2VyKSByZXR1cm47XG4gICAgY29uc3QgbmV3VXNlciA9IHRoaXMub25BZGRVc2VyKHNlYXJjaFRleHQpO1xuICAgIHRoaXMudXNlck9wdGlvbnMgPSBbLi4udGhpcy51c2VyT3B0aW9ucywgbmV3VXNlcl07XG4gICAgdGhpcy5zZWxlY3RlZFVzZXJzID0gWy4uLnRoaXMuc2VsZWN0ZWRVc2VycywgbmV3VXNlcl07XG4gICAgdGhpcy5zaGFyZWRVc2Vyc0NoYW5nZS5lbWl0KFJpdlZpZXdzLnRvU2hhcmVkVXNlcnModGhpcy5zZWxlY3RlZFVzZXJzKSk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJwZXJtaXNzaW9uLXBpY2tlclwiPlxuICA8ZGl2IGNsYXNzPVwicGVybWlzc2lvbi1sYWJlbFwiPlZpZXcgcGVybWlzc2lvbnM8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwicGVybWlzc2lvbi1vcHRpb25zXCI+XG4gICAgPGJ1dHRvblxuICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBwZXJtaXNzaW9uT3B0aW9uc1wiXG4gICAgICBjbGFzcz1cInBlcm1pc3Npb24tb3B0aW9uXCJcbiAgICAgIFtjbGFzcy5jdXJyZW50XT1cInBlcm1pc3Npb24gPT09IG9wdGlvbi52YWx1ZVwiXG4gICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiaXNEaXNhYmxlZChvcHRpb24udmFsdWUpXCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgW2F0dHIuYXJpYS1jaGVja2VkXT1cInBlcm1pc3Npb24gPT09IG9wdGlvbi52YWx1ZVwiXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIm9wdGlvbi50aXRsZSArICcgcGVybWlzc2lvbidcIlxuICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpc0Rpc2FibGVkKG9wdGlvbi52YWx1ZSlcIlxuICAgICAgKGNsaWNrKT1cIm9uUGVybWlzc2lvbkNsaWNrKG9wdGlvbi52YWx1ZSlcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJvcHRpb24tY29udGVudFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwib3B0aW9uLXRpdGxlXCI+XG4gICAgICAgICAgPHNwYW4+e3sgb3B0aW9uLnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3B0aW9uLWRlc2NyaXB0aW9uXCI+e3sgb3B0aW9uLnN1YnRpdGxlIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHJpdi1pY29uXG4gICAgICAgICAgKm5nSWY9XCJwZXJtaXNzaW9uID09PSBvcHRpb24udmFsdWVcIlxuICAgICAgICAgIGNsYXNzPVwicGVybWlzc2lvbi1pbmRpY2F0b3JcIlxuICAgICAgICAgIFtuYW1lXT1cIidDaGVjaydcIlxuICAgICAgICAgIFtzaXplXT1cIjE2XCJcbiAgICAgICAgPjwvcml2LWljb24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxyaXYtc2VsZWN0XG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgcGVybWlzc2lvbiA9PT0gJ3NoYXJlZCcgJiZcbiAgICAgICAgICBvcHRpb24udmFsdWUgPT09ICdzaGFyZWQnICYmXG4gICAgICAgICAgdXNlclNlbGVjdE1vZGUgPT09ICdzZWxlY3QnICYmXG4gICAgICAgICAgdXNlclNlbGVjdE1hbmFnZXJcbiAgICAgICAgXCJcbiAgICAgICAgW2xhYmVsXT1cIidVc2VycyB3aXRoIGFjY2VzcydcIlxuICAgICAgICBbbWFuYWdlcl09XCJ1c2VyU2VsZWN0TWFuYWdlclwiXG4gICAgICA+PC9yaXYtc2VsZWN0PlxuICAgICAgPHJpdi1zZWFyY2gtc2VsZWN0XG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgcGVybWlzc2lvbiA9PT0gJ3NoYXJlZCcgJiZcbiAgICAgICAgICBvcHRpb24udmFsdWUgPT09ICdzaGFyZWQnICYmXG4gICAgICAgICAgdXNlclNlbGVjdE1vZGUgPT09ICdzZWFyY2gtc2VsZWN0J1xuICAgICAgICBcIlxuICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgW2xhYmVsXT1cIidVc2VycyB3aXRoIGFjY2VzcydcIlxuICAgICAgICBbb3B0aW9uc109XCJ1c2VyT3B0aW9uc1wiXG4gICAgICAgIFtzZWxlY3RlZF09XCJzZWxlY3RlZFVzZXJzXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidTZWFyY2ggdXNlcnMnXCJcbiAgICAgICAgW2FkZE5ld0xhYmVsXT1cIidBZGQnXCJcbiAgICAgICAgW25ld1Rvb2x0aXBdPVwibmV3VG9vbHRpcFwiXG4gICAgICAgIChzZWxlY3RlZENoYW5nZSk9XCJvblNlbGVjdGVkVXNlcnNDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIChhZGROZXcpPVwiaGFuZGxlQWRkVXNlcigkZXZlbnQpXCJcbiAgICAgID48L3Jpdi1zZWFyY2gtc2VsZWN0PlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19