@grafana/scenes 0.17.0 → 0.17.1

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.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ # v0.17.1 (Wed Jun 21 2023)
2
+
3
+ #### 🐛 Bug Fix
4
+
5
+ - PanelBuilders: Add method for setting behaviors [#235](https://github.com/grafana/scenes/pull/235) ([@dprokop](https://github.com/dprokop))
6
+ - SplitLayout: Add Splitter and SplitLayout [#229](https://github.com/grafana/scenes/pull/229) ([@kaydelaney](https://github.com/kaydelaney) [@dprokop](https://github.com/dprokop))
7
+
8
+ #### Authors: 2
9
+
10
+ - Dominik Prokop ([@dprokop](https://github.com/dprokop))
11
+ - kay delaney ([@kaydelaney](https://github.com/kaydelaney))
12
+
13
+ ---
14
+
1
15
  # v0.17.0 (Mon Jun 19 2023)
2
16
 
3
17
  #### 🚀 Enhancement
@@ -0,0 +1,17 @@
1
+ import { SceneObjectBase } from '../../../core/SceneObjectBase.js';
2
+ import { SplitLayoutRenderer } from './SplitLayoutRenderer.js';
3
+
4
+ class SplitLayout extends SceneObjectBase {
5
+ toggleDirection() {
6
+ this.setState({
7
+ direction: this.state.direction === "row" ? "column" : "row"
8
+ });
9
+ }
10
+ isDraggable() {
11
+ return false;
12
+ }
13
+ }
14
+ SplitLayout.Component = SplitLayoutRenderer;
15
+
16
+ export { SplitLayout };
17
+ //# sourceMappingURL=SplitLayout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SplitLayout.js","sources":["../../../../../src/components/layout/split/SplitLayout.ts"],"sourcesContent":["import { SceneObjectBase } from '../../../core/SceneObjectBase';\nimport { SceneObjectState } from '../../../core/types';\nimport { SceneFlexItemPlacement, SceneFlexItemLike } from '../SceneFlexLayout';\nimport { SplitLayoutRenderer } from './SplitLayoutRenderer';\n\ninterface SplitLayoutState extends SceneObjectState, SceneFlexItemPlacement {\n primary: SceneFlexItemLike;\n secondary: SceneFlexItemLike;\n direction: 'row' | 'column';\n}\n\nexport class SplitLayout extends SceneObjectBase<SplitLayoutState> {\n public static Component = SplitLayoutRenderer;\n\n public toggleDirection() {\n this.setState({\n direction: this.state.direction === 'row' ? 'column' : 'row',\n });\n }\n\n public isDraggable(): boolean {\n return false;\n }\n}\n"],"names":[],"mappings":";;;AAWO,MAAM,oBAAoB,eAAkC,CAAA;AAAA,EAG1D,eAAkB,GAAA;AACvB,IAAA,IAAA,CAAK,QAAS,CAAA;AAAA,MACZ,SAAW,EAAA,IAAA,CAAK,KAAM,CAAA,SAAA,KAAc,QAAQ,QAAW,GAAA,KAAA;AAAA,KACxD,CAAA,CAAA;AAAA,GACH;AAAA,EAEO,WAAuB,GAAA;AAC5B,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AACF,CAAA;AAZa,WAAA,CACG,SAAY,GAAA,mBAAA;;;;"}
@@ -0,0 +1,25 @@
1
+ import React from 'react';
2
+ import { Splitter } from './Splitter.js';
3
+
4
+ function SplitLayoutRenderer({ model }) {
5
+ const { primary, secondary, direction, isHidden } = model.useState();
6
+ if (isHidden) {
7
+ return null;
8
+ }
9
+ const Prim = primary.Component;
10
+ const Sec = secondary.Component;
11
+ return /* @__PURE__ */ React.createElement(Splitter, {
12
+ direction
13
+ }, /* @__PURE__ */ React.createElement(Prim, {
14
+ key: primary.state.key,
15
+ model: primary,
16
+ parentState: model.state
17
+ }), /* @__PURE__ */ React.createElement(Sec, {
18
+ key: secondary.state.key,
19
+ model: secondary,
20
+ parentState: model.state
21
+ }));
22
+ }
23
+
24
+ export { SplitLayoutRenderer };
25
+ //# sourceMappingURL=SplitLayoutRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SplitLayoutRenderer.js","sources":["../../../../../src/components/layout/split/SplitLayoutRenderer.tsx"],"sourcesContent":["import React, { ComponentType } from 'react';\n\nimport { SceneComponentProps, SceneObjectState, SceneObject } from '../../../core/types';\nimport { SceneFlexItemPlacement } from '../SceneFlexLayout';\nimport { SplitLayout } from './SplitLayout';\nimport { Splitter } from './Splitter';\n\n\nexport function SplitLayoutRenderer({ model }: SceneFlexItemRenderProps<SplitLayout>) {\n const { primary, secondary, direction, isHidden } = model.useState();\n\n if (isHidden) {\n return null;\n }\n\n const Prim = primary.Component as ComponentType<SceneFlexItemRenderProps<SceneObject>>;\n const Sec = secondary.Component as ComponentType<SceneFlexItemRenderProps<SceneObject>>;\n return (\n <Splitter direction={direction}>\n <Prim key={primary.state.key} model={primary} parentState={model.state} />\n <Sec key={secondary.state.key} model={secondary} parentState={model.state} />\n </Splitter>\n );\n}\n\nexport interface SceneFlexItemState extends SceneFlexItemPlacement, SceneObjectState {\n body: SceneObject | undefined;\n}\n\ninterface SceneFlexItemRenderProps<T> extends SceneComponentProps<T> {\n parentState?: SceneFlexItemPlacement;\n}\n"],"names":[],"mappings":";;;AAQgB,SAAA,mBAAA,CAAoB,EAAE,KAAA,EAAgD,EAAA;AACpF,EAAA,MAAM,EAAE,OAAS,EAAA,SAAA,EAAW,WAAW,QAAS,EAAA,GAAI,MAAM,QAAS,EAAA,CAAA;AAEnE,EAAA,IAAI,QAAU,EAAA;AACZ,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAEA,EAAA,MAAM,OAAO,OAAQ,CAAA,SAAA,CAAA;AACrB,EAAA,MAAM,MAAM,SAAU,CAAA,SAAA,CAAA;AACtB,EAAA,uBACG,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA;AAAA,IAAS,SAAA;AAAA,GAAA,kBACP,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA;AAAA,IAAK,GAAA,EAAK,QAAQ,KAAM,CAAA,GAAA;AAAA,IAAK,KAAO,EAAA,OAAA;AAAA,IAAS,aAAa,KAAM,CAAA,KAAA;AAAA,GAAO,mBACvE,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA;AAAA,IAAI,GAAA,EAAK,UAAU,KAAM,CAAA,GAAA;AAAA,IAAK,KAAO,EAAA,SAAA;AAAA,IAAW,aAAa,KAAM,CAAA,KAAA;AAAA,GAAO,CAC7E,CAAA,CAAA;AAEJ;;;;"}
@@ -0,0 +1,375 @@
1
+ import { cx, css } from '@emotion/css';
2
+ import { useStyles2 } from '@grafana/ui';
3
+ import { clamp, throttle } from 'lodash';
4
+ import React, { useRef, useCallback, useLayoutEffect } from 'react';
5
+ import { useUniqueId } from '../grid/LazyLoader.js';
6
+
7
+ var __defProp = Object.defineProperty;
8
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
9
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
10
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
11
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
12
+ var __spreadValues = (a, b) => {
13
+ for (var prop in b || (b = {}))
14
+ if (__hasOwnProp.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ if (__getOwnPropSymbols)
17
+ for (var prop of __getOwnPropSymbols(b)) {
18
+ if (__propIsEnum.call(b, prop))
19
+ __defNormalProp(a, prop, b[prop]);
20
+ }
21
+ return a;
22
+ };
23
+ const PIXELS_PER_MS = 0.3;
24
+ const VERTICAL_KEYS = /* @__PURE__ */ new Set(["ArrowUp", "ArrowDown"]);
25
+ const HORIZONTAL_KEYS = /* @__PURE__ */ new Set(["ArrowLeft", "ArrowRight"]);
26
+ const propsForDirection = {
27
+ row: {
28
+ dim: "width",
29
+ axis: "clientX",
30
+ min: "minWidth",
31
+ max: "maxWidth"
32
+ },
33
+ column: {
34
+ dim: "height",
35
+ axis: "clientY",
36
+ min: "minHeight",
37
+ max: "maxHeight"
38
+ }
39
+ };
40
+ function Splitter({
41
+ direction = "row",
42
+ handleSize = 32,
43
+ initialSize = "auto",
44
+ primaryPaneStyles,
45
+ secondaryPaneStyles,
46
+ onDragFinished,
47
+ children
48
+ }) {
49
+ const kids = React.Children.toArray(children);
50
+ const splitterRef = useRef(null);
51
+ const firstPaneRef = useRef(null);
52
+ const secondPaneRef = useRef(null);
53
+ const containerRef = useRef(null);
54
+ const containerSize = useRef(null);
55
+ const primarySizeRef = useRef("1fr");
56
+ const firstPaneMeasurements = useRef(void 0);
57
+ const savedPos = useRef(void 0);
58
+ const measurementProp = propsForDirection[direction].dim;
59
+ const clientAxis = propsForDirection[direction].axis;
60
+ const minDimProp = propsForDirection[direction].min;
61
+ const maxDimProp = propsForDirection[direction].max;
62
+ useResizeObserver(
63
+ containerRef.current,
64
+ (entries) => {
65
+ for (const entry of entries) {
66
+ if (!entry.target.isSameNode(containerRef.current)) {
67
+ return;
68
+ }
69
+ const curSize = firstPaneRef.current.getBoundingClientRect()[measurementProp];
70
+ const newDims = measureElement(firstPaneRef.current);
71
+ splitterRef.current.ariaValueNow = `${clamp(
72
+ (curSize - newDims[minDimProp]) / (newDims[maxDimProp] - newDims[minDimProp]) * 100,
73
+ 0,
74
+ 100
75
+ )}`;
76
+ }
77
+ },
78
+ 500,
79
+ [maxDimProp, minDimProp, direction, measurementProp]
80
+ );
81
+ const dragStart = useRef(null);
82
+ const onPointerDown = useCallback(
83
+ (e) => {
84
+ primarySizeRef.current = firstPaneRef.current.getBoundingClientRect()[measurementProp];
85
+ containerSize.current = containerRef.current.getBoundingClientRect()[measurementProp];
86
+ dragStart.current = e[clientAxis];
87
+ splitterRef.current.setPointerCapture(e.pointerId);
88
+ firstPaneMeasurements.current = measureElement(firstPaneRef.current);
89
+ savedPos.current = void 0;
90
+ },
91
+ [measurementProp, clientAxis]
92
+ );
93
+ const onPointerMove = useCallback(
94
+ (e) => {
95
+ if (dragStart.current !== null && primarySizeRef.current !== "1fr") {
96
+ const diff = e[clientAxis] - dragStart.current;
97
+ const dims = firstPaneMeasurements.current;
98
+ const newSize = clamp(primarySizeRef.current + diff, dims[minDimProp], dims[maxDimProp]);
99
+ const newFlex = newSize / (containerSize.current - handleSize);
100
+ firstPaneRef.current.style.flexGrow = `${newFlex}`;
101
+ secondPaneRef.current.style.flexGrow = `${1 - newFlex}`;
102
+ const ariaValueNow = clamp(
103
+ (newSize - dims[minDimProp]) / (dims[maxDimProp] - dims[minDimProp]) * 100,
104
+ 0,
105
+ 100
106
+ );
107
+ splitterRef.current.ariaValueNow = `${ariaValueNow}`;
108
+ }
109
+ },
110
+ [handleSize, clientAxis, minDimProp, maxDimProp]
111
+ );
112
+ const onPointerUp = useCallback(
113
+ (e) => {
114
+ e.preventDefault();
115
+ e.stopPropagation();
116
+ splitterRef.current.releasePointerCapture(e.pointerId);
117
+ dragStart.current = null;
118
+ onDragFinished == null ? void 0 : onDragFinished(parseFloat(firstPaneRef.current.style.flexGrow));
119
+ },
120
+ [onDragFinished]
121
+ );
122
+ const pressedKeys = useRef(/* @__PURE__ */ new Set());
123
+ const keysLastHandledAt = useRef(null);
124
+ const handlePressedKeys = useCallback(
125
+ (time) => {
126
+ var _a;
127
+ const nothingPressed = pressedKeys.current.size === 0;
128
+ if (nothingPressed) {
129
+ keysLastHandledAt.current = null;
130
+ return;
131
+ } else if (primarySizeRef.current === "1fr") {
132
+ return;
133
+ }
134
+ const dt = time - ((_a = keysLastHandledAt.current) != null ? _a : time);
135
+ const dx = dt * PIXELS_PER_MS;
136
+ let sizeChange = 0;
137
+ if (direction === "row") {
138
+ if (pressedKeys.current.has("ArrowLeft")) {
139
+ sizeChange -= dx;
140
+ }
141
+ if (pressedKeys.current.has("ArrowRight")) {
142
+ sizeChange += dx;
143
+ }
144
+ } else {
145
+ if (pressedKeys.current.has("ArrowUp")) {
146
+ sizeChange -= dx;
147
+ }
148
+ if (pressedKeys.current.has("ArrowDown")) {
149
+ sizeChange += dx;
150
+ }
151
+ }
152
+ const firstPaneDims = firstPaneMeasurements.current;
153
+ const curSize = firstPaneRef.current.getBoundingClientRect()[measurementProp];
154
+ const newSize = clamp(curSize + sizeChange, firstPaneDims[minDimProp], firstPaneDims[maxDimProp]);
155
+ const newFlex = newSize / (containerSize.current - handleSize);
156
+ firstPaneRef.current.style.flexGrow = `${newFlex}`;
157
+ secondPaneRef.current.style.flexGrow = `${1 - newFlex}`;
158
+ const ariaValueNow = (newSize - firstPaneDims[minDimProp]) / (firstPaneDims[maxDimProp] - firstPaneDims[minDimProp]) * 100;
159
+ splitterRef.current.ariaValueNow = `${clamp(ariaValueNow, 0, 100)}`;
160
+ keysLastHandledAt.current = time;
161
+ window.requestAnimationFrame(handlePressedKeys);
162
+ },
163
+ [direction, handleSize, minDimProp, maxDimProp, measurementProp]
164
+ );
165
+ const onKeyDown = useCallback(
166
+ (e) => {
167
+ if (e.key === "Enter") {
168
+ if (savedPos.current === void 0) {
169
+ savedPos.current = firstPaneRef.current.style.flexGrow;
170
+ firstPaneRef.current.style.flexGrow = "0";
171
+ secondPaneRef.current.style.flexGrow = "1";
172
+ } else {
173
+ firstPaneRef.current.style.flexGrow = savedPos.current;
174
+ secondPaneRef.current.style.flexGrow = `${1 - parseFloat(savedPos.current)}`;
175
+ savedPos.current = void 0;
176
+ }
177
+ return;
178
+ } else if (e.key === "Home") {
179
+ firstPaneMeasurements.current = measureElement(firstPaneRef.current);
180
+ containerSize.current = containerRef.current.getBoundingClientRect()[measurementProp];
181
+ const newFlex = firstPaneMeasurements.current[minDimProp] / (containerSize.current - handleSize);
182
+ firstPaneRef.current.style.flexGrow = `${newFlex}`;
183
+ secondPaneRef.current.style.flexGrow = `${1 - newFlex}`;
184
+ splitterRef.current.ariaValueNow = "0";
185
+ return;
186
+ } else if (e.key === "End") {
187
+ firstPaneMeasurements.current = measureElement(firstPaneRef.current);
188
+ containerSize.current = containerRef.current.getBoundingClientRect()[measurementProp];
189
+ const newFlex = firstPaneMeasurements.current[maxDimProp] / (containerSize.current - handleSize);
190
+ firstPaneRef.current.style.flexGrow = `${newFlex}`;
191
+ secondPaneRef.current.style.flexGrow = `${1 - newFlex}`;
192
+ splitterRef.current.ariaValueNow = "100";
193
+ return;
194
+ }
195
+ if (!(direction === "column" && VERTICAL_KEYS.has(e.key) || direction === "row" && HORIZONTAL_KEYS.has(e.key)) || pressedKeys.current.has(e.key)) {
196
+ return;
197
+ }
198
+ savedPos.current = void 0;
199
+ e.preventDefault();
200
+ e.stopPropagation();
201
+ primarySizeRef.current = firstPaneRef.current.getBoundingClientRect()[measurementProp];
202
+ containerSize.current = containerRef.current.getBoundingClientRect()[measurementProp];
203
+ firstPaneMeasurements.current = measureElement(firstPaneRef.current);
204
+ const newKey = !pressedKeys.current.has(e.key);
205
+ if (newKey) {
206
+ const initiateAnimationLoop = pressedKeys.current.size === 0;
207
+ pressedKeys.current.add(e.key);
208
+ if (initiateAnimationLoop) {
209
+ window.requestAnimationFrame(handlePressedKeys);
210
+ }
211
+ }
212
+ },
213
+ [direction, handlePressedKeys, handleSize, maxDimProp, measurementProp, minDimProp]
214
+ );
215
+ const onKeyUp = useCallback(
216
+ (e) => {
217
+ if (direction === "row" && !HORIZONTAL_KEYS.has(e.key) || direction === "column" && !VERTICAL_KEYS.has(e.key)) {
218
+ return;
219
+ }
220
+ pressedKeys.current.delete(e.key);
221
+ onDragFinished == null ? void 0 : onDragFinished(parseFloat(firstPaneRef.current.style.flexGrow));
222
+ },
223
+ [direction, onDragFinished]
224
+ );
225
+ const onDoubleClick = useCallback(() => {
226
+ firstPaneRef.current.style.flexGrow = "0.5";
227
+ secondPaneRef.current.style.flexGrow = "0.5";
228
+ const dim = measureElement(firstPaneRef.current);
229
+ firstPaneMeasurements.current = dim;
230
+ primarySizeRef.current = firstPaneRef.current.getBoundingClientRect()[measurementProp];
231
+ splitterRef.current.ariaValueNow = `${(primarySizeRef.current - dim[minDimProp]) / (dim[maxDimProp] - dim[minDimProp]) * 100}`;
232
+ }, [maxDimProp, measurementProp, minDimProp]);
233
+ const styles = useStyles2(getStyles);
234
+ const id = useUniqueId();
235
+ return /* @__PURE__ */ React.createElement("div", {
236
+ ref: containerRef,
237
+ className: styles.container,
238
+ style: {
239
+ flexDirection: direction
240
+ }
241
+ }, /* @__PURE__ */ React.createElement("div", {
242
+ ref: firstPaneRef,
243
+ className: styles.panel,
244
+ style: __spreadValues({
245
+ flexGrow: initialSize === "auto" ? 0.5 : clamp(initialSize, 0, 1),
246
+ [minDimProp]: "min-content"
247
+ }, primaryPaneStyles),
248
+ id: `start-panel-${id}`
249
+ }, kids[0]), /* @__PURE__ */ React.createElement("div", {
250
+ ref: splitterRef,
251
+ style: { [measurementProp]: `${handleSize}px` },
252
+ className: cx(styles.handle, { [styles.handleHorizontal]: direction === "column" }),
253
+ onPointerUp,
254
+ onPointerDown,
255
+ onPointerMove,
256
+ onKeyDown,
257
+ onKeyUp,
258
+ onDoubleClick,
259
+ role: "separator",
260
+ "aria-valuemin": 0,
261
+ "aria-valuemax": 100,
262
+ "aria-valuenow": 50,
263
+ "aria-controls": `start-panel-${id}`,
264
+ "aria-label": "Pane resize widget",
265
+ tabIndex: 0
266
+ }), /* @__PURE__ */ React.createElement("div", {
267
+ ref: secondPaneRef,
268
+ className: styles.panel,
269
+ style: __spreadValues({
270
+ flexGrow: initialSize === "auto" ? 0.5 : clamp(1 - initialSize, 0, 1),
271
+ [minDimProp]: "min-content"
272
+ }, secondaryPaneStyles),
273
+ id: `end-panel-${id}`
274
+ }, kids[1]));
275
+ }
276
+ function getStyles(theme) {
277
+ return {
278
+ handle: css({
279
+ cursor: "col-resize",
280
+ position: "relative",
281
+ flexShrink: 0,
282
+ userSelect: "none",
283
+ "&::before": {
284
+ content: '""',
285
+ position: "absolute",
286
+ backgroundColor: theme.colors.primary.main,
287
+ left: "50%",
288
+ transform: "translate(-50%)",
289
+ top: 0,
290
+ height: "100%",
291
+ width: "1px",
292
+ opacity: 0,
293
+ transition: "opacity ease-in-out 0.2s"
294
+ },
295
+ "&::after": {
296
+ content: '""',
297
+ width: "4px",
298
+ borderRadius: "4px",
299
+ backgroundColor: theme.colors.border.weak,
300
+ transition: "background-color ease-in-out 0.2s",
301
+ height: "50%",
302
+ top: "calc(50% - (50%) / 2)",
303
+ transform: "translateX(-50%)",
304
+ position: "absolute",
305
+ left: "50%"
306
+ },
307
+ "&:hover, &:focus-visible": {
308
+ outline: "none",
309
+ "&::before": {
310
+ opacity: 1
311
+ },
312
+ "&::after": {
313
+ backgroundColor: theme.colors.primary.main
314
+ }
315
+ }
316
+ }),
317
+ handleHorizontal: css({
318
+ cursor: "row-resize",
319
+ "&::before": {
320
+ left: "inherit",
321
+ transform: "translateY(-50%)",
322
+ top: "50%",
323
+ height: "1px",
324
+ width: "100%"
325
+ },
326
+ "&::after": {
327
+ width: "50%",
328
+ height: "4px",
329
+ top: "50%",
330
+ transform: "translateY(-50%)",
331
+ left: "calc(50% - (50%) / 2)"
332
+ }
333
+ }),
334
+ container: css({
335
+ display: "flex",
336
+ width: "100%",
337
+ flexGrow: 1,
338
+ overflow: "hidden"
339
+ }),
340
+ panel: css({ display: "flex", overflow: "hidden", position: "relative", flexBasis: 0 })
341
+ };
342
+ }
343
+ function measureElement(ref) {
344
+ if (ref === null) {
345
+ return void 0;
346
+ }
347
+ const savedBodyOverflow = document.body.style.overflow;
348
+ const savedWidth = ref.style.width;
349
+ const savedHeight = ref.style.height;
350
+ const savedFlex = ref.style.flexGrow;
351
+ document.body.style.overflow = "hidden";
352
+ ref.style.flexGrow = "0";
353
+ const { width: minWidth, height: minHeight } = ref.getBoundingClientRect();
354
+ ref.style.flexGrow = "100";
355
+ const { width: maxWidth, height: maxHeight } = ref.getBoundingClientRect();
356
+ document.body.style.overflow = savedBodyOverflow;
357
+ ref.style.width = savedWidth;
358
+ ref.style.height = savedHeight;
359
+ ref.style.flexGrow = savedFlex;
360
+ return { minWidth, maxWidth, minHeight, maxHeight };
361
+ }
362
+ function useResizeObserver(target, cb, throttleWait = 0, deps) {
363
+ const throttledCallback = throttle(cb, throttleWait);
364
+ useLayoutEffect(() => {
365
+ if (!target) {
366
+ return;
367
+ }
368
+ const resizeObserver = new ResizeObserver(throttledCallback);
369
+ resizeObserver.observe(target, { box: "device-pixel-content-box" });
370
+ return () => resizeObserver.disconnect();
371
+ }, deps);
372
+ }
373
+
374
+ export { Splitter };
375
+ //# sourceMappingURL=Splitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Splitter.js","sources":["../../../../../src/components/layout/split/Splitter.tsx"],"sourcesContent":["import { css, cx } from '@emotion/css';\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\nimport { clamp, throttle } from 'lodash';\nimport React, { useCallback, useLayoutEffect, useRef } from 'react';\nimport { useUniqueId } from '../grid/LazyLoader';\n\ninterface Props {\n handleSize?: number;\n initialSize?: number | 'auto';\n direction?: 'row' | 'column';\n primary?: 'first' | 'second';\n collapsedDefault?: boolean;\n primaryPaneStyles?: React.CSSProperties;\n secondaryPaneStyles?: React.CSSProperties;\n onDragFinished?: (size: number) => void;\n children: [React.ReactNode, React.ReactNode];\n}\n\nconst PIXELS_PER_MS = 0.3 as const;\nconst VERTICAL_KEYS = new Set(['ArrowUp', 'ArrowDown']);\nconst HORIZONTAL_KEYS = new Set(['ArrowLeft', 'ArrowRight']);\n\nconst propsForDirection = {\n row: {\n dim: 'width',\n axis: 'clientX',\n min: 'minWidth',\n max: 'maxWidth',\n },\n column: {\n dim: 'height',\n axis: 'clientY',\n min: 'minHeight',\n max: 'maxHeight',\n },\n} as const;\n\nexport function Splitter({\n direction = 'row',\n handleSize = 32,\n initialSize = 'auto',\n primaryPaneStyles,\n secondaryPaneStyles,\n onDragFinished,\n children,\n}: Props) {\n const kids = React.Children.toArray(children);\n\n const splitterRef = useRef<HTMLDivElement | null>(null);\n const firstPaneRef = useRef<HTMLDivElement | null>(null);\n const secondPaneRef = useRef<HTMLDivElement | null>(null);\n const containerRef = useRef<HTMLDivElement | null>(null);\n const containerSize = useRef<number | null>(null);\n const primarySizeRef = useRef<'1fr' | number>('1fr');\n\n const firstPaneMeasurements = useRef<ReturnType<typeof measureElement>>(undefined);\n const savedPos = useRef<string | undefined>(undefined);\n\n const measurementProp = propsForDirection[direction].dim;\n const clientAxis = propsForDirection[direction].axis;\n const minDimProp = propsForDirection[direction].min;\n const maxDimProp = propsForDirection[direction].max;\n\n // Using a resize observer here, as with content or screen based width/height the ratio between panes might\n // change after a window resize, so ariaValueNow needs to be updated accordingly\n useResizeObserver(\n containerRef.current!,\n (entries) => {\n for (const entry of entries) {\n if (!entry.target.isSameNode(containerRef.current)) {\n return;\n }\n\n const curSize = firstPaneRef.current!.getBoundingClientRect()[measurementProp];\n const newDims = measureElement(firstPaneRef.current!);\n splitterRef.current!.ariaValueNow = `${clamp(\n ((curSize - newDims[minDimProp]) / (newDims[maxDimProp] - newDims[minDimProp])) * 100,\n 0,\n 100\n )}`;\n }\n },\n 500,\n [maxDimProp, minDimProp, direction, measurementProp]\n );\n\n const dragStart = useRef<number | null>(null);\n const onPointerDown = useCallback(\n (e: React.PointerEvent<HTMLDivElement>) => {\n // measure left-side width\n primarySizeRef.current = firstPaneRef.current!.getBoundingClientRect()[measurementProp];\n containerSize.current = containerRef.current!.getBoundingClientRect()[measurementProp];\n\n // set position at start of drag\n dragStart.current = e[clientAxis];\n splitterRef.current!.setPointerCapture(e.pointerId);\n firstPaneMeasurements.current = measureElement(firstPaneRef.current!);\n\n savedPos.current = undefined;\n },\n [measurementProp, clientAxis]\n );\n\n const onPointerMove = useCallback(\n (e: React.PointerEvent<HTMLDivElement>) => {\n if (dragStart.current !== null && primarySizeRef.current !== '1fr') {\n const diff = e[clientAxis] - dragStart.current;\n const dims = firstPaneMeasurements.current!;\n const newSize = clamp(primarySizeRef.current + diff, dims[minDimProp], dims[maxDimProp]);\n const newFlex = newSize / (containerSize.current! - handleSize);\n firstPaneRef.current!.style.flexGrow = `${newFlex}`;\n secondPaneRef.current!.style.flexGrow = `${1 - newFlex}`;\n const ariaValueNow = clamp(\n ((newSize - dims[minDimProp]) / (dims[maxDimProp] - dims[minDimProp])) * 100,\n 0,\n 100\n );\n\n splitterRef.current!.ariaValueNow = `${ariaValueNow}`;\n }\n },\n [handleSize, clientAxis, minDimProp, maxDimProp]\n );\n\n const onPointerUp = useCallback(\n (e: React.PointerEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.stopPropagation();\n splitterRef.current!.releasePointerCapture(e.pointerId);\n dragStart.current = null;\n onDragFinished?.(parseFloat(firstPaneRef.current!.style.flexGrow));\n },\n [onDragFinished]\n );\n\n const pressedKeys = useRef(new Set<string>());\n const keysLastHandledAt = useRef<number | null>(null);\n const handlePressedKeys = useCallback(\n (time: number) => {\n const nothingPressed = pressedKeys.current.size === 0;\n if (nothingPressed) {\n keysLastHandledAt.current = null;\n return;\n } else if (primarySizeRef.current === '1fr') {\n return;\n }\n\n const dt = time - (keysLastHandledAt.current ?? time);\n const dx = dt * PIXELS_PER_MS;\n let sizeChange = 0;\n\n if (direction === 'row') {\n if (pressedKeys.current.has('ArrowLeft')) {\n sizeChange -= dx;\n }\n if (pressedKeys.current.has('ArrowRight')) {\n sizeChange += dx;\n }\n } else {\n if (pressedKeys.current.has('ArrowUp')) {\n sizeChange -= dx;\n }\n if (pressedKeys.current.has('ArrowDown')) {\n sizeChange += dx;\n }\n }\n\n const firstPaneDims = firstPaneMeasurements.current!;\n const curSize = firstPaneRef.current!.getBoundingClientRect()[measurementProp];\n const newSize = clamp(curSize + sizeChange, firstPaneDims[minDimProp], firstPaneDims[maxDimProp]);\n\n const newFlex = newSize / (containerSize.current! - handleSize);\n\n firstPaneRef.current!.style.flexGrow = `${newFlex}`;\n secondPaneRef.current!.style.flexGrow = `${1 - newFlex}`;\n const ariaValueNow =\n ((newSize - firstPaneDims[minDimProp]) / (firstPaneDims[maxDimProp] - firstPaneDims[minDimProp])) * 100;\n splitterRef.current!.ariaValueNow = `${clamp(ariaValueNow, 0, 100)}`;\n\n keysLastHandledAt.current = time;\n window.requestAnimationFrame(handlePressedKeys);\n },\n [direction, handleSize, minDimProp, maxDimProp, measurementProp]\n );\n\n const onKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.key === 'Enter') {\n if (savedPos.current === undefined) {\n savedPos.current = firstPaneRef.current!.style.flexGrow;\n firstPaneRef.current!.style.flexGrow = '0';\n secondPaneRef.current!.style.flexGrow = '1';\n } else {\n firstPaneRef.current!.style.flexGrow = savedPos.current;\n secondPaneRef.current!.style.flexGrow = `${1 - parseFloat(savedPos.current)}`;\n savedPos.current = undefined;\n }\n return;\n } else if (e.key === 'Home') {\n firstPaneMeasurements.current = measureElement(firstPaneRef.current!);\n containerSize.current = containerRef.current!.getBoundingClientRect()[measurementProp];\n const newFlex = firstPaneMeasurements.current[minDimProp] / (containerSize.current! - handleSize);\n firstPaneRef.current!.style.flexGrow = `${newFlex}`;\n secondPaneRef.current!.style.flexGrow = `${1 - newFlex}`;\n splitterRef.current!.ariaValueNow = '0';\n return;\n } else if (e.key === 'End') {\n firstPaneMeasurements.current = measureElement(firstPaneRef.current!);\n containerSize.current = containerRef.current!.getBoundingClientRect()[measurementProp];\n const newFlex = firstPaneMeasurements.current[maxDimProp] / (containerSize.current! - handleSize);\n firstPaneRef.current!.style.flexGrow = `${newFlex}`;\n secondPaneRef.current!.style.flexGrow = `${1 - newFlex}`;\n splitterRef.current!.ariaValueNow = '100';\n return;\n }\n\n if (\n !(\n (direction === 'column' && VERTICAL_KEYS.has(e.key)) ||\n (direction === 'row' && HORIZONTAL_KEYS.has(e.key))\n ) ||\n pressedKeys.current.has(e.key)\n ) {\n return;\n }\n\n savedPos.current = undefined;\n e.preventDefault();\n e.stopPropagation();\n primarySizeRef.current = firstPaneRef.current!.getBoundingClientRect()[measurementProp];\n containerSize.current = containerRef.current!.getBoundingClientRect()[measurementProp];\n firstPaneMeasurements.current = measureElement(firstPaneRef.current!);\n const newKey = !pressedKeys.current.has(e.key);\n\n if (newKey) {\n const initiateAnimationLoop = pressedKeys.current.size === 0;\n pressedKeys.current.add(e.key);\n\n if (initiateAnimationLoop) {\n window.requestAnimationFrame(handlePressedKeys);\n }\n }\n },\n [direction, handlePressedKeys, handleSize, maxDimProp, measurementProp, minDimProp]\n );\n\n const onKeyUp = useCallback(\n (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (\n (direction === 'row' && !HORIZONTAL_KEYS.has(e.key)) ||\n (direction === 'column' && !VERTICAL_KEYS.has(e.key))\n ) {\n return;\n }\n\n pressedKeys.current.delete(e.key);\n onDragFinished?.(parseFloat(firstPaneRef.current!.style.flexGrow));\n },\n [direction, onDragFinished]\n );\n\n const onDoubleClick = useCallback(() => {\n firstPaneRef.current!.style.flexGrow = '0.5';\n secondPaneRef.current!.style.flexGrow = '0.5';\n const dim = measureElement(firstPaneRef.current!);\n firstPaneMeasurements.current = dim;\n primarySizeRef.current = firstPaneRef.current!.getBoundingClientRect()[measurementProp];\n splitterRef.current!.ariaValueNow = `${\n ((primarySizeRef.current - dim[minDimProp]) / (dim[maxDimProp] - dim[minDimProp])) * 100\n }`;\n }, [maxDimProp, measurementProp, minDimProp]);\n\n const styles = useStyles2(getStyles);\n const id = useUniqueId();\n\n return (\n <div\n ref={containerRef}\n className={styles.container}\n style={{\n flexDirection: direction,\n }}\n >\n <div\n ref={firstPaneRef}\n className={styles.panel}\n style={{\n flexGrow: initialSize === 'auto' ? 0.5 : clamp(initialSize, 0, 1),\n [minDimProp]: 'min-content',\n ...primaryPaneStyles,\n }}\n id={`start-panel-${id}`}\n >\n {kids[0]}\n </div>\n\n <div\n ref={splitterRef}\n style={{ [measurementProp]: `${handleSize}px` }}\n className={cx(styles.handle, { [styles.handleHorizontal]: direction === 'column' })}\n onPointerUp={onPointerUp}\n onPointerDown={onPointerDown}\n onPointerMove={onPointerMove}\n onKeyDown={onKeyDown}\n onKeyUp={onKeyUp}\n onDoubleClick={onDoubleClick}\n role=\"separator\"\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={50}\n aria-controls={`start-panel-${id}`}\n aria-label=\"Pane resize widget\"\n tabIndex={0}\n ></div>\n\n <div\n ref={secondPaneRef}\n className={styles.panel}\n style={{\n flexGrow: initialSize === 'auto' ? 0.5 : clamp(1 - initialSize, 0, 1),\n [minDimProp]: 'min-content',\n ...secondaryPaneStyles,\n }}\n id={`end-panel-${id}`}\n >\n {kids[1]}\n </div>\n </div>\n );\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n handle: css({\n cursor: 'col-resize',\n position: 'relative',\n flexShrink: 0,\n userSelect: 'none',\n\n '&::before': {\n content: '\"\"',\n position: 'absolute',\n backgroundColor: theme.colors.primary.main,\n left: '50%',\n transform: 'translate(-50%)',\n top: 0,\n height: '100%',\n width: '1px',\n opacity: 0,\n transition: 'opacity ease-in-out 0.2s',\n },\n\n '&::after': {\n content: '\"\"',\n width: '4px',\n borderRadius: '4px',\n backgroundColor: theme.colors.border.weak,\n transition: 'background-color ease-in-out 0.2s',\n height: '50%',\n top: 'calc(50% - (50%) / 2)',\n transform: 'translateX(-50%)',\n position: 'absolute',\n left: '50%',\n },\n\n '&:hover, &:focus-visible': {\n outline: 'none',\n '&::before': {\n opacity: 1,\n },\n\n '&::after': {\n backgroundColor: theme.colors.primary.main,\n },\n },\n }),\n handleHorizontal: css({\n cursor: 'row-resize',\n\n '&::before': {\n left: 'inherit',\n transform: 'translateY(-50%)',\n top: '50%',\n height: '1px',\n width: '100%',\n },\n\n '&::after': {\n width: '50%',\n height: '4px',\n top: '50%',\n transform: 'translateY(-50%)',\n left: 'calc(50% - (50%) / 2)',\n },\n }),\n container: css({\n display: 'flex',\n width: '100%',\n flexGrow: 1,\n overflow: 'hidden',\n }),\n panel: css({ display: 'flex', overflow: 'hidden', position: 'relative', flexBasis: 0 }),\n };\n}\n\ntype MeasureR<T> = T extends HTMLElement\n ? { minWidth: number; maxWidth: number; minHeight: number; maxHeight: number }\n : T extends null\n ? undefined\n : never;\ntype HTMLElementOrNull = HTMLElement | null;\n\nfunction measureElement<T extends HTMLElementOrNull>(ref: T): MeasureR<T> {\n if (ref === null) {\n return undefined as MeasureR<T>;\n }\n\n const savedBodyOverflow = document.body.style.overflow;\n const savedWidth = ref.style.width;\n const savedHeight = ref.style.height;\n const savedFlex = ref.style.flexGrow;\n document.body.style.overflow = 'hidden';\n ref.style.flexGrow = '0';\n const { width: minWidth, height: minHeight } = ref.getBoundingClientRect();\n\n ref.style.flexGrow = '100';\n const { width: maxWidth, height: maxHeight } = ref.getBoundingClientRect();\n\n document.body.style.overflow = savedBodyOverflow;\n ref.style.width = savedWidth;\n ref.style.height = savedHeight;\n ref.style.flexGrow = savedFlex;\n\n return { minWidth, maxWidth, minHeight, maxHeight } as MeasureR<T>;\n}\n\nfunction useResizeObserver(\n target: Element,\n cb: (entries: ResizeObserverEntry[]) => void,\n throttleWait = 0,\n deps?: React.DependencyList\n) {\n const throttledCallback = throttle(cb, throttleWait);\n\n useLayoutEffect(() => {\n if (!target) {\n return;\n }\n\n const resizeObserver = new ResizeObserver(throttledCallback);\n\n resizeObserver.observe(target, { box: 'device-pixel-content-box' });\n return () => resizeObserver.disconnect();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps);\n}\n"],"names":[],"mappings":"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"}
@@ -133,6 +133,10 @@ class VizPanelBuilder {
133
133
  this._state.$variables = variables;
134
134
  return this;
135
135
  }
136
+ setBehaviors(behaviors) {
137
+ this._state.$behaviors = behaviors;
138
+ return this;
139
+ }
136
140
  build() {
137
141
  return new VizPanel(__spreadProps(__spreadValues({}, this._state), {
138
142
  fieldConfig: {
@@ -1 +1 @@
1
- {"version":3,"file":"VizPanelBuilder.js","sources":["../../../../src/core/PanelBuilders/VizPanelBuilder.ts"],"sourcesContent":["import { FieldConfigSource } from '@grafana/data';\nimport { merge } from 'lodash';\n\nimport { VizPanel, VizPanelState } from '../../components/VizPanel/VizPanel';\nimport { DeepPartial } from '../types';\nimport { FieldConfigOverridesBuilder } from './FieldConfigOverridesBuilder';\nimport { StandardFieldConfig, StandardFieldConfigInterface } from './types';\n\nexport class VizPanelBuilder<TOptions, TFieldConfig extends {}>\n implements StandardFieldConfigInterface<StandardFieldConfig, VizPanelBuilder<TOptions, TFieldConfig>, 'set'>\n{\n private _state: VizPanelState<TOptions, TFieldConfig> = {} as VizPanelState<TOptions, TFieldConfig>;\n private _overridesBuilder = new FieldConfigOverridesBuilder<TFieldConfig>();\n\n public constructor(\n pluginId: string,\n pluginVersion: string,\n defaultOptions?: () => Partial<TOptions>,\n defaultFieldConfig?: () => TFieldConfig\n ) {\n this._state.title = '';\n this._state.description = '';\n this._state.displayMode = 'default';\n this._state.hoverHeader = false;\n this._state.isDraggable = false;\n this._state.isResizable = false;\n this._state.pluginId = pluginId;\n this._state.pluginVersion = pluginVersion;\n const fieldConfig: FieldConfigSource<TFieldConfig> = {\n defaults: {\n custom: defaultFieldConfig ? defaultFieldConfig() : ({} as TFieldConfig),\n }, // use field config factory that will provide default field config\n overrides: [],\n };\n\n this._state.options = defaultOptions ? defaultOptions() : ({} as TOptions);\n this._state.fieldConfig = fieldConfig;\n }\n\n /**\n * Set panel title.\n */\n public setTitle(title: VizPanelState['title']): this {\n this._state.title = title;\n return this;\n }\n\n /**\n * Set panel description.\n */\n public setDescription(description: VizPanelState['description']): this {\n this._state.description = description;\n return this;\n }\n\n /**\n * Set panel display mode.\n */\n public setDisplayMode(displayMode: VizPanelState['displayMode']): this {\n this._state.displayMode = displayMode;\n return this;\n }\n\n /**\n * Set if panel header should be shown on hover.\n */\n public setHoverHeader(hoverHeader: VizPanelState['hoverHeader']): this {\n this._state.hoverHeader = hoverHeader;\n return this;\n }\n\n /**\n * Set if panel is draggable.\n */\n public setIsDraggable(isDraggable: VizPanelState['isDraggable']): this {\n this._state.isDraggable = isDraggable;\n return this;\n }\n\n /**\n * Set if panel is resizable.\n */\n public setIsResizable(isResizable: VizPanelState['isResizable']): this {\n this._state.isResizable = isResizable;\n return this;\n }\n\n /**\n * Set panel menu scene object.\n */\n public setMenu(menu: VizPanelState['menu']): this {\n this._state.menu = menu;\n return this;\n }\n\n /**\n * Set scene object or react component to use as panel header actions.\n */\n public setHeaderActions(headerActions: VizPanelState['headerActions']): this {\n this._state.headerActions = headerActions;\n return this;\n }\n\n /**\n * Set color.\n */\n public setColor(color: StandardFieldConfig['color']): this {\n return this.setFieldConfigDefaults('color', color);\n }\n\n /**\n * Set number of decimals to show.\n */\n public setDecimals(decimals: StandardFieldConfig['decimals']): this {\n return this.setFieldConfigDefaults('decimals', decimals);\n }\n\n /**\n * Set field display name.\n */\n public setDisplayName(displayName: StandardFieldConfig['displayName']): this {\n return this.setFieldConfigDefaults('displayName', displayName);\n }\n\n /**\n * Set the standard field config property filterable.\n */\n public setFilterable(filterable: StandardFieldConfig['filterable']): this {\n return this.setFieldConfigDefaults('filterable', filterable);\n }\n\n /**\n * Set data links.\n */\n public setLinks(links: StandardFieldConfig['links']): this {\n return this.setFieldConfigDefaults('links', links);\n }\n\n /**\n * Set value mappings.\n */\n public setMappings(mappings: StandardFieldConfig['mappings']): this {\n return this.setFieldConfigDefaults('mappings', mappings);\n }\n\n /**\n * Set the standard field config property max.\n */\n public setMax(max: StandardFieldConfig['max']): this {\n return this.setFieldConfigDefaults('max', max);\n }\n\n /**\n * Set the standard field config property min.\n */\n public setMin(min: StandardFieldConfig['min']): this {\n return this.setFieldConfigDefaults('min', min);\n }\n\n /**\n * Set the standard field config property noValue.\n */\n public setNoValue(noValue: StandardFieldConfig['noValue']): this {\n return this.setFieldConfigDefaults('noValue', noValue);\n }\n\n /**\n * Set the standard field config property thresholds.\n */\n public setThresholds(thresholds: StandardFieldConfig['thresholds']): this {\n return this.setFieldConfigDefaults('thresholds', thresholds);\n }\n\n /**\n * Set the standard field config property unit.\n */\n public setUnit(unit: StandardFieldConfig['unit']): this {\n return this.setFieldConfigDefaults('unit', unit);\n }\n\n /**\n * Set an individual panel option. This will merge the value with the existing options.\n */\n public setOption<T extends TOptions, K extends keyof T>(id: K, value: DeepPartial<T[K]>): this {\n this._state.options = merge(this._state.options, { [id]: value });\n return this;\n }\n\n /**\n * Set an individual custom field config value. This will merge the value with the existing custom field config.\n */\n public setCustomFieldConfig<T extends TFieldConfig, K extends keyof T>(id: K, value: DeepPartial<T[K]>): this {\n this._state.fieldConfig.defaults = {\n ...this._state.fieldConfig.defaults,\n custom: merge(this._state.fieldConfig.defaults.custom, { [id]: value }),\n };\n\n return this;\n }\n\n /**\n * Configure overrides for the field config. This will merge the overrides with the existing overrides.\n */\n public setOverrides(builder: (b: FieldConfigOverridesBuilder<TFieldConfig>) => void): this {\n builder(this._overridesBuilder);\n return this;\n }\n\n /**\n * Set data provider for the panel.\n */\n public setData(data: VizPanelState['$data']): this {\n this._state.$data = data;\n return this;\n }\n\n /**\n * Set time range for the panel.\n */\n public setTimeRange(timeRange: VizPanelState['$timeRange']): this {\n this._state.$timeRange = timeRange;\n return this;\n }\n\n /**\n * Set variables for the panel.\n */\n public setVariables(variables: VizPanelState['$variables']): this {\n this._state.$variables = variables;\n return this;\n }\n\n /**\n * Build the panel.\n */\n public build() {\n return new VizPanel<TOptions, TFieldConfig>({\n ...this._state,\n fieldConfig: {\n defaults: this._state.fieldConfig.defaults,\n overrides: this._overridesBuilder.build(),\n },\n });\n }\n\n private setFieldConfigDefaults<T extends keyof StandardFieldConfig>(key: T, value: StandardFieldConfig[T]) {\n this._state.fieldConfig.defaults = {\n ...this._state.fieldConfig.defaults,\n [key]: value,\n };\n return this;\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"VizPanelBuilder.js","sources":["../../../../src/core/PanelBuilders/VizPanelBuilder.ts"],"sourcesContent":["import { FieldConfigSource } from '@grafana/data';\nimport { merge } from 'lodash';\n\nimport { VizPanel, VizPanelState } from '../../components/VizPanel/VizPanel';\nimport { DeepPartial } from '../types';\nimport { FieldConfigOverridesBuilder } from './FieldConfigOverridesBuilder';\nimport { StandardFieldConfig, StandardFieldConfigInterface } from './types';\n\nexport class VizPanelBuilder<TOptions, TFieldConfig extends {}>\n implements StandardFieldConfigInterface<StandardFieldConfig, VizPanelBuilder<TOptions, TFieldConfig>, 'set'>\n{\n private _state: VizPanelState<TOptions, TFieldConfig> = {} as VizPanelState<TOptions, TFieldConfig>;\n private _overridesBuilder = new FieldConfigOverridesBuilder<TFieldConfig>();\n\n public constructor(\n pluginId: string,\n pluginVersion: string,\n defaultOptions?: () => Partial<TOptions>,\n defaultFieldConfig?: () => TFieldConfig\n ) {\n this._state.title = '';\n this._state.description = '';\n this._state.displayMode = 'default';\n this._state.hoverHeader = false;\n this._state.isDraggable = false;\n this._state.isResizable = false;\n this._state.pluginId = pluginId;\n this._state.pluginVersion = pluginVersion;\n const fieldConfig: FieldConfigSource<TFieldConfig> = {\n defaults: {\n custom: defaultFieldConfig ? defaultFieldConfig() : ({} as TFieldConfig),\n }, // use field config factory that will provide default field config\n overrides: [],\n };\n\n this._state.options = defaultOptions ? defaultOptions() : ({} as TOptions);\n this._state.fieldConfig = fieldConfig;\n }\n\n /**\n * Set panel title.\n */\n public setTitle(title: VizPanelState['title']): this {\n this._state.title = title;\n return this;\n }\n\n /**\n * Set panel description.\n */\n public setDescription(description: VizPanelState['description']): this {\n this._state.description = description;\n return this;\n }\n\n /**\n * Set panel display mode.\n */\n public setDisplayMode(displayMode: VizPanelState['displayMode']): this {\n this._state.displayMode = displayMode;\n return this;\n }\n\n /**\n * Set if panel header should be shown on hover.\n */\n public setHoverHeader(hoverHeader: VizPanelState['hoverHeader']): this {\n this._state.hoverHeader = hoverHeader;\n return this;\n }\n\n /**\n * Set if panel is draggable.\n */\n public setIsDraggable(isDraggable: VizPanelState['isDraggable']): this {\n this._state.isDraggable = isDraggable;\n return this;\n }\n\n /**\n * Set if panel is resizable.\n */\n public setIsResizable(isResizable: VizPanelState['isResizable']): this {\n this._state.isResizable = isResizable;\n return this;\n }\n\n /**\n * Set panel menu scene object.\n */\n public setMenu(menu: VizPanelState['menu']): this {\n this._state.menu = menu;\n return this;\n }\n\n /**\n * Set scene object or react component to use as panel header actions.\n */\n public setHeaderActions(headerActions: VizPanelState['headerActions']): this {\n this._state.headerActions = headerActions;\n return this;\n }\n\n /**\n * Set color.\n */\n public setColor(color: StandardFieldConfig['color']): this {\n return this.setFieldConfigDefaults('color', color);\n }\n\n /**\n * Set number of decimals to show.\n */\n public setDecimals(decimals: StandardFieldConfig['decimals']): this {\n return this.setFieldConfigDefaults('decimals', decimals);\n }\n\n /**\n * Set field display name.\n */\n public setDisplayName(displayName: StandardFieldConfig['displayName']): this {\n return this.setFieldConfigDefaults('displayName', displayName);\n }\n\n /**\n * Set the standard field config property filterable.\n */\n public setFilterable(filterable: StandardFieldConfig['filterable']): this {\n return this.setFieldConfigDefaults('filterable', filterable);\n }\n\n /**\n * Set data links.\n */\n public setLinks(links: StandardFieldConfig['links']): this {\n return this.setFieldConfigDefaults('links', links);\n }\n\n /**\n * Set value mappings.\n */\n public setMappings(mappings: StandardFieldConfig['mappings']): this {\n return this.setFieldConfigDefaults('mappings', mappings);\n }\n\n /**\n * Set the standard field config property max.\n */\n public setMax(max: StandardFieldConfig['max']): this {\n return this.setFieldConfigDefaults('max', max);\n }\n\n /**\n * Set the standard field config property min.\n */\n public setMin(min: StandardFieldConfig['min']): this {\n return this.setFieldConfigDefaults('min', min);\n }\n\n /**\n * Set the standard field config property noValue.\n */\n public setNoValue(noValue: StandardFieldConfig['noValue']): this {\n return this.setFieldConfigDefaults('noValue', noValue);\n }\n\n /**\n * Set the standard field config property thresholds.\n */\n public setThresholds(thresholds: StandardFieldConfig['thresholds']): this {\n return this.setFieldConfigDefaults('thresholds', thresholds);\n }\n\n /**\n * Set the standard field config property unit.\n */\n public setUnit(unit: StandardFieldConfig['unit']): this {\n return this.setFieldConfigDefaults('unit', unit);\n }\n\n /**\n * Set an individual panel option. This will merge the value with the existing options.\n */\n public setOption<T extends TOptions, K extends keyof T>(id: K, value: DeepPartial<T[K]>): this {\n this._state.options = merge(this._state.options, { [id]: value });\n return this;\n }\n\n /**\n * Set an individual custom field config value. This will merge the value with the existing custom field config.\n */\n public setCustomFieldConfig<T extends TFieldConfig, K extends keyof T>(id: K, value: DeepPartial<T[K]>): this {\n this._state.fieldConfig.defaults = {\n ...this._state.fieldConfig.defaults,\n custom: merge(this._state.fieldConfig.defaults.custom, { [id]: value }),\n };\n\n return this;\n }\n\n /**\n * Configure overrides for the field config. This will merge the overrides with the existing overrides.\n */\n public setOverrides(builder: (b: FieldConfigOverridesBuilder<TFieldConfig>) => void): this {\n builder(this._overridesBuilder);\n return this;\n }\n\n /**\n * Set data provider for the panel.\n */\n public setData(data: VizPanelState['$data']): this {\n this._state.$data = data;\n return this;\n }\n\n /**\n * Set time range for the panel.\n */\n public setTimeRange(timeRange: VizPanelState['$timeRange']): this {\n this._state.$timeRange = timeRange;\n return this;\n }\n\n /**\n * Set variables for the panel.\n */\n public setVariables(variables: VizPanelState['$variables']): this {\n this._state.$variables = variables;\n return this;\n }\n\n /**\n * Set behaviors for the panel.\n */\n public setBehaviors(behaviors: VizPanelState['$behaviors']): this {\n this._state.$behaviors = behaviors;\n return this;\n }\n\n /**\n * Build the panel.\n */\n public build() {\n return new VizPanel<TOptions, TFieldConfig>({\n ...this._state,\n fieldConfig: {\n defaults: this._state.fieldConfig.defaults,\n overrides: this._overridesBuilder.build(),\n },\n });\n }\n\n private setFieldConfigDefaults<T extends keyof StandardFieldConfig>(key: T, value: StandardFieldConfig[T]) {\n this._state.fieldConfig.defaults = {\n ...this._state.fieldConfig.defaults,\n [key]: value,\n };\n return this;\n }\n}\n"],"names":[],"mappings":"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"}
package/dist/esm/index.js CHANGED
@@ -37,6 +37,7 @@ export { SceneControlsSpacer } from './components/SceneControlsSpacer.js';
37
37
  export { SceneFlexItem, SceneFlexLayout } from './components/layout/SceneFlexLayout.js';
38
38
  export { SceneGridItem, SceneGridLayout } from './components/layout/grid/SceneGridLayout.js';
39
39
  export { SceneGridRow } from './components/layout/grid/SceneGridRow.js';
40
+ export { SplitLayout } from './components/layout/split/SplitLayout.js';
40
41
  export { SceneApp } from './components/SceneApp/SceneApp.js';
41
42
  export { SceneAppPage } from './components/SceneApp/SceneAppPage.js';
42
43
  export { SceneReactObject } from './components/SceneReactObject.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["import { getUrlWithAppState } from './components/SceneApp/utils';\nimport { registerRuntimePanelPlugin } from './components/VizPanel/registerRuntimePanelPlugin';\n\nexport * from './core/types';\nexport * from './core/events';\nexport { sceneGraph } from './core/sceneGraph';\nexport * as behaviors from './behaviors';\n\nexport { SceneObjectBase } from './core/SceneObjectBase';\nexport { SceneDataNode } from './core/SceneDataNode';\nexport { SceneTimeRange } from './core/SceneTimeRange';\nexport { SceneTimeZoneOverride } from './core/SceneTimeZoneOverride';\n\nexport { SceneQueryRunner, type QueryRunnerState } from './querying/SceneQueryRunner';\nexport { SceneDataTransformer } from './querying/SceneDataTransformer';\n\nexport * from './variables/types';\nexport { VariableDependencyConfig } from './variables/VariableDependencyConfig';\nexport { formatRegistry, type FormatVariable } from './variables/interpolation/formatRegistry';\nexport { VariableValueSelectors } from './variables/components/VariableValueSelectors';\nexport { SceneVariableSet } from './variables/sets/SceneVariableSet';\nexport { ConstantVariable } from './variables/variants/ConstantVariable';\nexport { CustomVariable } from './variables/variants/CustomVariable';\nexport { DataSourceVariable } from './variables/variants/DataSourceVariable';\nexport { QueryVariable } from './variables/variants/query/QueryVariable';\nexport { TestVariable } from './variables/variants/TestVariable';\nexport { TextBoxVariable } from './variables/variants/TextBoxVariable';\n\nexport { type UrlSyncManagerLike as UrlSyncManager, getUrlSyncManager } from './services/UrlSyncManager';\nexport { SceneObjectUrlSyncConfig } from './services/SceneObjectUrlSyncConfig';\n\nexport { EmbeddedScene, type EmbeddedSceneState } from './components/EmbeddedScene';\nexport { VizPanel, type VizPanelState } from './components/VizPanel/VizPanel';\nexport { VizPanelMenu } from './components/VizPanel/VizPanelMenu';\nexport { NestedScene } from './components/NestedScene';\nexport { SceneCanvasText } from './components/SceneCanvasText';\nexport { SceneToolbarButton, SceneToolbarInput } from './components/SceneToolbarButton';\nexport { SceneTimePicker } from './components/SceneTimePicker';\nexport { SceneRefreshPicker } from './components/SceneRefreshPicker';\nexport { SceneByFrameRepeater } from './components/SceneByFrameRepeater';\nexport { SceneControlsSpacer } from './components/SceneControlsSpacer';\nexport { SceneFlexLayout, SceneFlexItem, type SceneFlexItemState } from './components/layout/SceneFlexLayout';\nexport { SceneGridLayout, SceneGridItem } from './components/layout/grid/SceneGridLayout';\nexport { SceneGridRow } from './components/layout/grid/SceneGridRow';\nexport {\n type SceneAppPageLike,\n type SceneRouteMatch,\n type SceneAppPageState,\n type SceneAppDrilldownView,\n type SceneAppRoute,\n} from './components/SceneApp/types';\nexport { SceneApp } from './components/SceneApp/SceneApp';\nexport { SceneAppPage } from './components/SceneApp/SceneAppPage';\nexport { SceneReactObject } from './components/SceneReactObject';\nexport { PanelBuilders } from './core/PanelBuilders';\n\nexport const sceneUtils = {\n getUrlWithAppState,\n registerRuntimePanelPlugin,\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwDO,MAAM,UAAa,GAAA;AAAA,EACxB,kBAAA;AAAA,EACA,0BAAA;AACF;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["import { getUrlWithAppState } from './components/SceneApp/utils';\nimport { registerRuntimePanelPlugin } from './components/VizPanel/registerRuntimePanelPlugin';\n\nexport * from './core/types';\nexport * from './core/events';\nexport { sceneGraph } from './core/sceneGraph';\nexport * as behaviors from './behaviors';\n\nexport { SceneObjectBase } from './core/SceneObjectBase';\nexport { SceneDataNode } from './core/SceneDataNode';\nexport { SceneTimeRange } from './core/SceneTimeRange';\nexport { SceneTimeZoneOverride } from './core/SceneTimeZoneOverride';\n\nexport { SceneQueryRunner, type QueryRunnerState } from './querying/SceneQueryRunner';\nexport { SceneDataTransformer } from './querying/SceneDataTransformer';\n\nexport * from './variables/types';\nexport { VariableDependencyConfig } from './variables/VariableDependencyConfig';\nexport { formatRegistry, type FormatVariable } from './variables/interpolation/formatRegistry';\nexport { VariableValueSelectors } from './variables/components/VariableValueSelectors';\nexport { SceneVariableSet } from './variables/sets/SceneVariableSet';\nexport { ConstantVariable } from './variables/variants/ConstantVariable';\nexport { CustomVariable } from './variables/variants/CustomVariable';\nexport { DataSourceVariable } from './variables/variants/DataSourceVariable';\nexport { QueryVariable } from './variables/variants/query/QueryVariable';\nexport { TestVariable } from './variables/variants/TestVariable';\nexport { TextBoxVariable } from './variables/variants/TextBoxVariable';\n\nexport { type UrlSyncManagerLike as UrlSyncManager, getUrlSyncManager } from './services/UrlSyncManager';\nexport { SceneObjectUrlSyncConfig } from './services/SceneObjectUrlSyncConfig';\n\nexport { EmbeddedScene, type EmbeddedSceneState } from './components/EmbeddedScene';\nexport { VizPanel, type VizPanelState } from './components/VizPanel/VizPanel';\nexport { VizPanelMenu } from './components/VizPanel/VizPanelMenu';\nexport { NestedScene } from './components/NestedScene';\nexport { SceneCanvasText } from './components/SceneCanvasText';\nexport { SceneToolbarButton, SceneToolbarInput } from './components/SceneToolbarButton';\nexport { SceneTimePicker } from './components/SceneTimePicker';\nexport { SceneRefreshPicker } from './components/SceneRefreshPicker';\nexport { SceneByFrameRepeater } from './components/SceneByFrameRepeater';\nexport { SceneControlsSpacer } from './components/SceneControlsSpacer';\nexport { SceneFlexLayout, SceneFlexItem, type SceneFlexItemState } from './components/layout/SceneFlexLayout';\nexport { SceneGridLayout, SceneGridItem } from './components/layout/grid/SceneGridLayout';\nexport { SceneGridRow } from './components/layout/grid/SceneGridRow';\nexport { SplitLayout } from './components/layout/split/SplitLayout';\nexport {\n type SceneAppPageLike,\n type SceneRouteMatch,\n type SceneAppPageState,\n type SceneAppDrilldownView,\n type SceneAppRoute,\n} from './components/SceneApp/types';\nexport { SceneApp } from './components/SceneApp/SceneApp';\nexport { SceneAppPage } from './components/SceneApp/SceneAppPage';\nexport { SceneReactObject } from './components/SceneReactObject';\nexport { PanelBuilders } from './core/PanelBuilders';\n\nexport const sceneUtils = {\n getUrlWithAppState,\n registerRuntimePanelPlugin,\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyDO,MAAM,UAAa,GAAA;AAAA,EACxB,kBAAA;AAAA,EACA,0BAAA;AACF;;;;"}