@grafana/scenes 6.28.2--canary.1196.16518846434.0 → 6.28.2
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 +12 -0
- package/dist/esm/components/VizPanel/VizPanelMenu.js +1 -0
- package/dist/esm/components/VizPanel/VizPanelMenu.js.map +1 -1
- package/dist/esm/variables/macros/index.js +3 -11
- package/dist/esm/variables/macros/index.js.map +1 -1
- package/dist/index.d.ts +1 -2
- package/dist/index.js +4 -11
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
# v6.28.2 (Mon Jul 28 2025)
|
|
2
|
+
|
|
3
|
+
#### 🐛 Bug Fix
|
|
4
|
+
|
|
5
|
+
- Accessibility: Add `role="menuitem"` to `VizPanelMenu` items [#1189](https://github.com/grafana/scenes/pull/1189) ([@ashharrison90](https://github.com/ashharrison90))
|
|
6
|
+
|
|
7
|
+
#### Authors: 1
|
|
8
|
+
|
|
9
|
+
- Ashley Harrison ([@ashharrison90](https://github.com/ashharrison90))
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
1
13
|
# v6.28.1 (Thu Jul 24 2025)
|
|
2
14
|
|
|
3
15
|
#### 🐛 Bug Fix
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VizPanelMenu.js","sources":["../../../../src/components/VizPanel/VizPanelMenu.tsx"],"sourcesContent":["import React, { useEffect } from 'react';\nimport { PanelMenuItem } from '@grafana/data';\nimport { Menu } from '@grafana/ui';\nimport { SceneObjectBase } from '../../core/SceneObjectBase';\nimport { SceneComponentProps, SceneObjectState } from '../../core/types';\nimport { selectors } from '@grafana/e2e-selectors';\n\ninterface VizPanelMenuState extends SceneObjectState {\n items?: PanelMenuItem[];\n}\n\nexport class VizPanelMenu extends SceneObjectBase<VizPanelMenuState> {\n static Component = VizPanelMenuRenderer;\n\n // Allows adding menu items dynamically\n public addItem(item: PanelMenuItem) {\n this.setState({\n items: this.state.items ? [...this.state.items, item] : [item],\n });\n }\n\n // Allows replacing all menu items\n public setItems(items: PanelMenuItem[]) {\n this.setState({\n items,\n });\n }\n}\n\nfunction VizPanelMenuRenderer({ model }: SceneComponentProps<VizPanelMenu>) {\n const { items = [] } = model.useState();\n const ref = React.useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (ref.current) {\n ref.current.focus();\n }\n }, []);\n\n const renderItems = (items: PanelMenuItem[]) => {\n return items.map((item) => {\n switch (item.type) {\n case 'divider':\n return <Menu.Divider key={item.text} />;\n case 'group':\n return (\n <Menu.Group key={item.text} label={item.text}>\n {item.subMenu ? renderItems(item.subMenu) : undefined}\n </Menu.Group>\n );\n default:\n return (\n <Menu.Item\n key={item.text}\n label={item.text}\n icon={item.iconClassName}\n childItems={item.subMenu ? renderItems(item.subMenu) : undefined}\n url={item.href}\n onClick={item.onClick}\n shortcut={item.shortcut}\n testId={selectors.components.Panels.Panel.menuItems(item.text)}\n />\n );\n }\n });\n };\n\n return <Menu ref={ref}>{renderItems(items)}</Menu>;\n}\n"],"names":["items"],"mappings":";;;;;AAWO,MAAM,qBAAqB,eAAmC,CAAA;AAAA;AAAA,EAI5D,QAAQ,IAAqB,EAAA;AAClC,IAAA,IAAA,CAAK,QAAS,CAAA;AAAA,MACZ,KAAO,EAAA,IAAA,CAAK,KAAM,CAAA,KAAA,GAAQ,CAAC,GAAG,IAAK,CAAA,KAAA,CAAM,KAAO,EAAA,IAAI,CAAI,GAAA,CAAC,IAAI;AAAA,KAC9D,CAAA;AAAA;AACH;AAAA,EAGO,SAAS,KAAwB,EAAA;AACtC,IAAA,IAAA,CAAK,QAAS,CAAA;AAAA,MACZ;AAAA,KACD,CAAA;AAAA;AAEL;AAhBa,YAAA,CACJ,SAAY,GAAA,oBAAA;AAiBrB,SAAS,oBAAA,CAAqB,EAAE,KAAA,EAA4C,EAAA;AAC1E,EAAA,MAAM,EAAE,KAAQ,GAAA,EAAG,EAAA,GAAI,MAAM,QAAS,EAAA;AACtC,EAAM,MAAA,GAAA,GAAM,KAAM,CAAA,MAAA,CAAuB,IAAI,CAAA;AAE7C,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,IAAI,OAAS,EAAA;AACf,MAAA,GAAA,CAAI,QAAQ,KAAM,EAAA;AAAA;AACpB,GACF,EAAG,EAAE,CAAA;AAEL,EAAM,MAAA,WAAA,GAAc,CAACA,MAA2B,KAAA;AAC9C,IAAOA,OAAAA,MAAAA,CAAM,GAAI,CAAA,CAAC,IAAS,KAAA;AACzB,MAAA,QAAQ,KAAK,IAAM;AAAA,QACjB,KAAK,SAAA;AACH,UAAA,2CAAQ,IAAK,CAAA,OAAA,EAAL,EAAa,GAAA,EAAK,KAAK,IAAM,EAAA,CAAA;AAAA,QACvC,KAAK,OAAA;AACH,UAAA,2CACG,IAAK,CAAA,KAAA,EAAL,EAAW,GAAA,EAAK,KAAK,IAAM,EAAA,KAAA,EAAO,IAAK,CAAA,IAAA,EAAA,EACrC,KAAK,OAAU,GAAA,WAAA,CAAY,IAAK,CAAA,OAAO,IAAI,MAC9C,CAAA;AAAA,QAEJ;AACE,UACE,uBAAA,KAAA,CAAA,aAAA;AAAA,YAAC,IAAK,CAAA,IAAA;AAAA,YAAL;AAAA,cACC,KAAK,IAAK,CAAA,IAAA;AAAA,cACV,OAAO,IAAK,CAAA,IAAA;AAAA,cACZ,MAAM,IAAK,CAAA,aAAA;AAAA,cACX,YAAY,IAAK,CAAA,OAAA,GAAU,WAAY,CAAA,IAAA,CAAK,OAAO,CAAI,GAAA,MAAA;AAAA,cACvD,KAAK,IAAK,CAAA,IAAA;AAAA,cACV,SAAS,IAAK,CAAA,OAAA;AAAA,cACd,UAAU,IAAK,CAAA,QAAA;AAAA,cACf,QAAQ,SAAU,CAAA,UAAA,CAAW,OAAO,KAAM,CAAA,SAAA,CAAU,KAAK,IAAI;AAAA;AAAA,WAC/D;AAAA;AAEN,KACD,CAAA;AAAA,GACH;AAEA,EAAA,uBAAQ,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,GAAW,EAAA,EAAA,WAAA,CAAY,KAAK,CAAE,CAAA;AAC7C;;;;"}
|
|
1
|
+
{"version":3,"file":"VizPanelMenu.js","sources":["../../../../src/components/VizPanel/VizPanelMenu.tsx"],"sourcesContent":["import React, { useEffect } from 'react';\nimport { PanelMenuItem } from '@grafana/data';\nimport { Menu } from '@grafana/ui';\nimport { SceneObjectBase } from '../../core/SceneObjectBase';\nimport { SceneComponentProps, SceneObjectState } from '../../core/types';\nimport { selectors } from '@grafana/e2e-selectors';\n\ninterface VizPanelMenuState extends SceneObjectState {\n items?: PanelMenuItem[];\n}\n\nexport class VizPanelMenu extends SceneObjectBase<VizPanelMenuState> {\n static Component = VizPanelMenuRenderer;\n\n // Allows adding menu items dynamically\n public addItem(item: PanelMenuItem) {\n this.setState({\n items: this.state.items ? [...this.state.items, item] : [item],\n });\n }\n\n // Allows replacing all menu items\n public setItems(items: PanelMenuItem[]) {\n this.setState({\n items,\n });\n }\n}\n\nfunction VizPanelMenuRenderer({ model }: SceneComponentProps<VizPanelMenu>) {\n const { items = [] } = model.useState();\n const ref = React.useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (ref.current) {\n ref.current.focus();\n }\n }, []);\n\n const renderItems = (items: PanelMenuItem[]) => {\n return items.map((item) => {\n switch (item.type) {\n case 'divider':\n return <Menu.Divider key={item.text} />;\n case 'group':\n return (\n <Menu.Group key={item.text} label={item.text}>\n {item.subMenu ? renderItems(item.subMenu) : undefined}\n </Menu.Group>\n );\n default:\n return (\n <Menu.Item\n key={item.text}\n role=\"menuitem\"\n label={item.text}\n icon={item.iconClassName}\n childItems={item.subMenu ? renderItems(item.subMenu) : undefined}\n url={item.href}\n onClick={item.onClick}\n shortcut={item.shortcut}\n testId={selectors.components.Panels.Panel.menuItems(item.text)}\n />\n );\n }\n });\n };\n\n return <Menu ref={ref}>{renderItems(items)}</Menu>;\n}\n"],"names":["items"],"mappings":";;;;;AAWO,MAAM,qBAAqB,eAAmC,CAAA;AAAA;AAAA,EAI5D,QAAQ,IAAqB,EAAA;AAClC,IAAA,IAAA,CAAK,QAAS,CAAA;AAAA,MACZ,KAAO,EAAA,IAAA,CAAK,KAAM,CAAA,KAAA,GAAQ,CAAC,GAAG,IAAK,CAAA,KAAA,CAAM,KAAO,EAAA,IAAI,CAAI,GAAA,CAAC,IAAI;AAAA,KAC9D,CAAA;AAAA;AACH;AAAA,EAGO,SAAS,KAAwB,EAAA;AACtC,IAAA,IAAA,CAAK,QAAS,CAAA;AAAA,MACZ;AAAA,KACD,CAAA;AAAA;AAEL;AAhBa,YAAA,CACJ,SAAY,GAAA,oBAAA;AAiBrB,SAAS,oBAAA,CAAqB,EAAE,KAAA,EAA4C,EAAA;AAC1E,EAAA,MAAM,EAAE,KAAQ,GAAA,EAAG,EAAA,GAAI,MAAM,QAAS,EAAA;AACtC,EAAM,MAAA,GAAA,GAAM,KAAM,CAAA,MAAA,CAAuB,IAAI,CAAA;AAE7C,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,IAAI,OAAS,EAAA;AACf,MAAA,GAAA,CAAI,QAAQ,KAAM,EAAA;AAAA;AACpB,GACF,EAAG,EAAE,CAAA;AAEL,EAAM,MAAA,WAAA,GAAc,CAACA,MAA2B,KAAA;AAC9C,IAAOA,OAAAA,MAAAA,CAAM,GAAI,CAAA,CAAC,IAAS,KAAA;AACzB,MAAA,QAAQ,KAAK,IAAM;AAAA,QACjB,KAAK,SAAA;AACH,UAAA,2CAAQ,IAAK,CAAA,OAAA,EAAL,EAAa,GAAA,EAAK,KAAK,IAAM,EAAA,CAAA;AAAA,QACvC,KAAK,OAAA;AACH,UAAA,2CACG,IAAK,CAAA,KAAA,EAAL,EAAW,GAAA,EAAK,KAAK,IAAM,EAAA,KAAA,EAAO,IAAK,CAAA,IAAA,EAAA,EACrC,KAAK,OAAU,GAAA,WAAA,CAAY,IAAK,CAAA,OAAO,IAAI,MAC9C,CAAA;AAAA,QAEJ;AACE,UACE,uBAAA,KAAA,CAAA,aAAA;AAAA,YAAC,IAAK,CAAA,IAAA;AAAA,YAAL;AAAA,cACC,KAAK,IAAK,CAAA,IAAA;AAAA,cACV,IAAK,EAAA,UAAA;AAAA,cACL,OAAO,IAAK,CAAA,IAAA;AAAA,cACZ,MAAM,IAAK,CAAA,aAAA;AAAA,cACX,YAAY,IAAK,CAAA,OAAA,GAAU,WAAY,CAAA,IAAA,CAAK,OAAO,CAAI,GAAA,MAAA;AAAA,cACvD,KAAK,IAAK,CAAA,IAAA;AAAA,cACV,SAAS,IAAK,CAAA,OAAA;AAAA,cACd,UAAU,IAAK,CAAA,QAAA;AAAA,cACf,QAAQ,SAAU,CAAA,UAAA,CAAW,OAAO,KAAM,CAAA,SAAA,CAAU,KAAK,IAAI;AAAA;AAAA,WAC/D;AAAA;AAEN,KACD,CAAA;AAAA,GACH;AAEA,EAAA,uBAAQ,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,GAAW,EAAA,EAAA,WAAA,CAAY,KAAK,CAAE,CAAA;AAC7C;;;;"}
|
|
@@ -21,21 +21,13 @@ const macrosIndex = /* @__PURE__ */ new Map([
|
|
|
21
21
|
["__interval", IntervalMacro],
|
|
22
22
|
["__interval_ms", IntervalMacro]
|
|
23
23
|
]);
|
|
24
|
-
function registerVariableMacro(name, macro
|
|
25
|
-
if (macrosIndex.get(name)
|
|
24
|
+
function registerVariableMacro(name, macro) {
|
|
25
|
+
if (macrosIndex.get(name)) {
|
|
26
26
|
throw new Error(`Macro already registered ${name}`);
|
|
27
27
|
}
|
|
28
|
-
let replacedMacro;
|
|
29
|
-
if (macrosIndex.has(name) && !replace) {
|
|
30
|
-
replacedMacro = macrosIndex.get(name);
|
|
31
|
-
}
|
|
32
28
|
macrosIndex.set(name, macro);
|
|
33
29
|
return () => {
|
|
34
|
-
|
|
35
|
-
macrosIndex.set(name, replacedMacro);
|
|
36
|
-
} else {
|
|
37
|
-
macrosIndex.delete(name);
|
|
38
|
-
}
|
|
30
|
+
macrosIndex.delete(name);
|
|
39
31
|
};
|
|
40
32
|
}
|
|
41
33
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/variables/macros/index.ts"],"sourcesContent":["import { DataLinkBuiltInVars } from '@grafana/data';\nimport { MacroVariableConstructor } from './types';\nimport { IntervalMacro, TimeFromAndToMacro, TimezoneMacro, UrlTimeRangeMacro } from './timeMacros';\nimport { AllVariablesMacro } from './AllVariablesMacro';\nimport { DataMacro, FieldMacro, SeriesMacro, ValueMacro } from './dataMacros';\nimport { UrlMacro } from './urlMacros';\nimport { OrgMacro, UserMacro } from './contextMacros';\n\nexport const macrosIndex = new Map<string, MacroVariableConstructor>([\n [DataLinkBuiltInVars.includeVars, AllVariablesMacro],\n [DataLinkBuiltInVars.keepTime, UrlTimeRangeMacro],\n ['__value', ValueMacro],\n ['__data', DataMacro],\n ['__series', SeriesMacro],\n ['__field', FieldMacro],\n ['__url', UrlMacro],\n ['__from', TimeFromAndToMacro],\n ['__to', TimeFromAndToMacro],\n ['__timezone', TimezoneMacro],\n ['__user', UserMacro],\n ['__org', OrgMacro],\n ['__interval', IntervalMacro],\n ['__interval_ms', IntervalMacro],\n]);\n\n/**\n * Allows you to register a variable expression macro that can then be used in strings with syntax ${<macro_name>.<fieldPath>}\n * Call this on app activation and unregister the macro on deactivation.\n * @
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/variables/macros/index.ts"],"sourcesContent":["import { DataLinkBuiltInVars } from '@grafana/data';\nimport { MacroVariableConstructor } from './types';\nimport { IntervalMacro, TimeFromAndToMacro, TimezoneMacro, UrlTimeRangeMacro } from './timeMacros';\nimport { AllVariablesMacro } from './AllVariablesMacro';\nimport { DataMacro, FieldMacro, SeriesMacro, ValueMacro } from './dataMacros';\nimport { UrlMacro } from './urlMacros';\nimport { OrgMacro, UserMacro } from './contextMacros';\n\nexport const macrosIndex = new Map<string, MacroVariableConstructor>([\n [DataLinkBuiltInVars.includeVars, AllVariablesMacro],\n [DataLinkBuiltInVars.keepTime, UrlTimeRangeMacro],\n ['__value', ValueMacro],\n ['__data', DataMacro],\n ['__series', SeriesMacro],\n ['__field', FieldMacro],\n ['__url', UrlMacro],\n ['__from', TimeFromAndToMacro],\n ['__to', TimeFromAndToMacro],\n ['__timezone', TimezoneMacro],\n ['__user', UserMacro],\n ['__org', OrgMacro],\n ['__interval', IntervalMacro],\n ['__interval_ms', IntervalMacro],\n]);\n\n/**\n * Allows you to register a variable expression macro that can then be used in strings with syntax ${<macro_name>.<fieldPath>}\n * Call this on app activation and unregister the macro on deactivation.\n * @returns a function that unregisters the macro\n */\nexport function registerVariableMacro(name: string, macro: MacroVariableConstructor): () => void {\n if (macrosIndex.get(name)) {\n throw new Error(`Macro already registered ${name}`);\n }\n\n macrosIndex.set(name, macro);\n\n return () => {\n macrosIndex.delete(name);\n };\n}\n"],"names":[],"mappings":";;;;;;;AAQa,MAAA,WAAA,uBAAkB,GAAsC,CAAA;AAAA,EACnE,CAAC,mBAAoB,CAAA,WAAA,EAAa,iBAAiB,CAAA;AAAA,EACnD,CAAC,mBAAoB,CAAA,QAAA,EAAU,iBAAiB,CAAA;AAAA,EAChD,CAAC,WAAW,UAAU,CAAA;AAAA,EACtB,CAAC,UAAU,SAAS,CAAA;AAAA,EACpB,CAAC,YAAY,WAAW,CAAA;AAAA,EACxB,CAAC,WAAW,UAAU,CAAA;AAAA,EACtB,CAAC,SAAS,QAAQ,CAAA;AAAA,EAClB,CAAC,UAAU,kBAAkB,CAAA;AAAA,EAC7B,CAAC,QAAQ,kBAAkB,CAAA;AAAA,EAC3B,CAAC,cAAc,aAAa,CAAA;AAAA,EAC5B,CAAC,UAAU,SAAS,CAAA;AAAA,EACpB,CAAC,SAAS,QAAQ,CAAA;AAAA,EAClB,CAAC,cAAc,aAAa,CAAA;AAAA,EAC5B,CAAC,iBAAiB,aAAa;AACjC,CAAC;AAOe,SAAA,qBAAA,CAAsB,MAAc,KAA6C,EAAA;AAC/F,EAAI,IAAA,WAAA,CAAY,GAAI,CAAA,IAAI,CAAG,EAAA;AACzB,IAAA,MAAM,IAAI,KAAA,CAAM,CAA4B,yBAAA,EAAA,IAAI,CAAE,CAAA,CAAA;AAAA;AAGpD,EAAY,WAAA,CAAA,GAAA,CAAI,MAAM,KAAK,CAAA;AAE3B,EAAA,OAAO,MAAM;AACX,IAAA,WAAA,CAAY,OAAO,IAAI,CAAA;AAAA,GACzB;AACF;;;;"}
|
package/dist/index.d.ts
CHANGED
|
@@ -829,10 +829,9 @@ interface MacroVariableConstructor {
|
|
|
829
829
|
/**
|
|
830
830
|
* Allows you to register a variable expression macro that can then be used in strings with syntax ${<macro_name>.<fieldPath>}
|
|
831
831
|
* Call this on app activation and unregister the macro on deactivation.
|
|
832
|
-
* @param replace WARNING! If true, this will replace the existing macro with the same name. This is global and will affect all apps. Unregistering the macro will restore the original macro.
|
|
833
832
|
* @returns a function that unregisters the macro
|
|
834
833
|
*/
|
|
835
|
-
declare function registerVariableMacro(name: string, macro: MacroVariableConstructor
|
|
834
|
+
declare function registerVariableMacro(name: string, macro: MacroVariableConstructor): () => void;
|
|
836
835
|
|
|
837
836
|
declare function renderPrometheusLabelFilters(filters: AdHocVariableFilter[]): string;
|
|
838
837
|
declare function escapeLabelValueInExactSelector(labelValue: string): string;
|
package/dist/index.js
CHANGED
|
@@ -2401,21 +2401,13 @@ const macrosIndex = /* @__PURE__ */ new Map([
|
|
|
2401
2401
|
["__interval", IntervalMacro],
|
|
2402
2402
|
["__interval_ms", IntervalMacro]
|
|
2403
2403
|
]);
|
|
2404
|
-
function registerVariableMacro(name, macro
|
|
2405
|
-
if (macrosIndex.get(name)
|
|
2404
|
+
function registerVariableMacro(name, macro) {
|
|
2405
|
+
if (macrosIndex.get(name)) {
|
|
2406
2406
|
throw new Error(`Macro already registered ${name}`);
|
|
2407
2407
|
}
|
|
2408
|
-
let replacedMacro;
|
|
2409
|
-
if (macrosIndex.has(name) && !replace) {
|
|
2410
|
-
replacedMacro = macrosIndex.get(name);
|
|
2411
|
-
}
|
|
2412
2408
|
macrosIndex.set(name, macro);
|
|
2413
2409
|
return () => {
|
|
2414
|
-
|
|
2415
|
-
macrosIndex.set(name, replacedMacro);
|
|
2416
|
-
} else {
|
|
2417
|
-
macrosIndex.delete(name);
|
|
2418
|
-
}
|
|
2410
|
+
macrosIndex.delete(name);
|
|
2419
2411
|
};
|
|
2420
2412
|
}
|
|
2421
2413
|
|
|
@@ -10963,6 +10955,7 @@ function VizPanelMenuRenderer({ model }) {
|
|
|
10963
10955
|
ui.Menu.Item,
|
|
10964
10956
|
{
|
|
10965
10957
|
key: item.text,
|
|
10958
|
+
role: "menuitem",
|
|
10966
10959
|
label: item.text,
|
|
10967
10960
|
icon: item.iconClassName,
|
|
10968
10961
|
childItems: item.subMenu ? renderItems(item.subMenu) : void 0,
|