@apia/dashboard-controller 5.0.0 → 5.0.3

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 (178) hide show
  1. package/dist/actions/externalFirePanelAction.d.ts +6 -0
  2. package/dist/actions/externalFirePanelAction.d.ts.map +1 -0
  3. package/dist/actions/externalFirePanelAction.js +12 -0
  4. package/dist/actions/externalFirePanelAction.js.map +1 -0
  5. package/dist/actions/firePanelAction.d.ts +6 -0
  6. package/dist/actions/firePanelAction.d.ts.map +1 -0
  7. package/dist/actions/firePanelAction.js +76 -0
  8. package/dist/actions/firePanelAction.js.map +1 -0
  9. package/dist/actions/useActionEventHandlers.d.ts +10 -0
  10. package/dist/actions/useActionEventHandlers.d.ts.map +1 -0
  11. package/dist/actions/useActionEventHandlers.js +67 -0
  12. package/dist/actions/useActionEventHandlers.js.map +1 -0
  13. package/dist/actions/usePanelActions.d.ts +65 -0
  14. package/dist/actions/usePanelActions.d.ts.map +1 -0
  15. package/dist/actions/usePanelActions.js +55 -0
  16. package/dist/actions/usePanelActions.js.map +1 -0
  17. package/dist/actions/usePanelIsLoading.d.ts +4 -0
  18. package/dist/actions/usePanelIsLoading.d.ts.map +1 -0
  19. package/dist/actions/usePanelIsLoading.js +14 -0
  20. package/dist/actions/usePanelIsLoading.js.map +1 -0
  21. package/dist/actions/usePanelNetworkState.d.ts +8 -0
  22. package/dist/actions/usePanelNetworkState.d.ts.map +1 -0
  23. package/dist/actions/usePanelNetworkState.js +21 -0
  24. package/dist/actions/usePanelNetworkState.js.map +1 -0
  25. package/dist/common/usePanelIdentity.d.ts +10 -0
  26. package/dist/common/usePanelIdentity.d.ts.map +1 -0
  27. package/dist/common/usePanelIdentity.js +12 -0
  28. package/dist/common/usePanelIdentity.js.map +1 -0
  29. package/dist/config/parametersStore.d.ts +15 -0
  30. package/dist/config/parametersStore.d.ts.map +1 -0
  31. package/dist/config/parametersStore.js +27 -0
  32. package/dist/config/parametersStore.js.map +1 -0
  33. package/dist/config/saveParameters.d.ts +11 -0
  34. package/dist/config/saveParameters.d.ts.map +1 -0
  35. package/dist/config/saveParameters.js +16 -0
  36. package/dist/config/saveParameters.js.map +1 -0
  37. package/dist/config/usePanelConfig.js +49 -0
  38. package/dist/config/usePanelConfig.js.map +1 -0
  39. package/dist/config/usePanelParametersSelector.d.ts +25 -0
  40. package/dist/config/usePanelParametersSelector.d.ts.map +1 -0
  41. package/dist/config/usePanelParametersSelector.js +17 -0
  42. package/dist/config/usePanelParametersSelector.js.map +1 -0
  43. package/dist/dashboard/ContainerNotFound.js +14 -0
  44. package/dist/dashboard/ContainerNotFound.js.map +1 -0
  45. package/dist/dashboard/DashboardContext.d.ts +6 -0
  46. package/dist/dashboard/DashboardContext.d.ts.map +1 -0
  47. package/dist/dashboard/DashboardContext.js +12 -0
  48. package/dist/dashboard/DashboardContext.js.map +1 -0
  49. package/dist/dashboard/DashboardPanel.d.ts +48 -0
  50. package/dist/dashboard/DashboardPanel.d.ts.map +1 -0
  51. package/dist/dashboard/DashboardPanel.js +264 -0
  52. package/dist/dashboard/DashboardPanel.js.map +1 -0
  53. package/dist/dashboard/DashboardPanelContext.d.ts +6 -0
  54. package/dist/dashboard/DashboardPanelContext.d.ts.map +1 -0
  55. package/dist/dashboard/DashboardPanelContext.js +12 -0
  56. package/dist/dashboard/DashboardPanelContext.js.map +1 -0
  57. package/dist/dashboard/DashboardPanelsBootstraper.d.ts +33 -0
  58. package/dist/dashboard/DashboardPanelsBootstraper.d.ts.map +1 -0
  59. package/dist/dashboard/DashboardPanelsBootstraper.js +135 -0
  60. package/dist/dashboard/DashboardPanelsBootstraper.js.map +1 -0
  61. package/dist/dashboard/DashboardRouter.d.ts +30 -0
  62. package/dist/dashboard/DashboardRouter.d.ts.map +1 -0
  63. package/dist/dashboard/DashboardRouter.js +74 -0
  64. package/dist/dashboard/DashboardRouter.js.map +1 -0
  65. package/dist/dashboard/PanelNotFound.js +17 -0
  66. package/dist/dashboard/PanelNotFound.js.map +1 -0
  67. package/dist/dashboard/dashboard.d.ts +28 -0
  68. package/dist/dashboard/dashboard.d.ts.map +1 -0
  69. package/dist/dashboard/dashboard.js +174 -0
  70. package/dist/dashboard/dashboard.js.map +1 -0
  71. package/dist/eventsController/eventsController.d.ts +11 -0
  72. package/dist/eventsController/eventsController.d.ts.map +1 -0
  73. package/dist/eventsController/eventsController.js +57 -0
  74. package/dist/eventsController/eventsController.js.map +1 -0
  75. package/dist/eventsController/types.d.ts +21 -0
  76. package/dist/eventsController/types.d.ts.map +1 -0
  77. package/dist/eventsController/usePanelFireEvent.d.ts +13 -0
  78. package/dist/eventsController/usePanelFireEvent.d.ts.map +1 -0
  79. package/dist/eventsController/usePanelFireEvent.js +21 -0
  80. package/dist/eventsController/usePanelFireEvent.js.map +1 -0
  81. package/dist/eventsController/usePanelOnEvent.d.ts +12 -0
  82. package/dist/eventsController/usePanelOnEvent.d.ts.map +1 -0
  83. package/dist/eventsController/usePanelOnEvent.js +14 -0
  84. package/dist/eventsController/usePanelOnEvent.js.map +1 -0
  85. package/dist/index.d.ts +31 -459
  86. package/dist/index.js +28 -2241
  87. package/dist/index.js.map +1 -1
  88. package/dist/panelsStore/createPanelStore.d.ts +16 -0
  89. package/dist/panelsStore/createPanelStore.d.ts.map +1 -0
  90. package/dist/panelsStore/createPanelStore.js +58 -0
  91. package/dist/panelsStore/createPanelStore.js.map +1 -0
  92. package/dist/panelsStore/panelsStore.js +59 -0
  93. package/dist/panelsStore/panelsStore.js.map +1 -0
  94. package/dist/panelsStore/usePanelSelector.js +32 -0
  95. package/dist/panelsStore/usePanelSelector.js.map +1 -0
  96. package/dist/panelsUtil/usePanelChangeTitle.d.ts +7 -0
  97. package/dist/panelsUtil/usePanelChangeTitle.d.ts.map +1 -0
  98. package/dist/panelsUtil/usePanelChangeTitle.js +19 -0
  99. package/dist/panelsUtil/usePanelChangeTitle.js.map +1 -0
  100. package/dist/panelsUtil/usePanelTitleAction.d.ts +5 -0
  101. package/dist/panelsUtil/usePanelTitleAction.d.ts.map +1 -0
  102. package/dist/panelsUtil/usePanelTitleAction.js +48 -0
  103. package/dist/panelsUtil/usePanelTitleAction.js.map +1 -0
  104. package/dist/position/usePanelPosition.d.ts +13 -0
  105. package/dist/position/usePanelPosition.d.ts.map +1 -0
  106. package/dist/position/usePanelPosition.js +40 -0
  107. package/dist/position/usePanelPosition.js.map +1 -0
  108. package/dist/splash/events/Dragleave.js +15 -0
  109. package/dist/splash/events/Dragleave.js.map +1 -0
  110. package/dist/splash/events/Dragover.js +120 -0
  111. package/dist/splash/events/Dragover.js.map +1 -0
  112. package/dist/splash/events/Dragstart.js +65 -0
  113. package/dist/splash/events/Dragstart.js.map +1 -0
  114. package/dist/splash/events/Drop.js +66 -0
  115. package/dist/splash/events/Drop.js.map +1 -0
  116. package/dist/splash/panels/DefaultPanelWrapper/CollapseButton.js +31 -0
  117. package/dist/splash/panels/DefaultPanelWrapper/CollapseButton.js.map +1 -0
  118. package/dist/splash/panels/DefaultPanelWrapper/NetworkState.d.ts +8 -0
  119. package/dist/splash/panels/DefaultPanelWrapper/NetworkState.d.ts.map +1 -0
  120. package/dist/splash/panels/DefaultPanelWrapper/NetworkState.js +28 -0
  121. package/dist/splash/panels/DefaultPanelWrapper/NetworkState.js.map +1 -0
  122. package/dist/splash/panels/DefaultPanelWrapper/PanelButtons.d.ts +10 -0
  123. package/dist/splash/panels/DefaultPanelWrapper/PanelButtons.d.ts.map +1 -0
  124. package/dist/splash/panels/DefaultPanelWrapper/PanelButtons.js +32 -0
  125. package/dist/splash/panels/DefaultPanelWrapper/PanelButtons.js.map +1 -0
  126. package/dist/splash/panels/DefaultPanelWrapper/RefreshButton.js +35 -0
  127. package/dist/splash/panels/DefaultPanelWrapper/RefreshButton.js.map +1 -0
  128. package/dist/splash/panels/DefaultPanelWrapper/SettingsButton.js +45 -0
  129. package/dist/splash/panels/DefaultPanelWrapper/SettingsButton.js.map +1 -0
  130. package/dist/splash/panels/DefaultPanelWrapper/index.js +82 -0
  131. package/dist/splash/panels/DefaultPanelWrapper/index.js.map +1 -0
  132. package/dist/splash/panels/EmptyPanelWrapper/index.d.ts +6 -0
  133. package/dist/splash/panels/EmptyPanelWrapper/index.d.ts.map +1 -0
  134. package/dist/splash/panels/EmptyPanelWrapper/index.js +10 -0
  135. package/dist/splash/panels/EmptyPanelWrapper/index.js.map +1 -0
  136. package/dist/splash/panels/LandingPagePanelWrapper.d.ts +6 -0
  137. package/dist/splash/panels/LandingPagePanelWrapper.d.ts.map +1 -0
  138. package/dist/splash/panels/LandingPagePanelWrapper.js +49 -0
  139. package/dist/splash/panels/LandingPagePanelWrapper.js.map +1 -0
  140. package/dist/splash/panels/PanelContext/PanelFooter.d.ts +9 -0
  141. package/dist/splash/panels/PanelContext/PanelFooter.d.ts.map +1 -0
  142. package/dist/splash/panels/PanelContext/PanelFooter.js +72 -0
  143. package/dist/splash/panels/PanelContext/PanelFooter.js.map +1 -0
  144. package/dist/splash/panels/PanelContext/index.d.ts +46 -0
  145. package/dist/splash/panels/PanelContext/index.d.ts.map +1 -0
  146. package/dist/splash/panels/PanelContext/index.js +66 -0
  147. package/dist/splash/panels/PanelContext/index.js.map +1 -0
  148. package/dist/splash/panels/PanelContext/usePanelContextLayout.d.ts +6 -0
  149. package/dist/splash/panels/PanelContext/usePanelContextLayout.d.ts.map +1 -0
  150. package/dist/splash/panels/PanelContext/usePanelContextLayout.js +38 -0
  151. package/dist/splash/panels/PanelContext/usePanelContextLayout.js.map +1 -0
  152. package/dist/splash/panels/PanelContext/usePanelFooter.d.ts +11 -0
  153. package/dist/splash/panels/PanelContext/usePanelFooter.d.ts.map +1 -0
  154. package/dist/splash/panels/PanelContext/usePanelFooter.js +35 -0
  155. package/dist/splash/panels/PanelContext/usePanelFooter.js.map +1 -0
  156. package/dist/splash/panels/PanelContext/useYieldPanelIsReady.d.ts +45 -0
  157. package/dist/splash/panels/PanelContext/useYieldPanelIsReady.d.ts.map +1 -0
  158. package/dist/splash/panels/PanelContext/useYieldPanelIsReady.js +12 -0
  159. package/dist/splash/panels/PanelContext/useYieldPanelIsReady.js.map +1 -0
  160. package/dist/splash/panels/PanelErrorBoundary.js +53 -0
  161. package/dist/splash/panels/PanelErrorBoundary.js.map +1 -0
  162. package/dist/splash/panels/PanelIdentifier.d.ts +16 -0
  163. package/dist/splash/panels/PanelIdentifier.d.ts.map +1 -0
  164. package/dist/splash/panels/PanelIdentifier.js +19 -0
  165. package/dist/splash/panels/PanelIdentifier.js.map +1 -0
  166. package/dist/splash/util/DragAndDrop.js +244 -0
  167. package/dist/splash/util/DragAndDrop.js.map +1 -0
  168. package/dist/splash/util/getColumnAreas.js +19 -0
  169. package/dist/splash/util/getColumnAreas.js.map +1 -0
  170. package/dist/splash/util/isCursorInArea.js +13 -0
  171. package/dist/splash/util/isCursorInArea.js.map +1 -0
  172. package/dist/types.d.ts +30 -0
  173. package/dist/types.d.ts.map +1 -0
  174. package/dist/util.d.ts +8 -0
  175. package/dist/util.d.ts.map +1 -0
  176. package/dist/util.js +55 -0
  177. package/dist/util.js.map +1 -0
  178. package/package.json +9 -8
@@ -0,0 +1,25 @@
1
+ import { TPanelName } from '../types.js';
2
+ import { TPanelParameter } from './parametersStore.js';
3
+
4
+ type TParametersSelector<Selected> = (parameters: Record<string, TPanelParameter>) => Selected;
5
+ /**
6
+ // eslint-disable-next-line comment-length/limit-multi-line-comments
7
+ * Este hook permite seleccionar parámetros de un panel. Cada vez que los
8
+ * parámetros del panel sean actualizados, se llamará a la función selector y en
9
+ * caso de que la selección actual de parámetros difiera de la anterior, se
10
+ * provocará un renderizado en el componente que lo utiliza.
11
+ *
12
+ * Si se quiere obtener los parámetros del panel en el que se está trabajando,
13
+ * el segundo parámetro es innecesario. En caso de querer obtener los
14
+ * parámetros de otro panel, se puede pasar su nombre como segundo parámetro y
15
+ * la selección se hará de acuerdo a los parámetros de éste.
16
+ *
17
+ * Es importante ver que es imposible prever qué parámetros tendrá cada panel,
18
+ * por ello el tipo entregado al selector es Record, que puede entenderse como
19
+ * un mapa de entradas con clave string y valor TPanelParameter = string |
20
+ * boolean | number.
21
+ */
22
+ declare function usePanelParametersSelector<Selected>(selector: TParametersSelector<Selected>, panelName?: TPanelName): Selected;
23
+
24
+ export { type TParametersSelector, usePanelParametersSelector };
25
+ //# sourceMappingURL=usePanelParametersSelector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePanelParametersSelector.d.ts","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,17 @@
1
+ import { shallowEqual } from 'react-redux';
2
+ import { usePanelIdentity } from '../common/usePanelIdentity.js';
3
+ import { useParametersSelector } from './parametersStore.js';
4
+ import { useDashboardContext } from '../dashboard/DashboardContext.js';
5
+
6
+ function usePanelParametersSelector(selector, panelName) {
7
+ const { panelId } = usePanelIdentity();
8
+ const dashboard = useDashboardContext();
9
+ const id = panelName !== void 0 ? dashboard.getPanelByName(panelName)?.id ?? "" : panelId;
10
+ return useParametersSelector((global) => {
11
+ const currentParams = global.panelParameters[id];
12
+ return selector(currentParams ?? {});
13
+ }, shallowEqual);
14
+ }
15
+
16
+ export { usePanelParametersSelector };
17
+ //# sourceMappingURL=usePanelParametersSelector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePanelParametersSelector.js","sources":["../../src/config/usePanelParametersSelector.ts"],"sourcesContent":["import { shallowEqual } from 'react-redux';\r\nimport { usePanelIdentity } from '../common';\r\nimport { TPanelName } from '../types';\r\nimport { TPanelParameter, useParametersSelector } from './parametersStore';\r\nimport { useDashboardContext } from '../dashboard';\r\n\r\nexport type TParametersSelector<Selected> = (\r\n parameters: Record<string, TPanelParameter>,\r\n) => Selected;\r\n\r\n/**\r\n // eslint-disable-next-line comment-length/limit-multi-line-comments\r\n * Este hook permite seleccionar parámetros de un panel. Cada vez que los\r\n * parámetros del panel sean actualizados, se llamará a la función selector y en\r\n * caso de que la selección actual de parámetros difiera de la anterior, se\r\n * provocará un renderizado en el componente que lo utiliza.\r\n *\r\n * Si se quiere obtener los parámetros del panel en el que se está trabajando,\r\n * el segundo parámetro es innecesario. En caso de querer obtener los\r\n * parámetros de otro panel, se puede pasar su nombre como segundo parámetro y\r\n * la selección se hará de acuerdo a los parámetros de éste.\r\n *\r\n * Es importante ver que es imposible prever qué parámetros tendrá cada panel,\r\n * por ello el tipo entregado al selector es Record, que puede entenderse como\r\n * un mapa de entradas con clave string y valor TPanelParameter = string |\r\n * boolean | number.\r\n */\r\nexport function usePanelParametersSelector<Selected>(\r\n selector: TParametersSelector<Selected>,\r\n panelName?: TPanelName,\r\n) {\r\n const { panelId } = usePanelIdentity();\r\n const dashboard = useDashboardContext();\r\n const id =\r\n panelName !== undefined\r\n ? dashboard.getPanelByName(panelName)?.id ?? ''\r\n : panelId;\r\n\r\n return useParametersSelector((global) => {\r\n const currentParams = global.panelParameters[id];\r\n return selector(currentParams ?? {});\r\n }, shallowEqual);\r\n}\r\n"],"names":[],"mappings":";;;;;AA2BO,SAAS,0BAAA,CACd,UACA,SAAA,EACA;AACA,EAAA,MAAM,EAAE,OAAA,EAAQ,GAAI,gBAAA,EAAiB;AACrC,EAAA,MAAM,YAAY,mBAAA,EAAoB;AACtC,EAAA,MAAM,EAAA,GACJ,cAAc,MAAA,GACV,SAAA,CAAU,eAAe,SAAS,CAAA,EAAG,MAAM,EAAA,GAC3C,OAAA;AAEN,EAAA,OAAO,qBAAA,CAAsB,CAAC,MAAA,KAAW;AACvC,IAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,eAAA,CAAgB,EAAE,CAAA;AAC/C,IAAA,OAAO,QAAA,CAAS,aAAA,IAAiB,EAAE,CAAA;AAAA,KAClC,YAAY,CAAA;AACjB;;;;"}
@@ -0,0 +1,14 @@
1
+ import { jsxs } from '@apia/theme/jsx-runtime';
2
+ import { Heading } from '@apia/theme';
3
+ import { usePanelIdentity } from '../common/usePanelIdentity.js';
4
+
5
+ const ContainerNotFound = () => {
6
+ const props = usePanelIdentity();
7
+ return /* @__PURE__ */ jsxs(Heading, { children: [
8
+ "Container not found for panel: ",
9
+ props.panelName
10
+ ] });
11
+ };
12
+
13
+ export { ContainerNotFound };
14
+ //# sourceMappingURL=ContainerNotFound.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContainerNotFound.js","sources":["../../src/dashboard/ContainerNotFound.tsx"],"sourcesContent":["import { Heading } from '@apia/theme';\r\nimport { usePanelIdentity } from '../common';\r\n\r\nexport const ContainerNotFound = () => {\r\n const props = usePanelIdentity();\r\n\r\n return <Heading>Container not found for panel: {props.panelName}</Heading>;\r\n};\r\n"],"names":[],"mappings":";;;;AAGO,MAAM,oBAAoB,MAAM;AACrC,EAAA,MAAM,QAAQ,gBAAA,EAAiB;AAE/B,EAAA,4BAAQ,OAAA,EAAA,EAAQ,QAAA,EAAA;AAAA,IAAA,iCAAA;AAAA,IAAgC,KAAA,CAAM;AAAA,GAAA,EAAU,CAAA;AAClE;;;;"}
@@ -0,0 +1,6 @@
1
+ import { Dashboard } from './dashboard.js';
2
+
3
+ declare function useDashboardContext(): Dashboard;
4
+
5
+ export { useDashboardContext };
6
+ //# sourceMappingURL=DashboardContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DashboardContext.d.ts","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ import { useContext, createContext } from 'react';
2
+
3
+ const DashboardContext = createContext(null);
4
+ function useDashboardContext() {
5
+ const context = useContext(DashboardContext);
6
+ if (!context)
7
+ throw new Error("There is no Dashboard context");
8
+ return context;
9
+ }
10
+
11
+ export { DashboardContext, useDashboardContext };
12
+ //# sourceMappingURL=DashboardContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DashboardContext.js","sources":["../../src/dashboard/DashboardContext.tsx"],"sourcesContent":["import { createContext, useContext } from 'react';\r\nimport { Dashboard } from './dashboard';\r\n\r\nexport const DashboardContext = createContext<Dashboard | null>(null);\r\n\r\nexport function useDashboardContext() {\r\n const context = useContext(DashboardContext);\r\n\r\n if (!context) throw new Error('There is no Dashboard context');\r\n\r\n return context;\r\n}\r\n"],"names":[],"mappings":";;AAGO,MAAM,gBAAA,GAAmB,cAAgC,IAAI;AAE7D,SAAS,mBAAA,GAAsB;AACpC,EAAA,MAAM,OAAA,GAAU,WAAW,gBAAgB,CAAA;AAE3C,EAAA,IAAI,CAAC,OAAA;AAAS,IAAA,MAAM,IAAI,MAAM,+BAA+B,CAAA;AAE7D,EAAA,OAAO,OAAA;AACT;;;;"}
@@ -0,0 +1,48 @@
1
+ import * as react from 'react';
2
+ import { ReactPortal } from 'react';
3
+ import { Dashboard } from './dashboard.js';
4
+ import { TLoadedPanelProps, PanelContainer } from '../types.js';
5
+ import { importPanel } from '../util.js';
6
+ import { EventEmitter } from '@apia/util';
7
+ import { TActionDispatcherOptions, TActionResult } from '../actions/usePanelActions.js';
8
+
9
+ type TPanelProps = Omit<TLoadedPanelProps, 'initialData'>;
10
+ declare class DashboardPanel extends EventEmitter<{
11
+ hasLoaded: boolean;
12
+ isVisible: boolean;
13
+ isCollapsed: boolean;
14
+ }> {
15
+ #private;
16
+ dashboard: Dashboard;
17
+ hasInited: boolean;
18
+ hasLoaded: boolean;
19
+ id: string;
20
+ initialData: Promise<unknown> | null;
21
+ isVisible: boolean;
22
+ isCollapsed: boolean;
23
+ portal: ReactPortal;
24
+ props: TPanelProps;
25
+ constructor({ id, dashboard, PanelContainer, }: {
26
+ id: string;
27
+ dashboard: Dashboard;
28
+ PanelContainer: PanelContainer;
29
+ });
30
+ collapse(): void;
31
+ fireAction: ({ action, ...parameters }: {
32
+ action: string;
33
+ } & Record<string, unknown>, options?: TActionDispatcherOptions) => Promise<TActionResult>;
34
+ getContainer(): HTMLElement;
35
+ getParameters(): any;
36
+ hide(): void;
37
+ refresh(): Promise<TActionResult | undefined>;
38
+ queuedRefresh(): Promise<TActionResult | undefined>;
39
+ setHasLoaded(): void;
40
+ show(): void;
41
+ PanelElement: ({ ActualPanelContainer, Element, }: {
42
+ ActualPanelContainer: PanelContainer;
43
+ Element: ReturnType<typeof importPanel>;
44
+ }) => react.JSX.Element | null;
45
+ }
46
+
47
+ export { DashboardPanel };
48
+ //# sourceMappingURL=DashboardPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DashboardPanel.d.ts","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,264 @@
1
+ import { jsx } from '@apia/theme/jsx-runtime';
2
+ import { createPortal } from 'react-dom';
3
+ import { importPanel } from '../util.js';
4
+ import { EventEmitter, toBoolean, parseXmlAsync, useMount } from '@apia/util';
5
+ import { useState, useEffect } from 'react';
6
+ import { PanelErrorBoundary } from '../splash/panels/PanelErrorBoundary.js';
7
+ import { PanelIdentifier } from '../splash/panels/PanelIdentifier.js';
8
+ import { firePanelAction } from '../actions/firePanelAction.js';
9
+ import { saveParameters } from '../config/saveParameters.js';
10
+ import { parametersStore } from '../config/parametersStore.js';
11
+ import { DashboardPanelContext } from './DashboardPanelContext.js';
12
+
13
+ var __defProp = Object.defineProperty;
14
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
15
+ var __publicField = (obj, key, value) => {
16
+ __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
17
+ return value;
18
+ };
19
+ var __accessCheck = (obj, member, msg) => {
20
+ if (!member.has(obj))
21
+ throw TypeError("Cannot " + msg);
22
+ };
23
+ var __privateGet = (obj, member, getter) => {
24
+ __accessCheck(obj, member, "read from private field");
25
+ return getter ? getter.call(obj) : member.get(obj);
26
+ };
27
+ var __privateAdd = (obj, member, value) => {
28
+ if (member.has(obj))
29
+ throw TypeError("Cannot add the same private member more than once");
30
+ member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
31
+ };
32
+ var _elements, _loaders;
33
+ const noData = { initialData: {} };
34
+ function parameterValue(value) {
35
+ if (value === "true")
36
+ return true;
37
+ if (value === "false")
38
+ return false;
39
+ return value;
40
+ }
41
+ class DashboardPanel extends EventEmitter {
42
+ constructor({
43
+ id,
44
+ dashboard,
45
+ PanelContainer: PanelContainer2
46
+ }) {
47
+ super();
48
+ __publicField(this, "dashboard");
49
+ __publicField(this, "hasInited", false);
50
+ __publicField(this, "hasLoaded", false);
51
+ __publicField(this, "id");
52
+ __publicField(this, "initialData", null);
53
+ __publicField(this, "isVisible", false);
54
+ __publicField(this, "isCollapsed", false);
55
+ __publicField(this, "portal");
56
+ __publicField(this, "props", {});
57
+ __privateAdd(this, _elements, {
58
+ props: () => {
59
+ const panelData = document.querySelector(
60
+ `panel-props[id="${this.id}"]`
61
+ );
62
+ if (!panelData) {
63
+ console.error("Panel with no id:", this.id);
64
+ throw new Error("A panel has no data element in the DOM.");
65
+ }
66
+ return panelData;
67
+ }
68
+ });
69
+ __privateAdd(this, _loaders, {
70
+ loadAll: () => {
71
+ void __privateGet(this, _loaders).initialData();
72
+ __privateGet(this, _loaders).parameters();
73
+ __privateGet(this, _loaders).props();
74
+ },
75
+ initialData: () => {
76
+ const panelContent = this.getContainer();
77
+ const xml = panelContent.innerHTML.replaceAll("&lt;", "<").replaceAll("&gt;", ">").replaceAll("&amp;", "&");
78
+ panelContent.innerHTML = "";
79
+ this.initialData = parseXmlAsync(xml.replace(/<!--?[^>]+>/, ""));
80
+ return this.initialData;
81
+ },
82
+ parameters: () => {
83
+ if (parametersStore.getState().panelParameters[this.id])
84
+ return;
85
+ const panelData = __privateGet(this, _elements).props();
86
+ const options = Object.fromEntries(
87
+ [...panelData.querySelectorAll("panel-option")].map(
88
+ (current) => {
89
+ return [
90
+ current.getAttribute("name"),
91
+ parameterValue(current.getAttribute("value"))
92
+ ];
93
+ }
94
+ )
95
+ );
96
+ const parameters = Object.fromEntries(
97
+ [...panelData.querySelectorAll("panel-parameter")].map(
98
+ (current) => {
99
+ return [
100
+ current.getAttribute("name"),
101
+ parameterValue(current.getAttribute("value"))
102
+ ];
103
+ }
104
+ )
105
+ );
106
+ saveParameters(this.id, Object.assign(options, parameters), false);
107
+ },
108
+ props: () => {
109
+ const panelData = __privateGet(this, _elements).props();
110
+ const panel = this.getContainer();
111
+ const props = {
112
+ id: this.id,
113
+ canMove: toBoolean(panelData.getAttribute("canMove")),
114
+ hasRss: toBoolean(panelData.getAttribute("hasRss")),
115
+ image: panelData.getAttribute("imagePath"),
116
+ isConfigurable: toBoolean(panelData.getAttribute("isConfigurable")),
117
+ isRefreshable: toBoolean(panelData.getAttribute("isRefreshable")),
118
+ name: panelData.getAttribute("name"),
119
+ refreshOnHome: toBoolean(panelData.getAttribute("refreshOnHome")),
120
+ refreshOnStart: toBoolean(panelData.getAttribute("refreshOnStart")),
121
+ showTitle: toBoolean(panelData.getAttribute("showTitle")),
122
+ title: panelData.getAttribute("title"),
123
+ type: panel.dataset.panel,
124
+ hideCollapse: toBoolean(panelData.getAttribute("hideCollapse"))
125
+ };
126
+ this.props = props;
127
+ }
128
+ });
129
+ __publicField(this, "fireAction", ({ action, ...parameters }, options) => {
130
+ if (!this.isVisible)
131
+ return new Promise((resolve) => resolve(null));
132
+ const postData = {};
133
+ Object.entries(parameters).forEach(([name, value]) => {
134
+ postData[`p_${name}`] = value;
135
+ });
136
+ return new Promise((resolve, reject) => {
137
+ firePanelAction(this.id, action, postData, {
138
+ ...options,
139
+ onComplete(hasSucceed, data) {
140
+ options?.onComplete?.(hasSucceed, data);
141
+ if (hasSucceed) {
142
+ resolve(data);
143
+ } else
144
+ reject();
145
+ }
146
+ });
147
+ });
148
+ });
149
+ __publicField(this, "PanelElement", ({
150
+ ActualPanelContainer,
151
+ Element
152
+ }) => {
153
+ const [resolvedInitialData, setResolvedInitialData] = useState(null);
154
+ const [isVisible, setIsVisible] = useState(this.isVisible);
155
+ const [isCollapsed, setIsCollapsed] = useState(this.isCollapsed);
156
+ useEffect(() => {
157
+ return this.on("isCollapsed", (ev) => setIsCollapsed(ev));
158
+ }, []);
159
+ useMount(() => {
160
+ void this.initialData?.then((data) => {
161
+ setResolvedInitialData(data ?? noData);
162
+ });
163
+ return this.on(
164
+ "isVisible",
165
+ (ev) => setIsVisible((current) => ev || current)
166
+ );
167
+ });
168
+ if (resolvedInitialData === null || resolvedInitialData === noData)
169
+ return null;
170
+ return /* @__PURE__ */ jsx(DashboardPanelContext.Provider, { value: this, children: /* @__PURE__ */ jsx(PanelIdentifier, { ...this.props, children: /* @__PURE__ */ jsx(
171
+ ActualPanelContainer,
172
+ {
173
+ ...this.props,
174
+ isCollapsed,
175
+ initialData: resolvedInitialData,
176
+ children: /* @__PURE__ */ jsx(
177
+ this.dashboard.bootstrapper.SuspendPanelUntilDashbordReady,
178
+ {
179
+ panelId: this.id,
180
+ children: /* @__PURE__ */ jsx(PanelErrorBoundary, { children: isVisible ? /* @__PURE__ */ jsx(Element, { initialData: resolvedInitialData }) : null })
181
+ }
182
+ )
183
+ }
184
+ ) }) });
185
+ });
186
+ this.dashboard = dashboard;
187
+ this.id = id;
188
+ __privateGet(this, _loaders).loadAll();
189
+ this.isCollapsed = toBoolean(
190
+ localStorage.getItem(
191
+ `${window.CURRENT_USER_LOGIN}_${window.CURRENT_DASH_ID}_${this.props.name}__isCollapsed`
192
+ )
193
+ );
194
+ this.portal = createPortal(
195
+ /* @__PURE__ */ jsx(
196
+ this.PanelElement,
197
+ {
198
+ ActualPanelContainer: PanelContainer2,
199
+ Element: importPanel(this.props.type)
200
+ }
201
+ ),
202
+ this.getContainer(),
203
+ this.id
204
+ );
205
+ }
206
+ collapse() {
207
+ this.isCollapsed = !this.isCollapsed;
208
+ localStorage.setItem(
209
+ `${window.CURRENT_USER_LOGIN}_${window.CURRENT_DASH_ID}_${this.props.name}__isCollapsed`,
210
+ String(this.isCollapsed)
211
+ );
212
+ this.emit("isCollapsed", this.isCollapsed);
213
+ }
214
+ getContainer() {
215
+ const panel = document.querySelector(
216
+ `[data-id="${this.id}"][data-panel]`
217
+ );
218
+ if (!panel) {
219
+ console.error("Panel not found in dom:", this.id);
220
+ throw new Error("Panel not found in DOM.");
221
+ }
222
+ return panel;
223
+ }
224
+ getParameters() {
225
+ return parametersStore.getState().panelParameters[this.id];
226
+ }
227
+ hide() {
228
+ const container = this.getContainer();
229
+ container.style.display = "none";
230
+ container.ariaHidden = "true";
231
+ this.isVisible = false;
232
+ this.emit("isVisible", this.isVisible);
233
+ }
234
+ refresh() {
235
+ if (this.dashboard.queueRefresh) {
236
+ return this.queuedRefresh();
237
+ } else {
238
+ return this.fireAction({ action: "refresh" });
239
+ }
240
+ }
241
+ queuedRefresh() {
242
+ return this.dashboard.tasksQueue.run(async () => {
243
+ const result = await this.fireAction({ action: "refresh" });
244
+ return result;
245
+ });
246
+ }
247
+ setHasLoaded() {
248
+ this.hasLoaded = true;
249
+ this.emit("hasLoaded", true);
250
+ }
251
+ show() {
252
+ const container = this.getContainer();
253
+ container.style.display = "block";
254
+ container.ariaHidden = "false";
255
+ this.hasInited = true;
256
+ this.isVisible = true;
257
+ this.emit("isVisible", this.isVisible);
258
+ }
259
+ }
260
+ _elements = new WeakMap();
261
+ _loaders = new WeakMap();
262
+
263
+ export { DashboardPanel };
264
+ //# sourceMappingURL=DashboardPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DashboardPanel.js","sources":["../../src/dashboard/DashboardPanel.tsx"],"sourcesContent":["import { createPortal } from 'react-dom';\r\nimport { Dashboard } from '.';\r\nimport { PanelContainer, TLoadedPanelProps } from '../types';\r\nimport { importPanel } from '../util';\r\nimport { EventEmitter, parseXmlAsync, toBoolean, useMount } from '@apia/util';\r\nimport { ReactPortal, useState, useEffect } from 'react';\r\nimport { PanelErrorBoundary } from '../splash/panels/PanelErrorBoundary';\r\nimport { PanelIdentifier } from '../splash/panels/PanelIdentifier';\r\nimport { firePanelAction } from '../actions/firePanelAction';\r\nimport { parametersStore, saveParameters } from '../config';\r\nimport { DashboardPanelContext } from './DashboardPanelContext';\r\nimport {\r\n TActionDispatcherOptions,\r\n TActionResult,\r\n} from '../actions/usePanelActions';\r\n\r\nconst noData = { initialData: {} };\r\n\r\ntype TPanelProps = Omit<TLoadedPanelProps, 'initialData'>;\r\nfunction parameterValue(value: string | boolean | number) {\r\n if (value === 'true') return true;\r\n if (value === 'false') return false;\r\n\r\n return value;\r\n}\r\n\r\nexport class DashboardPanel extends EventEmitter<{\r\n hasLoaded: boolean;\r\n isVisible: boolean;\r\n isCollapsed: boolean;\r\n}> {\r\n dashboard: Dashboard;\r\n hasInited = false;\r\n hasLoaded = false;\r\n id: string;\r\n initialData: Promise<unknown> | null = null;\r\n isVisible = false;\r\n isCollapsed = false;\r\n portal: ReactPortal;\r\n props: TPanelProps = {} as TPanelProps;\r\n\r\n constructor({\r\n id,\r\n dashboard,\r\n PanelContainer,\r\n }: {\r\n id: string;\r\n dashboard: Dashboard;\r\n PanelContainer: PanelContainer;\r\n }) {\r\n super();\r\n\r\n this.dashboard = dashboard;\r\n this.id = id;\r\n this.#loaders.loadAll();\r\n this.isCollapsed = toBoolean(\r\n localStorage.getItem(\r\n `${window.CURRENT_USER_LOGIN}_${window.CURRENT_DASH_ID}_${this.props.name}__isCollapsed`,\r\n ),\r\n );\r\n\r\n this.portal = createPortal(\r\n <this.PanelElement\r\n ActualPanelContainer={PanelContainer}\r\n Element={importPanel(this.props.type)}\r\n />,\r\n this.getContainer() as HTMLElement,\r\n this.id,\r\n );\r\n }\r\n\r\n #elements = {\r\n props: () => {\r\n const panelData = document.querySelector(\r\n `panel-props[id=\"${this.id as string}\"]`,\r\n ) as HTMLElement | null;\r\n\r\n if (!panelData) {\r\n console.error('Panel with no id:', this.id);\r\n throw new Error('A panel has no data element in the DOM.');\r\n }\r\n\r\n return panelData;\r\n },\r\n };\r\n\r\n collapse() {\r\n this.isCollapsed = !this.isCollapsed;\r\n localStorage.setItem(\r\n `${window.CURRENT_USER_LOGIN}_${window.CURRENT_DASH_ID}_${this.props.name}__isCollapsed`,\r\n String(this.isCollapsed),\r\n );\r\n this.emit('isCollapsed', this.isCollapsed);\r\n }\r\n\r\n #loaders = {\r\n loadAll: () => {\r\n void this.#loaders.initialData();\r\n this.#loaders.parameters();\r\n this.#loaders.props();\r\n },\r\n initialData: () => {\r\n const panelContent = this.getContainer();\r\n const xml = panelContent.innerHTML\r\n .replaceAll('&lt;', '<')\r\n .replaceAll('&gt;', '>')\r\n .replaceAll('&amp;', '&');\r\n panelContent.innerHTML = '';\r\n\r\n this.initialData = parseXmlAsync(xml.replace(/<!--?[^>]+>/, ''));\r\n\r\n return this.initialData;\r\n },\r\n parameters: () => {\r\n if ((parametersStore.getState() as any).panelParameters[this.id]) return;\r\n\r\n const panelData = this.#elements.props();\r\n\r\n const options = Object.fromEntries(\r\n [...panelData.querySelectorAll<HTMLElement>('panel-option')].map(\r\n (current) => {\r\n return [\r\n current.getAttribute('name') as string,\r\n parameterValue(current.getAttribute('value') as string),\r\n ];\r\n },\r\n ),\r\n );\r\n\r\n const parameters = Object.fromEntries(\r\n [...panelData.querySelectorAll<HTMLElement>('panel-parameter')].map(\r\n (current) => {\r\n return [\r\n current.getAttribute('name') as string,\r\n parameterValue(current.getAttribute('value') as string),\r\n ];\r\n },\r\n ),\r\n );\r\n\r\n saveParameters(this.id, Object.assign(options, parameters), false);\r\n },\r\n props: () => {\r\n const panelData = this.#elements.props();\r\n const panel = this.getContainer();\r\n\r\n const props: Omit<TLoadedPanelProps, 'initialData'> = {\r\n id: this.id,\r\n canMove: toBoolean(panelData.getAttribute('canMove')),\r\n hasRss: toBoolean(panelData.getAttribute('hasRss')),\r\n image: panelData.getAttribute('imagePath') as string,\r\n isConfigurable: toBoolean(panelData.getAttribute('isConfigurable')),\r\n isRefreshable: toBoolean(panelData.getAttribute('isRefreshable')),\r\n name: panelData.getAttribute('name') as string,\r\n refreshOnHome: toBoolean(panelData.getAttribute('refreshOnHome')),\r\n refreshOnStart: toBoolean(panelData.getAttribute('refreshOnStart')),\r\n showTitle: toBoolean(panelData.getAttribute('showTitle')),\r\n title: panelData.getAttribute('title') as string,\r\n type: panel.dataset.panel as string,\r\n hideCollapse: toBoolean(panelData.getAttribute('hideCollapse')),\r\n };\r\n\r\n this.props = props;\r\n },\r\n };\r\n\r\n fireAction: (\r\n { action, ...parameters }: { action: string } & Record<string, unknown>,\r\n options?: TActionDispatcherOptions,\r\n ) => Promise<TActionResult> = ({ action, ...parameters }, options) => {\r\n if (!this.isVisible) return new Promise((resolve) => resolve(null));\r\n\r\n const postData: Record<string, unknown> = {};\r\n\r\n Object.entries(parameters).forEach(([name, value]) => {\r\n postData[`p_${name}`] = value;\r\n });\r\n\r\n return new Promise<TActionResult>((resolve, reject) => {\r\n firePanelAction(this.id, action, postData, {\r\n ...options,\r\n onComplete(hasSucceed, data) {\r\n options?.onComplete?.(hasSucceed, data);\r\n if (hasSucceed) {\r\n resolve(data);\r\n } else reject();\r\n },\r\n });\r\n });\r\n };\r\n\r\n getContainer() {\r\n const panel = document.querySelector(\r\n `[data-id=\"${this.id}\"][data-panel]`,\r\n ) as HTMLElement;\r\n\r\n if (!panel) {\r\n console.error('Panel not found in dom:', this.id);\r\n throw new Error('Panel not found in DOM.');\r\n }\r\n\r\n return panel;\r\n }\r\n\r\n getParameters() {\r\n return (parametersStore.getState() as any).panelParameters[this.id];\r\n }\r\n\r\n hide() {\r\n const container = this.getContainer();\r\n container.style.display = 'none';\r\n container.ariaHidden = 'true';\r\n\r\n this.isVisible = false;\r\n this.emit('isVisible', this.isVisible);\r\n }\r\n\r\n refresh() {\r\n if (this.dashboard.queueRefresh) {\r\n return this.queuedRefresh();\r\n } else {\r\n return this.fireAction({ action: 'refresh' });\r\n }\r\n }\r\n\r\n queuedRefresh() {\r\n return this.dashboard.tasksQueue.run(async () => {\r\n const result = await this.fireAction({ action: 'refresh' });\r\n return result;\r\n });\r\n }\r\n\r\n setHasLoaded() {\r\n this.hasLoaded = true;\r\n this.emit('hasLoaded', true);\r\n }\r\n\r\n show() {\r\n const container = this.getContainer();\r\n container.style.display = 'block';\r\n container.ariaHidden = 'false';\r\n\r\n this.hasInited = true;\r\n this.isVisible = true;\r\n this.emit('isVisible', this.isVisible);\r\n }\r\n\r\n PanelElement = ({\r\n ActualPanelContainer,\r\n Element,\r\n }: {\r\n ActualPanelContainer: PanelContainer;\r\n Element: ReturnType<typeof importPanel>;\r\n }) => {\r\n const [resolvedInitialData, setResolvedInitialData] = useState<{\r\n initialData: unknown;\r\n } | null>(null);\r\n const [isVisible, setIsVisible] = useState(this.isVisible);\r\n const [isCollapsed, setIsCollapsed] = useState(this.isCollapsed);\r\n\r\n useEffect(() => {\r\n return this.on('isCollapsed', (ev) => setIsCollapsed(ev));\r\n }, []);\r\n\r\n useMount(() => {\r\n void this.initialData?.then((data) => {\r\n setResolvedInitialData((data ?? noData) as { initialData: unknown });\r\n });\r\n\r\n return this.on('isVisible', (ev) =>\r\n setIsVisible((current) => ev || current),\r\n );\r\n });\r\n\r\n if (resolvedInitialData === null || resolvedInitialData === noData)\r\n return null;\r\n\r\n return (\r\n <DashboardPanelContext.Provider value={this}>\r\n <PanelIdentifier {...this.props}>\r\n <ActualPanelContainer\r\n {...this.props}\r\n isCollapsed={isCollapsed}\r\n initialData={resolvedInitialData}\r\n >\r\n <this.dashboard.bootstrapper.SuspendPanelUntilDashbordReady\r\n panelId={this.id}\r\n >\r\n <PanelErrorBoundary>\r\n {isVisible ? (\r\n <Element initialData={resolvedInitialData} />\r\n ) : null}\r\n </PanelErrorBoundary>\r\n </this.dashboard.bootstrapper.SuspendPanelUntilDashbordReady>\r\n </ActualPanelContainer>\r\n </PanelIdentifier>\r\n </DashboardPanelContext.Provider>\r\n );\r\n };\r\n}\r\n"],"names":["PanelContainer"],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { DashboardPanel } from './DashboardPanel.js';
2
+
3
+ declare function useDashboardPanel(): DashboardPanel;
4
+
5
+ export { useDashboardPanel };
6
+ //# sourceMappingURL=DashboardPanelContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DashboardPanelContext.d.ts","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ import { useContext, createContext } from 'react';
2
+
3
+ const DashboardPanelContext = createContext(null);
4
+ function useDashboardPanel() {
5
+ const context = useContext(DashboardPanelContext);
6
+ if (!context)
7
+ throw new Error("There is no DashboardPanelContext");
8
+ return context;
9
+ }
10
+
11
+ export { DashboardPanelContext, useDashboardPanel };
12
+ //# sourceMappingURL=DashboardPanelContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DashboardPanelContext.js","sources":["../../src/dashboard/DashboardPanelContext.tsx"],"sourcesContent":["import { createContext, useContext } from 'react';\r\nimport { DashboardPanel } from './DashboardPanel';\r\n\r\nexport const DashboardPanelContext = createContext<DashboardPanel | null>(null);\r\n\r\nexport function useDashboardPanel() {\r\n const context = useContext(DashboardPanelContext);\r\n\r\n if (!context) throw new Error('There is no DashboardPanelContext');\r\n\r\n return context;\r\n}\r\n"],"names":[],"mappings":";;AAGO,MAAM,qBAAA,GAAwB,cAAqC,IAAI;AAEvE,SAAS,iBAAA,GAAoB;AAClC,EAAA,MAAM,OAAA,GAAU,WAAW,qBAAqB,CAAA;AAEhD,EAAA,IAAI,CAAC,OAAA;AAAS,IAAA,MAAM,IAAI,MAAM,mCAAmC,CAAA;AAEjE,EAAA,OAAO,OAAA;AACT;;;;"}
@@ -0,0 +1,33 @@
1
+ import * as react from 'react';
2
+ import { ReactNode } from 'react';
3
+ import { Dashboard } from './dashboard.js';
4
+
5
+ declare global {
6
+ interface Window {
7
+ DASH_COURTAIN_TRESHOLD?: number;
8
+ }
9
+ }
10
+ declare class DashboardPanelsBootstraper {
11
+ #private;
12
+ dashboard: Dashboard;
13
+ constructor(dashboard: Dashboard);
14
+ /**
15
+ * El bootstraper se basa en dos elementos: setHasLoadedInitialData y
16
+ * SuspendPanelUntilDashboardReady.
17
+ *
18
+ * El funcionamiento es muy elemental: Cada panel utiliza el Suspend como
19
+ * wrapper y éste registra el id del panel en un array de paneles pendientes
20
+ * por cargar.
21
+ *
22
+ * Una vez que todos los paneles cargaron, el suspense retoma su tarea y
23
+ * renderiza el panel normalmente.
24
+ */
25
+ setPanelHasLoaded: (panelId: string) => void;
26
+ SuspendPanelUntilDashbordReady: ({ children, panelId, }: {
27
+ children: ReactNode;
28
+ panelId: string;
29
+ }) => react.JSX.Element;
30
+ }
31
+
32
+ export { DashboardPanelsBootstraper };
33
+ //# sourceMappingURL=DashboardPanelsBootstraper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DashboardPanelsBootstraper.d.ts","sources":[],"sourcesContent":[],"names":[],"mappings":""}