@quillsql/admin 1.6.3 → 1.7.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 (304) hide show
  1. package/dist/cjs/Admin.d.ts +14 -8
  2. package/dist/cjs/Admin.d.ts.map +1 -1
  3. package/dist/cjs/Admin.js +134 -25
  4. package/dist/cjs/AdminProvider.d.ts +26 -5
  5. package/dist/cjs/AdminProvider.d.ts.map +1 -1
  6. package/dist/cjs/AdminProvider.js +174 -85
  7. package/dist/cjs/api/ConnectionClient.d.ts +26 -12
  8. package/dist/cjs/api/ConnectionClient.d.ts.map +1 -1
  9. package/dist/cjs/api/ConnectionClient.js +198 -31
  10. package/dist/cjs/assets/ArrowDownHeadIcon.d.ts.map +1 -1
  11. package/dist/cjs/assets/XIcon.d.ts.map +1 -1
  12. package/dist/cjs/components/CardSection.d.ts.map +1 -1
  13. package/dist/cjs/components/CardSection.js +4 -2
  14. package/dist/cjs/components/ClipboardButton.d.ts.map +1 -1
  15. package/dist/cjs/components/DashboardSelectPopover.d.ts.map +1 -1
  16. package/dist/cjs/components/DashboardSelectPopover.js +46 -7
  17. package/dist/cjs/components/DatabaseSelector.d.ts +3 -1
  18. package/dist/cjs/components/DatabaseSelector.d.ts.map +1 -1
  19. package/dist/cjs/components/DatabaseSelector.js +3 -2
  20. package/dist/cjs/components/DateRangePicker/SingleDatePicker.d.ts.map +1 -1
  21. package/dist/cjs/components/DateRangePicker/SingleDatePicker.js +31 -7
  22. package/dist/cjs/components/DateRangePicker/YearlessDateRangePicker.d.ts.map +1 -1
  23. package/dist/cjs/components/DateRangePicker/YearlessDateRangePicker.js +31 -7
  24. package/dist/cjs/components/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -1
  25. package/dist/cjs/components/DropDownMenuWithLabel.d.ts.map +1 -1
  26. package/dist/cjs/components/DropDownMenuWithLabel.js +8 -1
  27. package/dist/cjs/components/DynamicBanner.d.ts +3 -2
  28. package/dist/cjs/components/DynamicBanner.d.ts.map +1 -1
  29. package/dist/cjs/components/DynamicBanner.js +7 -2
  30. package/dist/cjs/components/EmptyDashboardComponent/index.d.ts.map +1 -1
  31. package/dist/cjs/components/EmptyDashboardComponent/index.js +3 -2
  32. package/dist/cjs/components/EmptyVirtualTablesComponent.d.ts.map +1 -1
  33. package/dist/cjs/components/EmptyVirtualTablesComponent.js +4 -1
  34. package/dist/cjs/components/FormTooltip.d.ts.map +1 -1
  35. package/dist/cjs/components/FormTooltip.js +4 -1
  36. package/dist/cjs/components/InputLabel.d.ts.map +1 -1
  37. package/dist/cjs/components/InputLabel.js +4 -2
  38. package/dist/cjs/components/InternalDashboard/DashboardFilter.d.ts +1 -1
  39. package/dist/cjs/components/InternalDashboard/DashboardFilter.d.ts.map +1 -1
  40. package/dist/cjs/components/InternalDashboard/DashboardLoadingComponent.d.ts.map +1 -1
  41. package/dist/cjs/components/InternalDashboard/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -1
  42. package/dist/cjs/components/InternalDashboard/DateRangePicker/QuillDateRangePicker.js +33 -14
  43. package/dist/cjs/components/InternalDashboard/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -1
  44. package/dist/cjs/components/InternalDashboard/InternalDashboard.d.ts.map +1 -1
  45. package/dist/cjs/components/InternalDashboard/InternalDashboard.js +128 -35
  46. package/dist/cjs/components/OrgSelect.d.ts +0 -6
  47. package/dist/cjs/components/OrgSelect.d.ts.map +1 -1
  48. package/dist/cjs/components/OrgSelect.js +79 -47
  49. package/dist/cjs/components/QuillMultiSelectWithCombo.d.ts +8 -2
  50. package/dist/cjs/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
  51. package/dist/cjs/components/QuillMultiSelectWithCombo.js +351 -167
  52. package/dist/cjs/components/QuillPopover.d.ts.map +1 -1
  53. package/dist/cjs/components/QuillPopover.js +4 -5
  54. package/dist/cjs/components/QuillSelect.js +9 -9
  55. package/dist/cjs/components/QuillSelectWithCombo.d.ts +4 -3
  56. package/dist/cjs/components/QuillSelectWithCombo.d.ts.map +1 -1
  57. package/dist/cjs/components/QuillSelectWithCombo.js +47 -21
  58. package/dist/cjs/components/QuillToolTipPortal.d.ts.map +1 -1
  59. package/dist/cjs/components/SqlTextEditor.d.ts.map +1 -1
  60. package/dist/cjs/components/SqlTextEditor.js +15 -2
  61. package/dist/cjs/components/Tenants/EditTenant.d.ts.map +1 -1
  62. package/dist/cjs/components/Tenants/EditTenant.js +51 -8
  63. package/dist/cjs/components/UiComponents.d.ts +16 -43
  64. package/dist/cjs/components/UiComponents.d.ts.map +1 -1
  65. package/dist/cjs/components/UiComponents.js +162 -33
  66. package/dist/cjs/forms/client_onboard/ConnectDatabase.d.ts.map +1 -1
  67. package/dist/cjs/forms/client_onboard/ConnectDatabase.js +163 -51
  68. package/dist/cjs/forms/client_onboard/ConnectSchema.d.ts.map +1 -1
  69. package/dist/cjs/forms/client_onboard/ConnectSchema.js +36 -2
  70. package/dist/cjs/forms/client_onboard/CreateVirtualTables.d.ts +2 -1
  71. package/dist/cjs/forms/client_onboard/CreateVirtualTables.d.ts.map +1 -1
  72. package/dist/cjs/forms/client_onboard/CreateVirtualTables.js +60 -22
  73. package/dist/cjs/forms/client_onboard/__tests__/ConnectSchema.test.js +2 -1
  74. package/dist/cjs/forms/client_onboard/__tests__/CreateVirtualTables.test.js +2 -1
  75. package/dist/cjs/forms/virtual_tables/CreateEditVirtualTable.d.ts.map +1 -1
  76. package/dist/cjs/forms/virtual_tables/CreateEditVirtualTable.js +101 -15
  77. package/dist/cjs/hooks/useDatabaseSchema.d.ts.map +1 -1
  78. package/dist/cjs/hooks/useDatabaseSchema.js +18 -2
  79. package/dist/cjs/hooks/useLongLoading.d.ts +13 -0
  80. package/dist/cjs/hooks/useLongLoading.d.ts.map +1 -0
  81. package/dist/cjs/hooks/useLongLoading.js +67 -0
  82. package/dist/cjs/hooks/useOnClickOutside.d.ts.map +1 -1
  83. package/dist/cjs/hooks/useThrottle.d.ts.map +1 -1
  84. package/dist/cjs/icons/ArrowDownHeadIcon.d.ts.map +1 -1
  85. package/dist/cjs/icons/CheckCircleIcon.d.ts.map +1 -1
  86. package/dist/cjs/icons/ExclamationFilledIcon.d.ts.map +1 -1
  87. package/dist/cjs/icons/ExteriorLinkIcon.d.ts.map +1 -1
  88. package/dist/cjs/icons/QuestionMarkCircleIcon.d.ts.map +1 -1
  89. package/dist/cjs/modals/CodePreview.d.ts.map +1 -1
  90. package/dist/cjs/modals/CodePreview.js +7 -2
  91. package/dist/cjs/modals/CreateEnvironmentModal.d.ts +5 -0
  92. package/dist/cjs/modals/CreateEnvironmentModal.d.ts.map +1 -0
  93. package/dist/cjs/modals/CreateEnvironmentModal.js +21 -0
  94. package/dist/cjs/modals/EditEnvironmentModal.d.ts.map +1 -1
  95. package/dist/cjs/modals/EditEnvironmentModal.js +74 -17
  96. package/dist/cjs/modals/EditFiltersModal.d.ts.map +1 -1
  97. package/dist/cjs/modals/EditFiltersModal.js +19 -15
  98. package/dist/cjs/modals/NewDashboardModal.d.ts.map +1 -1
  99. package/dist/cjs/modals/NewDashboardModal.js +54 -28
  100. package/dist/cjs/modals/PromoteReportModal.d.ts.map +1 -1
  101. package/dist/cjs/modals/PromoteReportModal.js +15 -4
  102. package/dist/cjs/modals/PromoteViewModal.d.ts.map +1 -1
  103. package/dist/cjs/modals/PromoteViewModal.js +13 -2
  104. package/dist/cjs/primitives/ButtonPrimitive.d.ts.map +1 -1
  105. package/dist/cjs/primitives/ButtonPrimitive.js +10 -6
  106. package/dist/cjs/primitives/CheckboxPrimitive.d.ts.map +1 -1
  107. package/dist/cjs/primitives/CheckboxPrimitive.js +2 -0
  108. package/dist/cjs/primitives/HeaderPrimitive.d.ts.map +1 -1
  109. package/dist/cjs/primitives/HeaderPrimitive.js +11 -7
  110. package/dist/cjs/primitives/PopoverPrimitive.d.ts.map +1 -1
  111. package/dist/cjs/primitives/PopoverPrimitive.js +19 -6
  112. package/dist/cjs/primitives/SecondaryButtonPrimitive.d.ts.map +1 -1
  113. package/dist/cjs/primitives/SecondaryButtonPrimitive.js +5 -3
  114. package/dist/cjs/primitives/TogglePrimitive.d.ts.map +1 -1
  115. package/dist/cjs/public_components/ChartQueryBuilder.d.ts.map +1 -1
  116. package/dist/cjs/public_components/ChartQueryBuilder.js +17 -7
  117. package/dist/cjs/public_components/CreateEnvironment.d.ts.map +1 -1
  118. package/dist/cjs/public_components/CreateEnvironment.js +68 -30
  119. package/dist/cjs/public_components/DashboardManager.d.ts.map +1 -1
  120. package/dist/cjs/public_components/DashboardManager.js +71 -4
  121. package/dist/cjs/public_components/EnvSelectPopover.d.ts +2 -1
  122. package/dist/cjs/public_components/EnvSelectPopover.d.ts.map +1 -1
  123. package/dist/cjs/public_components/EnvSelectPopover.js +48 -8
  124. package/dist/cjs/public_components/VirtualTableManager.d.ts.map +1 -1
  125. package/dist/cjs/public_components/VirtualTableManager.js +124 -10
  126. package/dist/cjs/public_components/__tests__/CreateEnvironment.test.js +41 -2
  127. package/dist/cjs/utils/astProcessing.d.ts.map +1 -1
  128. package/dist/cjs/utils/columnProcessing.d.ts +1 -0
  129. package/dist/cjs/utils/columnProcessing.d.ts.map +1 -1
  130. package/dist/cjs/utils/columnProcessing.js +7 -1
  131. package/dist/cjs/utils/constants.d.ts +1 -0
  132. package/dist/cjs/utils/constants.d.ts.map +1 -1
  133. package/dist/cjs/utils/constants.js +5 -1
  134. package/dist/cjs/utils/dataEditor.d.ts.map +1 -1
  135. package/dist/cjs/utils/dataFetcher.d.ts.map +1 -1
  136. package/dist/cjs/utils/dataFetcher.js +0 -1
  137. package/dist/cjs/utils/databases.d.ts +6 -1
  138. package/dist/cjs/utils/databases.d.ts.map +1 -1
  139. package/dist/cjs/utils/databases.js +23 -5
  140. package/dist/cjs/utils/delay.d.ts.map +1 -1
  141. package/dist/cjs/utils/filter.d.ts +17 -21
  142. package/dist/cjs/utils/filter.d.ts.map +1 -1
  143. package/dist/cjs/utils/filter.js +6 -6
  144. package/dist/cjs/utils/report.d.ts +5 -5
  145. package/dist/cjs/utils/report.d.ts.map +1 -1
  146. package/dist/cjs/utils/schema.d.ts +6 -3
  147. package/dist/cjs/utils/schema.d.ts.map +1 -1
  148. package/dist/cjs/utils/schema.js +42 -3
  149. package/dist/cjs/utils/table.d.ts.map +1 -1
  150. package/dist/cjs/utils/tenants.d.ts.map +1 -1
  151. package/dist/cjs/utils/ui.d.ts.map +1 -1
  152. package/dist/esm/Admin.d.ts +14 -8
  153. package/dist/esm/Admin.d.ts.map +1 -1
  154. package/dist/esm/Admin.js +135 -26
  155. package/dist/esm/AdminProvider.d.ts +26 -5
  156. package/dist/esm/AdminProvider.d.ts.map +1 -1
  157. package/dist/esm/AdminProvider.js +177 -88
  158. package/dist/esm/api/ConnectionClient.d.ts +26 -12
  159. package/dist/esm/api/ConnectionClient.d.ts.map +1 -1
  160. package/dist/esm/api/ConnectionClient.js +196 -31
  161. package/dist/esm/assets/ArrowDownHeadIcon.d.ts.map +1 -1
  162. package/dist/esm/assets/XIcon.d.ts.map +1 -1
  163. package/dist/esm/components/CardSection.d.ts.map +1 -1
  164. package/dist/esm/components/CardSection.js +4 -2
  165. package/dist/esm/components/ClipboardButton.d.ts.map +1 -1
  166. package/dist/esm/components/DashboardSelectPopover.d.ts.map +1 -1
  167. package/dist/esm/components/DashboardSelectPopover.js +47 -8
  168. package/dist/esm/components/DatabaseSelector.d.ts +3 -1
  169. package/dist/esm/components/DatabaseSelector.d.ts.map +1 -1
  170. package/dist/esm/components/DatabaseSelector.js +3 -2
  171. package/dist/esm/components/DateRangePicker/SingleDatePicker.d.ts.map +1 -1
  172. package/dist/esm/components/DateRangePicker/SingleDatePicker.js +31 -7
  173. package/dist/esm/components/DateRangePicker/YearlessDateRangePicker.d.ts.map +1 -1
  174. package/dist/esm/components/DateRangePicker/YearlessDateRangePicker.js +31 -7
  175. package/dist/esm/components/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -1
  176. package/dist/esm/components/DropDownMenuWithLabel.d.ts.map +1 -1
  177. package/dist/esm/components/DropDownMenuWithLabel.js +9 -2
  178. package/dist/esm/components/DynamicBanner.d.ts +3 -2
  179. package/dist/esm/components/DynamicBanner.d.ts.map +1 -1
  180. package/dist/esm/components/DynamicBanner.js +7 -2
  181. package/dist/esm/components/EmptyDashboardComponent/index.d.ts.map +1 -1
  182. package/dist/esm/components/EmptyDashboardComponent/index.js +3 -2
  183. package/dist/esm/components/EmptyVirtualTablesComponent.d.ts.map +1 -1
  184. package/dist/esm/components/EmptyVirtualTablesComponent.js +4 -1
  185. package/dist/esm/components/FormTooltip.d.ts.map +1 -1
  186. package/dist/esm/components/FormTooltip.js +4 -1
  187. package/dist/esm/components/InputLabel.d.ts.map +1 -1
  188. package/dist/esm/components/InputLabel.js +4 -2
  189. package/dist/esm/components/InternalDashboard/DashboardFilter.d.ts +1 -1
  190. package/dist/esm/components/InternalDashboard/DashboardFilter.d.ts.map +1 -1
  191. package/dist/esm/components/InternalDashboard/DashboardFilter.js +1 -1
  192. package/dist/esm/components/InternalDashboard/DashboardLoadingComponent.d.ts.map +1 -1
  193. package/dist/esm/components/InternalDashboard/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -1
  194. package/dist/esm/components/InternalDashboard/DateRangePicker/QuillDateRangePicker.js +33 -11
  195. package/dist/esm/components/InternalDashboard/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -1
  196. package/dist/esm/components/InternalDashboard/InternalDashboard.d.ts.map +1 -1
  197. package/dist/esm/components/InternalDashboard/InternalDashboard.js +129 -36
  198. package/dist/esm/components/OrgSelect.d.ts +0 -6
  199. package/dist/esm/components/OrgSelect.d.ts.map +1 -1
  200. package/dist/esm/components/OrgSelect.js +79 -45
  201. package/dist/esm/components/QuillMultiSelectWithCombo.d.ts +8 -2
  202. package/dist/esm/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
  203. package/dist/esm/components/QuillMultiSelectWithCombo.js +351 -167
  204. package/dist/esm/components/QuillPopover.d.ts.map +1 -1
  205. package/dist/esm/components/QuillPopover.js +4 -5
  206. package/dist/esm/components/QuillSelect.js +9 -9
  207. package/dist/esm/components/QuillSelectWithCombo.d.ts +4 -3
  208. package/dist/esm/components/QuillSelectWithCombo.d.ts.map +1 -1
  209. package/dist/esm/components/QuillSelectWithCombo.js +47 -21
  210. package/dist/esm/components/QuillToolTipPortal.d.ts.map +1 -1
  211. package/dist/esm/components/SqlTextEditor.d.ts.map +1 -1
  212. package/dist/esm/components/SqlTextEditor.js +15 -2
  213. package/dist/esm/components/Tenants/EditTenant.d.ts.map +1 -1
  214. package/dist/esm/components/Tenants/EditTenant.js +51 -8
  215. package/dist/esm/components/UiComponents.d.ts +16 -43
  216. package/dist/esm/components/UiComponents.d.ts.map +1 -1
  217. package/dist/esm/components/UiComponents.js +127 -29
  218. package/dist/esm/forms/client_onboard/ConnectDatabase.d.ts.map +1 -1
  219. package/dist/esm/forms/client_onboard/ConnectDatabase.js +163 -51
  220. package/dist/esm/forms/client_onboard/ConnectSchema.d.ts.map +1 -1
  221. package/dist/esm/forms/client_onboard/ConnectSchema.js +36 -2
  222. package/dist/esm/forms/client_onboard/CreateVirtualTables.d.ts +2 -1
  223. package/dist/esm/forms/client_onboard/CreateVirtualTables.d.ts.map +1 -1
  224. package/dist/esm/forms/client_onboard/CreateVirtualTables.js +61 -23
  225. package/dist/esm/forms/client_onboard/__tests__/ConnectSchema.test.js +2 -1
  226. package/dist/esm/forms/client_onboard/__tests__/CreateVirtualTables.test.js +2 -1
  227. package/dist/esm/forms/virtual_tables/CreateEditVirtualTable.d.ts.map +1 -1
  228. package/dist/esm/forms/virtual_tables/CreateEditVirtualTable.js +103 -17
  229. package/dist/esm/hooks/useDatabaseSchema.d.ts.map +1 -1
  230. package/dist/esm/hooks/useDatabaseSchema.js +19 -3
  231. package/dist/esm/hooks/useLongLoading.d.ts +13 -0
  232. package/dist/esm/hooks/useLongLoading.d.ts.map +1 -0
  233. package/dist/esm/hooks/useLongLoading.js +64 -0
  234. package/dist/esm/hooks/useOnClickOutside.d.ts.map +1 -1
  235. package/dist/esm/hooks/useThrottle.d.ts.map +1 -1
  236. package/dist/esm/icons/ArrowDownHeadIcon.d.ts.map +1 -1
  237. package/dist/esm/icons/CheckCircleIcon.d.ts.map +1 -1
  238. package/dist/esm/icons/ExclamationFilledIcon.d.ts.map +1 -1
  239. package/dist/esm/icons/ExteriorLinkIcon.d.ts.map +1 -1
  240. package/dist/esm/icons/QuestionMarkCircleIcon.d.ts.map +1 -1
  241. package/dist/esm/modals/CodePreview.d.ts.map +1 -1
  242. package/dist/esm/modals/CodePreview.js +7 -2
  243. package/dist/esm/modals/CreateEnvironmentModal.d.ts +5 -0
  244. package/dist/esm/modals/CreateEnvironmentModal.d.ts.map +1 -0
  245. package/dist/esm/modals/CreateEnvironmentModal.js +15 -0
  246. package/dist/esm/modals/EditEnvironmentModal.d.ts.map +1 -1
  247. package/dist/esm/modals/EditEnvironmentModal.js +74 -17
  248. package/dist/esm/modals/EditFiltersModal.d.ts.map +1 -1
  249. package/dist/esm/modals/EditFiltersModal.js +21 -17
  250. package/dist/esm/modals/NewDashboardModal.d.ts.map +1 -1
  251. package/dist/esm/modals/NewDashboardModal.js +55 -29
  252. package/dist/esm/modals/PromoteReportModal.d.ts.map +1 -1
  253. package/dist/esm/modals/PromoteReportModal.js +15 -4
  254. package/dist/esm/modals/PromoteViewModal.d.ts.map +1 -1
  255. package/dist/esm/modals/PromoteViewModal.js +13 -2
  256. package/dist/esm/primitives/ButtonPrimitive.d.ts.map +1 -1
  257. package/dist/esm/primitives/ButtonPrimitive.js +10 -6
  258. package/dist/esm/primitives/CheckboxPrimitive.d.ts.map +1 -1
  259. package/dist/esm/primitives/CheckboxPrimitive.js +2 -0
  260. package/dist/esm/primitives/HeaderPrimitive.d.ts.map +1 -1
  261. package/dist/esm/primitives/HeaderPrimitive.js +11 -7
  262. package/dist/esm/primitives/PopoverPrimitive.d.ts.map +1 -1
  263. package/dist/esm/primitives/PopoverPrimitive.js +19 -6
  264. package/dist/esm/primitives/SecondaryButtonPrimitive.d.ts.map +1 -1
  265. package/dist/esm/primitives/SecondaryButtonPrimitive.js +5 -3
  266. package/dist/esm/primitives/TogglePrimitive.d.ts.map +1 -1
  267. package/dist/esm/public_components/ChartQueryBuilder.d.ts.map +1 -1
  268. package/dist/esm/public_components/ChartQueryBuilder.js +18 -8
  269. package/dist/esm/public_components/CreateEnvironment.d.ts.map +1 -1
  270. package/dist/esm/public_components/CreateEnvironment.js +68 -30
  271. package/dist/esm/public_components/DashboardManager.d.ts.map +1 -1
  272. package/dist/esm/public_components/DashboardManager.js +72 -5
  273. package/dist/esm/public_components/EnvSelectPopover.d.ts +2 -1
  274. package/dist/esm/public_components/EnvSelectPopover.d.ts.map +1 -1
  275. package/dist/esm/public_components/EnvSelectPopover.js +49 -9
  276. package/dist/esm/public_components/VirtualTableManager.d.ts.map +1 -1
  277. package/dist/esm/public_components/VirtualTableManager.js +125 -11
  278. package/dist/esm/public_components/__tests__/CreateEnvironment.test.js +41 -2
  279. package/dist/esm/utils/astProcessing.d.ts.map +1 -1
  280. package/dist/esm/utils/columnProcessing.d.ts +1 -0
  281. package/dist/esm/utils/columnProcessing.d.ts.map +1 -1
  282. package/dist/esm/utils/columnProcessing.js +7 -2
  283. package/dist/esm/utils/constants.d.ts +1 -0
  284. package/dist/esm/utils/constants.d.ts.map +1 -1
  285. package/dist/esm/utils/constants.js +4 -0
  286. package/dist/esm/utils/dataEditor.d.ts.map +1 -1
  287. package/dist/esm/utils/dataFetcher.d.ts.map +1 -1
  288. package/dist/esm/utils/dataFetcher.js +0 -1
  289. package/dist/esm/utils/databases.d.ts +6 -1
  290. package/dist/esm/utils/databases.d.ts.map +1 -1
  291. package/dist/esm/utils/databases.js +23 -5
  292. package/dist/esm/utils/delay.d.ts.map +1 -1
  293. package/dist/esm/utils/filter.d.ts +17 -21
  294. package/dist/esm/utils/filter.d.ts.map +1 -1
  295. package/dist/esm/utils/filter.js +5 -5
  296. package/dist/esm/utils/report.d.ts +5 -5
  297. package/dist/esm/utils/report.d.ts.map +1 -1
  298. package/dist/esm/utils/schema.d.ts +6 -3
  299. package/dist/esm/utils/schema.d.ts.map +1 -1
  300. package/dist/esm/utils/schema.js +42 -3
  301. package/dist/esm/utils/table.d.ts.map +1 -1
  302. package/dist/esm/utils/tenants.d.ts.map +1 -1
  303. package/dist/esm/utils/ui.d.ts.map +1 -1
  304. package/package.json +1 -1
@@ -62,7 +62,7 @@ onChangeLoading, filters,
62
62
  // onClickChartElement,
63
63
  // dateBucket,
64
64
  containerStyle, parentLoading, onManageDashboard, }) => {
65
- const { state, clientLoading: isClientLoading } = (0, AdminProvider_1.useAdmin)();
65
+ const { state, clientLoading: isClientLoading, eventTracking } = (0, AdminProvider_1.useAdmin)();
66
66
  const tenants = state.currentTenantIdentity;
67
67
  // const client = state.client;
68
68
  // const [userFilters, setUserFilters] = useState<{
@@ -76,7 +76,7 @@ containerStyle, parentLoading, onManageDashboard, }) => {
76
76
  // useEffect(() => {
77
77
  // onUserFiltersUpdated?.(Object.values(userFilters));
78
78
  // }, [userFilters]);
79
- const { isLoading, data, isDashboardFilterLoading, dashboardFilters: populatedDashboardFilters, reload, setSectionOrder, } = (0, react_2.useDashboard)(name, filters?.map((f) => (0, filter_1.convertCustomFilter)(f)) ?? []);
79
+ const { isLoading, data, isDashboardFilterLoading, dashboardFilters: populatedDashboardFilters, reload, setSectionOrder, } = (0, react_2.useDashboardInternal)(name, filters?.map((f) => (0, filter_1.convertCustomFilter)(f)) ?? []);
80
80
  const { allReportsById } = (0, react_2.useAllReports)();
81
81
  const [previewSectionOrder, setPreviewSectionOrder] = (0, react_1.useState)({});
82
82
  const [isEditingNewSection, setIsEditingNewSection] = (0, react_1.useState)(false);
@@ -268,7 +268,11 @@ containerStyle, parentLoading, onManageDashboard, }) => {
268
268
  // A filter value can either be a string, an array of strings for a multiselect, or a date range (that could have a comparison range)
269
269
  const [filterValues, setFilterValues] = (0, react_1.useState)({});
270
270
  const prevNameRef = (0, react_1.useRef)(name);
271
- const prevTenantsRef = (0, react_1.useRef)(tenants);
271
+ // const prevTenantsRef = useRef<
272
+ // | { tenantIds: (string | number)[]; tenantField: string }[]
273
+ // | (string | number)[]
274
+ // | undefined
275
+ // >(tenants);
272
276
  // const prevFlagsRef = useRef<string[] | undefined>(flags);
273
277
  // const prevClientRef = useRef<string>(client?.publicKey ?? '');
274
278
  // const addFilterPopoverButtonRef = useRef<HTMLDivElement>(null);
@@ -279,6 +283,7 @@ containerStyle, parentLoading, onManageDashboard, }) => {
279
283
  }
280
284
  // const pendingReloadRef = useRef(false);
281
285
  const isInitialLoadOfDashboardRef = (0, react_1.useRef)(false);
286
+ const [initialLoad, setInitialLoad] = (0, react_1.useState)(true);
282
287
  // const referencedTables = useMemo(() => {
283
288
  // const sections = data?.sections || {};
284
289
  // // find intersection of all referenced tables
@@ -292,8 +297,12 @@ containerStyle, parentLoading, onManageDashboard, }) => {
292
297
  (0, react_1.useEffect)(() => {
293
298
  if (prevNameRef.current === name &&
294
299
  Object.values(data?.sections ?? {}).flat().length) {
300
+ setInitialLoad(false);
295
301
  return;
296
302
  }
303
+ else {
304
+ setInitialLoad(true);
305
+ }
297
306
  prevNameRef.current = name;
298
307
  if (isClientLoading || parentLoading || tenants === undefined) {
299
308
  // Reload the dashboard when the client is loaded
@@ -303,36 +312,34 @@ containerStyle, parentLoading, onManageDashboard, }) => {
303
312
  if (isInitialLoadOfDashboardRef.current)
304
313
  return;
305
314
  isInitialLoadOfDashboardRef.current = true;
306
- reload(name, true, undefined, populatedDashboardFilters?.length
307
- ? { filters: populatedDashboardFilters, refetchReports: true }
308
- : undefined).then(() => {
315
+ reload(name, true).then(() => {
309
316
  isInitialLoadOfDashboardRef.current = false;
310
- prevTenantsRef.current = tenants;
311
- // prevFlagsRef.current = flags;
312
- });
313
- }, [name, isClientLoading, parentLoading, tenants]);
314
- const tenantMounted = (0, react_1.useRef)(false);
315
- (0, react_1.useEffect)(() => {
316
- if (!tenantMounted.current) {
317
- tenantMounted.current = true;
318
- return;
319
- }
320
- const tenantsChanged = !(0, fast_deep_equal_1.default)(prevTenantsRef.current, tenants);
321
- // || equal(prevFlagsRef.current, flags);
322
- if (isClientLoading || tenants === undefined || !tenantsChanged) {
323
- // Reload the dashboard when the client is loaded
324
- // pendingReloadRef.current = true;
325
- return;
326
- }
327
- if (isInitialLoadOfDashboardRef.current)
328
- return;
329
- isInitialLoadOfDashboardRef.current = true;
330
- reload(name, tenantsChanged).then(() => {
331
- prevTenantsRef.current = tenants;
317
+ setInitialLoad(false);
318
+ // prevTenantsRef.current = tenants;
332
319
  // prevFlagsRef.current = flags;
333
- isInitialLoadOfDashboardRef.current = false;
334
320
  });
335
- }, [tenants]);
321
+ }, [name, isClientLoading, parentLoading]);
322
+ // const tenantMounted = useRef(false);
323
+ // useEffect(() => {
324
+ // if (!tenantMounted.current) {
325
+ // tenantMounted.current = true;
326
+ // return;
327
+ // }
328
+ // const tenantsChanged = !equal(prevTenantsRef.current, tenants);
329
+ // // || equal(prevFlagsRef.current, flags);
330
+ // if (isClientLoading || tenants === undefined || !tenantsChanged) {
331
+ // // Reload the dashboard when the client is loaded
332
+ // // pendingReloadRef.current = true;
333
+ // return;
334
+ // }
335
+ // if (isInitialLoadOfDashboardRef.current) return;
336
+ // isInitialLoadOfDashboardRef.current = true;
337
+ // reload(name, tenantsChanged).then(() => {
338
+ // prevTenantsRef.current = tenants;
339
+ // // prevFlagsRef.current = flags;
340
+ // isInitialLoadOfDashboardRef.current = false;
341
+ // });
342
+ // }, [tenants]);
336
343
  // TODO: this block does not appear necessary, uncomment if otherwise
337
344
  // useEffect(() => {
338
345
  // if (prevClientRef.current === client?.publicKey) {
@@ -444,6 +451,17 @@ containerStyle, parentLoading, onManageDashboard, }) => {
444
451
  const updateFilter = (filter, value, comparison) => {
445
452
  if (!populatedDashboardFilters)
446
453
  return;
454
+ eventTracking?.addBreadcrumb?.({
455
+ message: 'Updated filter in InternalDashboard',
456
+ data: {
457
+ filter: filter.label,
458
+ value: JSON.stringify(value),
459
+ dashboardName: name,
460
+ },
461
+ category: 'log',
462
+ level: 'info',
463
+ timestamp: Date.now(),
464
+ });
447
465
  let filterValue = {};
448
466
  if (filter.filterType === 'string') {
449
467
  if (filter.stringFilterType === 'multiselect') {
@@ -458,7 +476,7 @@ containerStyle, parentLoading, onManageDashboard, }) => {
458
476
  filterValue = { selectedValue: value };
459
477
  }
460
478
  }
461
- else if (filter.filterType === filter_1.DashboardFilterType.Date) {
479
+ else if (filter.filterType === filter_1.InternalDashboardFilterType.Date) {
462
480
  if (comparison ||
463
481
  (filter.comparison &&
464
482
  (filter.comparisonRange?.value ?? 'NO_COMPARISON') !==
@@ -675,6 +693,18 @@ containerStyle, parentLoading, onManageDashboard, }) => {
675
693
  const newIndex = sortedSectionNames.indexOf(targetSection);
676
694
  if (oldIndex !== -1 && newIndex !== -1 && oldIndex !== newIndex) {
677
695
  const newSectionOrder = (0, sortable_1.arrayMove)(sortedSectionNames, oldIndex, newIndex);
696
+ eventTracking?.addBreadcrumb?.({
697
+ message: `Reordered Dashboard Section`,
698
+ category: 'interaction',
699
+ level: 'info',
700
+ timestamp: Date.now(),
701
+ data: {
702
+ movedSection: activeId,
703
+ oldIndex,
704
+ newIndex,
705
+ targetSection,
706
+ },
707
+ });
678
708
  handleSectionReorder(newSectionOrder);
679
709
  }
680
710
  }
@@ -746,6 +776,18 @@ containerStyle, parentLoading, onManageDashboard, }) => {
746
776
  }
747
777
  }
748
778
  newItems[sourceSection] = result;
779
+ eventTracking?.addBreadcrumb?.({
780
+ message: `Reordered Dashboard Report In Default Section`,
781
+ category: 'interaction',
782
+ level: 'info',
783
+ timestamp: Date.now(),
784
+ data: {
785
+ movedReport: reportId,
786
+ oldIndex: typeActiveIndex,
787
+ newIndex: typeOverIndex,
788
+ targetSection,
789
+ },
790
+ });
749
791
  handleReorder(newItems);
750
792
  }
751
793
  }
@@ -758,6 +800,18 @@ containerStyle, parentLoading, onManageDashboard, }) => {
758
800
  const overIndex = newItems[sourceSection].indexOf(overItem);
759
801
  if (activeIndex !== -1 && overIndex !== -1) {
760
802
  newItems[sourceSection] = (0, sortable_1.arrayMove)(newItems[sourceSection], activeIndex, overIndex);
803
+ eventTracking?.addBreadcrumb?.({
804
+ message: `Reordered Dashboard Report In Same Section`,
805
+ category: 'interaction',
806
+ level: 'info',
807
+ timestamp: Date.now(),
808
+ data: {
809
+ movedReport: reportId,
810
+ oldIndex: activeIndex,
811
+ newIndex: overIndex,
812
+ targetSection,
813
+ },
814
+ });
761
815
  handleReorder(newItems);
762
816
  }
763
817
  }
@@ -797,6 +851,18 @@ containerStyle, parentLoading, onManageDashboard, }) => {
797
851
  newItems[targetSection]?.push(report);
798
852
  }
799
853
  }
854
+ eventTracking?.addBreadcrumb?.({
855
+ message: `Reordered Dashboard Report In Different Section`,
856
+ category: 'interaction',
857
+ level: 'info',
858
+ timestamp: Date.now(),
859
+ data: {
860
+ movedReport: reportId,
861
+ newIndex: newItems[targetSection]?.indexOf(report),
862
+ targetSection,
863
+ sourceSection,
864
+ },
865
+ });
800
866
  handleReorder(newItems);
801
867
  }
802
868
  }, [data?.sections, sortedSectionNames, handleReorder, handleSectionReorder]);
@@ -977,13 +1043,21 @@ containerStyle, parentLoading, onManageDashboard, }) => {
977
1043
  }, [data?.sectionOrder, data?.sections, setSectionOrder]);
978
1044
  const existingSectionNames = (0, react_1.useMemo)(() => Object.keys(data?.sections || {}), [data?.sections]);
979
1045
  if (!isLoading &&
980
- (Object.keys(data?.sections ?? {}).length === 0 ||
981
- Object.values(data?.sections ?? {}).flat().length === 0)) {
1046
+ data?.sections &&
1047
+ (Object.keys(data.sections).length === 0 ||
1048
+ Object.values(data.sections).flat().length === 0)) {
982
1049
  return (0, jsx_runtime_1.jsx)(EmptyDashboardComponent_1.default, {});
983
1050
  }
984
- if (hidden || isLoading || isClientLoading || parentLoading) {
1051
+ if (hidden ||
1052
+ isLoading ||
1053
+ isClientLoading ||
1054
+ parentLoading ||
1055
+ initialLoad ||
1056
+ !data?.sections) {
1057
+ // No sections means yet to fetch
985
1058
  return (0, jsx_runtime_1.jsx)(DashboardLoadingComponent_1.DashboardLoadingComponent, { containerStyle: containerStyle });
986
1059
  }
1060
+ // TODO: Never reached
987
1061
  if (!data?.sections) {
988
1062
  return ((0, jsx_runtime_1.jsx)(UiComponents_1.QuillErrorMessageComponent, { containerStyle: { height: 100 }, errorMessage: "Error loading dashboard" }));
989
1063
  }
@@ -1189,6 +1263,7 @@ containerStyle, parentLoading, onManageDashboard, }) => {
1189
1263
 
1190
1264
  .section-grid-container.empty::after {
1191
1265
  content: 'Drop reports here';
1266
+ font-family: ${state.theme?.fontFamily};
1192
1267
  color: #9CA3AF;
1193
1268
  font-size: 16px;
1194
1269
  opacity: 0.8;
@@ -1336,6 +1411,12 @@ containerStyle, parentLoading, onManageDashboard, }) => {
1336
1411
  marginBottom: 6,
1337
1412
  marginTop: -12,
1338
1413
  }, children: [(0, jsx_runtime_1.jsx)(primitives_1.SecondaryButtonPrimitive, { onClick: onManageDashboard, label: "Manage Dashboard" }), (0, jsx_runtime_1.jsx)(primitives_1.SecondaryButtonPrimitive, { onClick: () => {
1414
+ eventTracking?.addBreadcrumb?.({
1415
+ message: 'Clicked add section button in InternalDashboard',
1416
+ category: 'interaction',
1417
+ level: 'info',
1418
+ timestamp: Date.now(),
1419
+ });
1339
1420
  // Same as if the user clicked the Add section button at the bottom
1340
1421
  setIsEditingNewSection(true);
1341
1422
  // Scroll to the bottom of the page
@@ -1443,7 +1524,7 @@ containerStyle, parentLoading, onManageDashboard, }) => {
1443
1524
  alignItems: 'top',
1444
1525
  borderRadius: '10px',
1445
1526
  border: '1px solid #E7E7E7',
1446
- background: 'white',
1527
+ background: state.theme.backgroundColor,
1447
1528
  height: activeItem.chartType === 'metric'
1448
1529
  ? '150px'
1449
1530
  : activeItem.chartType === 'table'
@@ -1464,6 +1545,8 @@ containerStyle, parentLoading, onManageDashboard, }) => {
1464
1545
  marginBottom: 'auto',
1465
1546
  }, children: (0, jsx_runtime_1.jsx)("h1", { style: {
1466
1547
  fontSize: 18,
1548
+ fontFamily: state.theme?.fontFamily,
1549
+ color: state.theme?.primaryTextColor,
1467
1550
  fontWeight: '500',
1468
1551
  margin: 0,
1469
1552
  textOverflow: 'ellipsis',
@@ -1484,6 +1567,7 @@ const DeleteButton = ({ onClick }) => {
1484
1567
  };
1485
1568
  const SortableSection = ({ id, sectionName, sectionIndex, metrics, charts, tables, data, previewSectionOrder, onClickReport, onSectionNameUpdate, onSectionDelete, activeId, overId, draggedIndex, isHighlighted, isDraggingAnySection, }) => {
1486
1569
  const { attributes, listeners, setNodeRef: setSortableNodeRef, isDragging, } = (0, sortable_1.useSortable)({ id, animateLayoutChanges: () => false });
1570
+ const { state: { theme }, } = (0, AdminProvider_1.useAdmin)();
1487
1571
  const [isEditing, setIsEditing] = (0, react_1.useState)(false);
1488
1572
  const [editedName, setEditedName] = (0, react_1.useState)(sectionName);
1489
1573
  const [inputWidth, setInputWidth] = (0, react_1.useState)('auto');
@@ -1655,6 +1739,8 @@ const SortableSection = ({ id, sectionName, sectionIndex, metrics, charts, table
1655
1739
  } }), (0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', flexDirection: 'column', gap: 20 }, children: [(0, jsx_runtime_1.jsxs)("div", { className: "section-header", style: { marginTop: sectionIndex > 0 ? 20 : 0 }, children: [sectionName ? (isEditing ? ((0, jsx_runtime_1.jsx)("input", { ref: inputRef, className: "section-name-input", value: editedName, onChange: handleTextChange, onKeyDown: handleKeyDown, onBlur: handleSave, style: {
1656
1740
  fontSize: 22,
1657
1741
  fontWeight: 'bold',
1742
+ color: theme.primaryTextColor,
1743
+ fontFamily: theme.fontFamily,
1658
1744
  width: inputWidth,
1659
1745
  minWidth: '20px',
1660
1746
  textAlign: 'left',
@@ -1663,6 +1749,8 @@ const SortableSection = ({ id, sectionName, sectionIndex, metrics, charts, table
1663
1749
  margin: 0,
1664
1750
  padding: 0,
1665
1751
  } })) : ((0, jsx_runtime_1.jsx)("h1", { className: isDefaultSection ? '' : 'section-name-display', onClick: isDefaultSection ? undefined : handleStartEditing, ref: h1Ref, style: {
1752
+ color: theme?.primaryTextColor,
1753
+ fontFamily: theme?.fontFamily,
1666
1754
  fontSize: 22,
1667
1755
  fontWeight: 'bold',
1668
1756
  textAlign: 'left',
@@ -1734,6 +1822,7 @@ const SortableSection = ({ id, sectionName, sectionIndex, metrics, charts, table
1734
1822
  } })] }));
1735
1823
  };
1736
1824
  const SortableItem = ({ id, section, chartType, value, onClickReport, }) => {
1825
+ const { state: { theme }, } = (0, AdminProvider_1.useAdmin)();
1737
1826
  const compoundId = `${section}::${id}`;
1738
1827
  const { attributes, listeners, setNodeRef, transform, isDragging } = (0, sortable_1.useSortable)({
1739
1828
  id: compoundId,
@@ -1786,6 +1875,8 @@ const SortableItem = ({ id, section, chartType, value, onClickReport, }) => {
1786
1875
  fontSize: 18,
1787
1876
  fontWeight: '500',
1788
1877
  flexGrow: 1,
1878
+ color: theme?.primaryTextColor,
1879
+ fontFamily: theme?.fontFamily,
1789
1880
  }, children: value }), (0, jsx_runtime_1.jsx)("div", { className: "quill-report-edit-buttons", style: {
1790
1881
  display: 'flex',
1791
1882
  flexDirection: 'column',
@@ -1847,6 +1938,7 @@ function HandleButton(props) {
1847
1938
  } })] })] }));
1848
1939
  }
1849
1940
  const NewSectionButton = ({ onAddSection, existingSections, isEditing, setIsEditing, }) => {
1941
+ const { state: { theme }, } = (0, AdminProvider_1.useAdmin)();
1850
1942
  const [sectionName, setSectionName] = (0, react_1.useState)('');
1851
1943
  const [error, setError] = (0, react_1.useState)('');
1852
1944
  const inputRef = (0, react_1.useRef)(null);
@@ -1912,6 +2004,7 @@ const NewSectionButton = ({ onAddSection, existingSections, isEditing, setIsEdit
1912
2004
  marginTop: '8px',
1913
2005
  fontSize: '16px',
1914
2006
  fontWeight: 300,
2007
+ fontFamily: theme?.fontFamily,
1915
2008
  color: '#9CA0A7',
1916
2009
  }, children: "New section" })] }));
1917
2010
  }
@@ -11,12 +11,6 @@ interface PopoverComponentProps {
11
11
  setIsOpen: (isOpen: boolean) => void;
12
12
  }
13
13
  export declare function Popover({ onClose, parentRef, children, style, onClick, label, showTrigger, isOpen, setIsOpen, }: PopoverComponentProps): import("react/jsx-runtime").JSX.Element;
14
- export declare const ListboxTextInput: ({ value, onChange, placeholder, id, }: {
15
- value: string;
16
- onChange: (e: string) => void;
17
- placeholder: string;
18
- id: string;
19
- }) => import("react/jsx-runtime").JSX.Element;
20
14
  export default function OrgSelect({ isLoading }: {
21
15
  isLoading: boolean;
22
16
  }): import("react/jsx-runtime").JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"OrgSelect.d.ts","sourceRoot":"","sources":["../../../src/components/OrgSelect.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+C,MAAM,OAAO,CAAC;AASpE,UAAU,qBAAqB;IAC7B,QAAQ,EAAE,GAAG,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,GAAG,CAAC;IAChB,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;CACtC;AAED,wBAAgB,OAAO,CAAC,EACtB,OAAO,EACP,SAAS,EACT,QAAQ,EACR,KAAU,EACV,OAAO,EACP,KAAK,EACL,WAAkB,EAClB,MAAM,EACN,SAAS,GACV,EAAE,qBAAqB,2CA4HvB;AAED,eAAO,MAAM,gBAAgB,0CAK1B;IACD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,EAAE,EAAE,MAAM,CAAC;CACZ,4CAyDA,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,EAAE,OAAO,CAAA;CAAE,2CAsJtE;AAED,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,UAAU,EACV,WAAW,EACX,YAAY,EACZ,aAAa,GACd,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC;IAC7C,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,2CAwEA"}
1
+ {"version":3,"file":"OrgSelect.d.ts","sourceRoot":"","sources":["../../../src/components/OrgSelect.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+C,MAAM,OAAO,CAAC;AAUpE,UAAU,qBAAqB;IAC7B,QAAQ,EAAE,GAAG,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,GAAG,CAAC;IAChB,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;CACtC;AAED,wBAAgB,OAAO,CAAC,EACtB,OAAO,EACP,SAAS,EACT,QAAQ,EACR,KAAU,EACV,OAAO,EACP,KAAK,EACL,WAAkB,EAClB,MAAM,EACN,SAAS,GACV,EAAE,qBAAqB,2CAsIvB;AAED,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,EAAE,OAAO,CAAA;CAAE,2CAmOtE;AAED,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,UAAU,EACV,WAAW,EACX,YAAY,EACZ,aAAa,GACd,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC;IAC7C,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,2CA8EA"}
@@ -3,7 +3,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.ListboxTextInput = void 0;
7
6
  exports.Popover = Popover;
8
7
  exports.default = OrgSelect;
9
8
  exports.ListboxRow = ListboxRow;
@@ -16,9 +15,11 @@ const QuillSelectWithCombo_1 = require("./QuillSelectWithCombo");
16
15
  const QuillMultiSelectWithCombo_1 = require("./QuillMultiSelectWithCombo");
17
16
  const useDashboardManager_1 = require("../hooks/useDashboardManager");
18
17
  const GlobeIcon_1 = __importDefault(require("../icons/GlobeIcon"));
18
+ const AdminProvider_1 = require("../AdminProvider");
19
19
  function Popover({ onClose, parentRef, children, style = {}, onClick, label, showTrigger = true, isOpen, setIsOpen, }) {
20
20
  const modalRef = (0, react_1.useRef)(null);
21
21
  const [maxHeight, setMaxHeight] = (0, react_1.useState)('40vh');
22
+ const { state: { theme }, } = (0, AdminProvider_1.useAdmin)();
22
23
  (0, useOnClickOutside_1.default)(modalRef, (e) => {
23
24
  // Exclude click on trigger button (e.g. Dropdown Button) from outside click handler
24
25
  const isTriggerElem = parentRef
@@ -52,7 +53,7 @@ function Popover({ onClose, parentRef, children, style = {}, onClick, label, sho
52
53
  };
53
54
  return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [showTrigger && ((0, jsx_runtime_1.jsxs)("button", {
54
55
  // onMouseEnter={() => setIsOpen(true)}
55
- onClick: (e) => {
56
+ className: "quill-select-button", onClick: (e) => {
56
57
  setIsOpen(!isOpen);
57
58
  if (onClick) {
58
59
  onClick(e);
@@ -68,31 +69,36 @@ function Popover({ onClose, parentRef, children, style = {}, onClick, label, sho
68
69
  textOverflow: 'ellipsis',
69
70
  borderRadius: 6,
70
71
  WebkitAppearance: 'none',
71
- borderTop: '1px solid #e7e7e7',
72
- borderLeft: '1px solid #e7e7e7',
73
- borderRight: '1px solid #e7e7e7',
74
- borderBottom: '1px solid #e7e7e7',
72
+ borderTop: `1px solid ${theme.borderColor}`,
73
+ borderLeft: `1px solid ${theme.borderColor}`,
74
+ borderRight: `1px solid ${theme.borderColor}`,
75
+ borderBottom: `1px solid ${theme.borderColor}`,
75
76
  paddingLeft: 12,
76
77
  paddingRight: 12,
77
78
  height: 40,
78
- background: 'white',
79
- color: '#384151',
79
+ fontFamily: theme.fontFamily,
80
80
  fontWeight: 500,
81
81
  fontSize: 14,
82
82
  position: 'relative',
83
- }, children: [label, (0, jsx_runtime_1.jsx)(icons_1.ArrowDownHeadIcon, { style: {
83
+ }, children: [(0, jsx_runtime_1.jsx)("style", { children: ` .quill-select-button { background: ${theme?.backgroundColor}; color: ${theme?.primaryTextColor}; }
84
+ .quill-select-button:hover { background: ${theme?.hoverBackgroundColor}; color: ${theme?.hoverTextColor}; }
85
+ .quill-select-button:disabled {
86
+ cursor: not-allowed;
87
+ opacity: 0.5;
88
+ }
89
+ ` }), label, (0, jsx_runtime_1.jsx)(icons_1.ArrowDownHeadIcon, { style: {
84
90
  height: '20px',
85
91
  width: '20px',
86
92
  flex: 'none',
87
93
  position: 'absolute',
88
94
  right: 8,
89
95
  top: 8,
90
- color: '#6C727F',
96
+ color: theme.primaryTextColor,
91
97
  }, "aria-hidden": "true" })] })), (0, jsx_runtime_1.jsx)("div", { id: "quill-popover-modal", ref: modalRef, style: { position: 'relative', display: isOpen ? 'block' : 'none' }, children: (0, jsx_runtime_1.jsx)("div", { style: {
92
- background: 'white',
98
+ background: theme.backgroundColor,
93
99
  position: 'absolute',
94
100
  boxShadow: '0px 1px 12px 0px rgba(56, 65, 81, 0.1)',
95
- border: '1px solid #e7e7e7',
101
+ border: `1px solid ${theme.borderColor}`,
96
102
  boxSizing: 'content-box',
97
103
  zIndex: 1,
98
104
  top: showTrigger ? 8 : 0,
@@ -106,36 +112,10 @@ function Popover({ onClose, parentRef, children, style = {}, onClick, label, sho
106
112
  ...style,
107
113
  }, children: children }) })] }));
108
114
  }
109
- const ListboxTextInput = ({ value, onChange, placeholder, id, }) => {
110
- return ((0, jsx_runtime_1.jsxs)("div", { style: {
111
- position: 'relative',
112
- display: 'flex',
113
- flexDirection: 'row',
114
- alignItems: 'center',
115
- marginTop: 2,
116
- }, children: [(0, jsx_runtime_1.jsx)("style", { children: `
117
- .quill-text-input {
118
- background-color: white;
119
- height: 40px;
120
- width: 180px;
121
- z-index: 2;
122
- color: #384151;
123
- border-radius: 4px;
124
- text-align: left;
125
- padding-right: 12px;
126
- padding-top: 0px;
127
- padding-bottom: 0px;
128
- box-sizing: content-box;
129
- margin-left: 6px;
130
- }
131
- .quill-text-input:focus {
132
- outline: none;
133
- }` }), (0, jsx_runtime_1.jsx)("div", { style: { width: 6 } }), (0, jsx_runtime_1.jsx)("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 16 16", fill: "rgba(56, 65, 81, 0.7)", height: "16", width: "16", children: (0, jsx_runtime_1.jsx)("path", { fillRule: "evenodd", d: "M9.965 11.026a5 5 0 1 1 1.06-1.06l2.755 2.754a.75.75 0 1 1-1.06 1.06l-2.755-2.754ZM10.5 7a3.5 3.5 0 1 1-7 0 3.5 3.5 0 0 1 7 0Z", clipRule: "evenodd" }) }), (0, jsx_runtime_1.jsx)("input", { id: id, className: "quill-text-input", type: "text", value: value, onChange: (event) => onChange(event.target.value), placeholder: placeholder })] }));
134
- };
135
- exports.ListboxTextInput = ListboxTextInput;
136
115
  function OrgSelect({ isLoading }) {
137
116
  const { dashboardTenants, dashboardOwnerTenant, selectedTenantType, selectedTenantValues, setSelectedTenantValues, selectedDashboardTenantIds, setSelectedTenantType, setSelectedDashboardTenantIds, dashboardTenantIdsLoading, } = (0, useTenants_1.useTenants)();
138
117
  const { selectedDashboard } = (0, useDashboardManager_1.useDashboardManager)();
118
+ const { eventTracking } = (0, AdminProvider_1.useAdmin)();
139
119
  const debounceIdTimeoutId = (0, react_1.useRef)(null);
140
120
  const debounceValueTimeoutId = (0, react_1.useRef)(null);
141
121
  const debouncedSetSelectedDashboardTenantIds = (value) => {
@@ -143,6 +123,15 @@ function OrgSelect({ isLoading }) {
143
123
  clearTimeout(debounceIdTimeoutId.current);
144
124
  }
145
125
  debounceIdTimeoutId.current = setTimeout(() => {
126
+ eventTracking?.addBreadcrumb?.({
127
+ message: 'Set tenant ids in OrgSelect',
128
+ data: {
129
+ tenantIds: value,
130
+ },
131
+ category: 'interaction',
132
+ level: 'info',
133
+ timestamp: Date.now(),
134
+ });
146
135
  setSelectedDashboardTenantIds(value);
147
136
  }, 500);
148
137
  };
@@ -151,7 +140,16 @@ function OrgSelect({ isLoading }) {
151
140
  clearTimeout(debounceValueTimeoutId.current);
152
141
  }
153
142
  debounceValueTimeoutId.current = setTimeout(() => {
154
- setSelectedTenantValues(value);
143
+ eventTracking?.addBreadcrumb?.({
144
+ message: 'Set tenant values in OrgSelect',
145
+ data: {
146
+ tenantValues: value,
147
+ },
148
+ category: 'interaction',
149
+ level: 'info',
150
+ timestamp: Date.now(),
151
+ });
152
+ setSelectedTenantValues(Array.isArray(value) ? value : [value]);
155
153
  }, 500);
156
154
  };
157
155
  const dashboardTenantOptions = (0, react_1.useMemo)(() => {
@@ -177,13 +175,43 @@ function OrgSelect({ isLoading }) {
177
175
  value: id.id,
178
176
  })) ?? []);
179
177
  }, [selectedTenantType]);
180
- return ((0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', flexDirection: 'row', gap: 16 }, children: [dashboardTenantOptions?.length > 1 && ((0, jsx_runtime_1.jsx)(QuillSelectWithCombo_1.QuillSelectComponentWithCombo, { label: 'Tenant Type', width: 230, value: selectedTenantType?.tenantField, options: dashboardTenantOptions, onChange: (e) => setSelectedTenantType(e.target.value), isLoading: isLoading, disabled: isLoading, hideEmptyOption: true, badge: ownerIsSelected ? 'Owner' : undefined })), (0, jsx_runtime_1.jsx)(QuillMultiSelectWithCombo_1.QuillMultiSelectComponentWithCombo, { label: selectedTenantType?.scope === 'database'
178
+ return ((0, jsx_runtime_1.jsxs)("div", { style: {
179
+ display: 'flex',
180
+ flexDirection: 'row',
181
+ gap: 16,
182
+ fontWeight: 500,
183
+ }, children: [dashboardTenantOptions?.length > 1 && ((0, jsx_runtime_1.jsx)(QuillSelectWithCombo_1.QuillSelectComponentWithCombo, { label: 'Tenant Type', width: 230, value: selectedTenantType?.tenantField, options: dashboardTenantOptions, onChange: (e) => setSelectedTenantType(e.target.value), isLoading: isLoading, disabled: isLoading, hideEmptyOption: true, badge: ownerIsSelected ? 'Owner' : undefined })), ownerIsSelected ? ((0, jsx_runtime_1.jsx)(QuillSelectWithCombo_1.QuillSelectComponentWithCombo, { label: selectedTenantType?.scope === 'database'
184
+ ? 'Tags'
185
+ : (selectedTenantType?.name ?? 'Tenant'), width: 230, value: !tenantValueOptions.length
186
+ ? null
187
+ : selectedTenantValues
188
+ ? selectedTenantValues[0]
189
+ : null, options: tenantValueOptions, onChange: (e) => debouncedSetSelectedTenantValues(e.target.value),
190
+ // emptyLabel={
191
+ // selectedTenantType?.scope === 'database'
192
+ // ? 'No tags provided'
193
+ // : undefined
194
+ // }
195
+ disabled: isLoading, hideEmptyOption: true,
196
+ // allSelectedLabel={
197
+ // selectedTenantType?.scope === 'database' ? undefined : (
198
+ // <div style={{ display: 'flex', flexDirection: 'row', gap: 3 }}>
199
+ // <GlobeIcon
200
+ // style={{
201
+ // marginTop: 1.75,
202
+ // }}
203
+ // />
204
+ // <div>All {(selectedTenantType?.name ?? 'Tenant') + 's'}</div>
205
+ // </div>
206
+ // )
207
+ // }
208
+ isLoading: isLoading, displayValue: true })) : ((0, jsx_runtime_1.jsx)(QuillMultiSelectWithCombo_1.QuillMultiSelectComponentWithCombo, { label: selectedTenantType?.scope === 'database'
181
209
  ? 'Tags'
182
210
  : (selectedTenantType?.name ?? 'Tenant'), width: 230, value: !tenantValueOptions.length ? [] : (selectedTenantValues ?? []), options: tenantValueOptions, onChange: (e) => debouncedSetSelectedTenantValues(e.target.value), emptyLabel: selectedTenantType?.scope === 'database'
183
211
  ? 'No tags provided'
184
212
  : undefined, disabled: isLoading, allSelectedLabel: selectedTenantType?.scope === 'database' ? undefined : ((0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', flexDirection: 'row', gap: 3 }, children: [(0, jsx_runtime_1.jsx)(GlobeIcon_1.default, { style: {
185
213
  marginTop: 1.75,
186
- } }), (0, jsx_runtime_1.jsxs)("div", { children: ["All ", (selectedTenantType?.name ?? 'Tenant') + 's'] })] })), isLoading: isLoading }, (selectedTenantType?.tenantField ?? 'Tenant') + 'options'), selectedTenantType &&
214
+ } }), (0, jsx_runtime_1.jsxs)("div", { children: ["All ", (selectedTenantType?.name ?? 'Tenant') + 's'] })] })), isLoading: isLoading, enableSingleSelectOption: true, displayValue: true, enableSubmitButton: true, submitButtonText: 'Submit' }, (selectedTenantType?.tenantField ?? 'Tenant') + 'options')), selectedTenantType &&
187
215
  !ownerIsSelected &&
188
216
  dashboardOwnerTenant?.scope !== 'database' &&
189
217
  !!selectedTenantValues?.length && ((0, jsx_runtime_1.jsx)(QuillMultiSelectWithCombo_1.QuillMultiSelectComponentWithCombo, { label: dashboardOwnerTenant?.name ?? 'Viewing as', width: 230, value: isLoading ? [] : (selectedDashboardTenantIds ?? []), options: dashboardOwnerTenant?.tenantIds?.map((id) => ({
@@ -191,9 +219,10 @@ function OrgSelect({ isLoading }) {
191
219
  value: id.id,
192
220
  })) ?? [], onChange: (e) => debouncedSetSelectedDashboardTenantIds(e.target.value), isLoading: dashboardTenantIdsLoading || isLoading, disabled: isLoading, allSelectedLabel: selectedTenantType?.scope === 'database' ? undefined : ((0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', flexDirection: 'row', gap: 3 }, children: [(0, jsx_runtime_1.jsx)(GlobeIcon_1.default, { style: {
193
221
  marginTop: 1.75,
194
- } }), (0, jsx_runtime_1.jsx)("div", { children: "All Tenants" })] })) }))] }));
222
+ } }), (0, jsx_runtime_1.jsx)("div", { children: "All Tenants" })] })), enableSingleSelectOption: true, displayValue: true, enableSubmitButton: true, submitButtonText: 'Submit' }))] }));
195
223
  }
196
224
  function ListboxRow({ item, isSelected, setSelected, hoverActions, allowUnselect, }) {
225
+ const { state: { theme }, } = (0, AdminProvider_1.useAdmin)();
197
226
  return ((0, jsx_runtime_1.jsx)("div", { className: 'quill-list-select' + (isSelected ? ' quill-list-selected' : ''), style: {
198
227
  paddingBottom: 6,
199
228
  cursor: isSelected && !allowUnselect ? 'default' : 'pointer',
@@ -202,7 +231,6 @@ function ListboxRow({ item, isSelected, setSelected, hoverActions, allowUnselect
202
231
  ? () => setSelected(item)
203
232
  : undefined, className: "quill-list-select-title", style: {
204
233
  height: 42,
205
- color: '#384151',
206
234
  width: 216,
207
235
  borderRadius: 6,
208
236
  textAlign: 'left',
@@ -219,13 +247,16 @@ function ListboxRow({ item, isSelected, setSelected, hoverActions, allowUnselect
219
247
  overflow: 'hidden',
220
248
  }, children: [(0, jsx_runtime_1.jsx)("style", { children: `
221
249
  .quill-list-select > div {
222
- background-color: white;
250
+ background-color: ${theme?.backgroundColor};
251
+ color: ${theme?.primaryTextColor};
223
252
  }
224
253
  .quill-list-selected > div {
225
- background-color: rgba(56, 65, 81, 0.04);
254
+ background-color: ${theme?.hoverBackgroundColor};
255
+ color: ${theme?.hoverTextColor};
226
256
  }
227
257
  .quill-list-select:hover > div {
228
- background-color: rgba(56, 65, 81, 0.04);
258
+ background-color: ${theme?.hoverBackgroundColor};
259
+ color: ${theme?.hoverTextColor};
229
260
  }
230
261
  .quill-list-select-hover-actions {
231
262
  display: none;
@@ -239,5 +270,6 @@ function ListboxRow({ item, isSelected, setSelected, hoverActions, allowUnselect
239
270
  whiteSpace: 'nowrap',
240
271
  overflow: 'hidden',
241
272
  display: 'block',
273
+ fontFamily: theme.fontFamily,
242
274
  }, children: item }), (0, jsx_runtime_1.jsx)("div", { className: isSelected ? '' : 'quill-list-select-hover-actions', children: hoverActions && hoverActions(item) })] }) }));
243
275
  }
@@ -17,14 +17,20 @@ export interface MultiSelectComponentProps {
17
17
  allSelectedLabel?: JSX.Element;
18
18
  noneSelectedLabel?: JSX.Element;
19
19
  mimicReactSelect?: boolean;
20
+ enableSingleSelectOption?: boolean;
21
+ displayValue?: boolean;
22
+ enableSubmitButton?: boolean;
23
+ submitButtonText?: string;
20
24
  }
21
25
  /**
22
26
  * A robust select component that implements the new minimal Select interface.
23
27
  */
24
- export declare function QuillMultiSelectComponentWithCombo({ options, width, onChange, label, value, isLoading, disabled, emptyLabel, allSelectedLabel, noneSelectedLabel, mimicReactSelect, }: MultiSelectComponentProps): import("react/jsx-runtime").JSX.Element;
25
- export declare const ListboxTextInput: ({ value, onChange, placeholder, }: {
28
+ export declare function QuillMultiSelectComponentWithCombo({ options, width, onChange, label, value, isLoading, disabled, emptyLabel, allSelectedLabel, noneSelectedLabel, mimicReactSelect, enableSingleSelectOption, displayValue, enableSubmitButton, submitButtonText, }: MultiSelectComponentProps): import("react/jsx-runtime").JSX.Element;
29
+ export declare const ListboxTextInput: ({ value, onChange, placeholder, id, width, }: {
26
30
  value: string;
27
31
  onChange: (e: string) => void;
28
32
  placeholder: string;
33
+ width?: number;
34
+ id?: string;
29
35
  }) => import("react/jsx-runtime").JSX.Element;
30
36
  //# sourceMappingURL=QuillMultiSelectWithCombo.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"QuillMultiSelectWithCombo.d.ts","sourceRoot":"","sources":["../../../src/components/QuillMultiSelectWithCombo.tsx"],"names":[],"mappings":"AASA,MAAM,WAAW,yBAAyB;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;IAClC,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;QACvB,KAAK,EAAE,MAAM,CAAC;KACf,EAAE,CAAC;IACJ,QAAQ,EAAE,CAAC,KAAK,EAAE;QAAE,MAAM,EAAE;YAAE,KAAK,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,EAAE,CAAA;SAAE,CAAA;KAAE,KAAK,IAAI,CAAC;IAC7E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;IAC/B,iBAAiB,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;IAChC,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;GAEG;AACH,wBAAgB,kCAAkC,CAAC,EACjD,OAAO,EACP,KAAK,EACL,QAAQ,EACR,KAAK,EACL,KAAK,EACL,SAAS,EACT,QAAQ,EACR,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,GACjB,EAAE,yBAAyB,2CAumB3B;AAED,eAAO,MAAM,gBAAgB,sCAI1B;IACD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;CACrB,4CAwDA,CAAC"}
1
+ {"version":3,"file":"QuillMultiSelectWithCombo.d.ts","sourceRoot":"","sources":["../../../src/components/QuillMultiSelectWithCombo.tsx"],"names":[],"mappings":"AASA,MAAM,WAAW,yBAAyB;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;IAClC,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;QACvB,KAAK,EAAE,MAAM,CAAC;KACf,EAAE,CAAC;IACJ,QAAQ,EAAE,CAAC,KAAK,EAAE;QAAE,MAAM,EAAE;YAAE,KAAK,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,EAAE,CAAA;SAAE,CAAA;KAAE,KAAK,IAAI,CAAC;IAC7E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;IAC/B,iBAAiB,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;IAChC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,kCAAkC,CAAC,EACjD,OAAO,EACP,KAAK,EACL,QAAQ,EACR,KAAK,EACL,KAAK,EACL,SAAS,EACT,QAAQ,EACR,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,wBAAwB,EACxB,YAAY,EACZ,kBAAkB,EAClB,gBAAgB,GACjB,EAAE,yBAAyB,2CAs1B3B;AAED,eAAO,MAAM,gBAAgB,GAAI,8CAM9B;IACD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;CACb,4CAkEA,CAAC"}