@grafana/assistant 0.1.0 → 0.1.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.
Files changed (54) hide show
  1. package/README.md +1 -0
  2. package/dist/components/OpenAssistantButton.d.ts +4 -1
  3. package/dist/components/OpenAssistantButton.d.ts.map +1 -0
  4. package/dist/components/OpenAssistantButton.stories.d.ts +1 -0
  5. package/dist/components/OpenAssistantButton.stories.d.ts.map +1 -0
  6. package/dist/components/index.d.ts +1 -0
  7. package/dist/components/index.d.ts.map +1 -0
  8. package/dist/context/base.d.ts +1 -0
  9. package/dist/context/base.d.ts.map +1 -0
  10. package/dist/context/chat.d.ts +1 -0
  11. package/dist/context/chat.d.ts.map +1 -0
  12. package/dist/context/component.d.ts +1 -0
  13. package/dist/context/component.d.ts.map +1 -0
  14. package/dist/context/dashboard.d.ts +1 -0
  15. package/dist/context/dashboard.d.ts.map +1 -0
  16. package/dist/context/datasource.d.ts +1 -0
  17. package/dist/context/datasource.d.ts.map +1 -0
  18. package/dist/context/entity.d.ts +1 -0
  19. package/dist/context/entity.d.ts.map +1 -0
  20. package/dist/context/factory.d.ts +1 -0
  21. package/dist/context/factory.d.ts.map +1 -0
  22. package/dist/context/index.d.ts +1 -0
  23. package/dist/context/index.d.ts.map +1 -0
  24. package/dist/context/label.d.ts +1 -0
  25. package/dist/context/label.d.ts.map +1 -0
  26. package/dist/context/page.d.ts +1 -0
  27. package/dist/context/page.d.ts.map +1 -0
  28. package/dist/context/questions.d.ts +1 -0
  29. package/dist/context/questions.d.ts.map +1 -0
  30. package/dist/context/types.d.ts +1 -0
  31. package/dist/context/types.d.ts.map +1 -0
  32. package/dist/functions.d.ts +1 -0
  33. package/dist/functions.d.ts.map +1 -0
  34. package/dist/hook.d.ts +1 -0
  35. package/dist/hook.d.ts.map +1 -0
  36. package/dist/index.d.ts +2 -0
  37. package/dist/index.d.ts.map +1 -0
  38. package/dist/index.js +2 -1
  39. package/dist/index.js.map +1 -0
  40. package/dist/inline/index.d.ts +4 -0
  41. package/dist/inline/index.d.ts.map +1 -0
  42. package/dist/inline/inlineAssistant.d.ts +28 -0
  43. package/dist/inline/inlineAssistant.d.ts.map +1 -0
  44. package/dist/inline/types.d.ts +79 -0
  45. package/dist/inline/types.d.ts.map +1 -0
  46. package/dist/inline/useInlineAssistant.d.ts +44 -0
  47. package/dist/inline/useInlineAssistant.d.ts.map +1 -0
  48. package/dist/plugin.d.ts +1 -0
  49. package/dist/plugin.d.ts.map +1 -0
  50. package/dist/sidebar.d.ts +3 -0
  51. package/dist/sidebar.d.ts.map +1 -0
  52. package/dist/utils/hash.d.ts +1 -0
  53. package/dist/utils/hash.d.ts.map +1 -0
  54. package/package.json +4 -2
package/README.md CHANGED
@@ -570,6 +570,7 @@ A pre-built React component that renders a button to open the Grafana Assistant
570
570
  - `title?: string` - Text to display on the button (defaults to `'Analyze with Assistant'`)
571
571
  - `size?: 'xs' | 'sm' | 'md' | 'lg'` - Button size (defaults to `'sm'`)
572
572
  - `iconOnlyButton?: boolean` - If `true`, renders as an icon-only button with tooltip (defaults to `false`)
573
+ - `onClick?`- Function to call when the button is clicked (defaults to undefined)
573
574
 
574
575
  **Returns:** JSX element or `null` if assistant is not available
575
576
 
@@ -16,6 +16,8 @@ export interface OpenAssistantButtonProps {
16
16
  size?: 'xs' | 'sm' | 'md' | 'lg';
17
17
  /** If true, the button will be Assistant icon only with name as title. Defaults to false. */
18
18
  iconOnlyButton?: boolean;
19
+ /** Function to call when the button is clicked. Optional, defaults to undefined. */
20
+ onClick?: () => void;
19
21
  }
20
22
  /**
21
23
  * A button component that opens the Grafana Assistant with configurable prompt and context.
@@ -25,6 +27,7 @@ export declare function OpenAssistantButton(props: OpenAssistantButtonProps): Re
25
27
  * Presentational component separated from OpenAssistantButton to avoid hook dependencies in Storybook.
26
28
  * It is not exported for users of the package.
27
29
  */
28
- export declare function OpenAssistantButtonView({ prompt, origin, context, autoSend, title, size, iconOnlyButton, openAssistant, }: OpenAssistantButtonProps & {
30
+ export declare function OpenAssistantButtonView({ prompt, origin, context, autoSend, title, size, iconOnlyButton, openAssistant, onClick, }: OpenAssistantButtonProps & {
29
31
  openAssistant: (props: OpenAssistantProps) => void;
30
32
  }): React.JSX.Element;
33
+ //# sourceMappingURL=OpenAssistantButton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpenAssistantButton.d.ts","sourceRoot":"","sources":["../../src/components/OpenAssistantButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoB,MAAM,OAAO,CAAC;AAGzC,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAGhD,MAAM,WAAW,wBAAwB;IACvC,oDAAoD;IACpD,MAAM,EAAE,MAAM,CAAC;IACf,iUAAiU;IACjU,MAAM,EAAE,MAAM,CAAC;IACf,iIAAiI;IACjI,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;IAC5B,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,oFAAoF;IACpF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kCAAkC;IAClC,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IACjC,6FAA6F;IAC7F,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,oFAAoF;IACpF,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,4BAOlE;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,EACtC,MAAM,EACN,MAAM,EACN,OAAO,EACP,QAAe,EACf,KAAgC,EAChC,IAAW,EACX,cAAsB,EACtB,aAAa,EACb,OAAO,GACR,EAAE,wBAAwB,GAAG;IAC5B,aAAa,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;CACpD,qBA6CA"}
@@ -8,3 +8,4 @@ export declare const IconOnly: Story;
8
8
  export declare const LargeButton: Story;
9
9
  export declare const CustomTitle: Story;
10
10
  export declare const WithBackground: Story;
11
+ //# sourceMappingURL=OpenAssistantButton.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpenAssistantButton.stories.d.ts","sourceRoot":"","sources":["../../src/components/OpenAssistantButton.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAGhE,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,uBAAuB,CA0B9C,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAEtD,eAAO,MAAM,OAAO,EAAE,KASrB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAStB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KASzB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KASzB,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAgC5B,CAAC"}
@@ -1 +1,2 @@
1
1
  export { OpenAssistantButton, type OpenAssistantButtonProps } from './OpenAssistantButton';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,KAAK,wBAAwB,EAAE,MAAM,uBAAuB,CAAC"}
@@ -28,3 +28,4 @@ export declare class StructuredNodeData extends NodeData {
28
28
  constructor(params: StructuredNodeDataParams);
29
29
  formatForLLM(codeElementIds?: string[]): ContextItemData;
30
30
  }
31
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/context/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,KAAK,eAAe,EAAwB,MAAM,SAAS,CAAC;AAGnF,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,IAAI,CAAC,EAAE,QAAQ,CAAC;CACjB;AAED,MAAM,WAAW,cAAe,SAAQ,UAAU;IAChD,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,YAAY,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,QAAQ;IAKA,MAAM,EAAE,cAAc;IAJlC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,SAAM;IACV,IAAI,EAAE,YAAY,CAAC;gBAEP,MAAM,EAAE,cAAc;IAKzC,YAAY,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,eAAe;IAWxD,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;CAMhC;AAED,MAAM,WAAW,wBAAyB,SAAQ,UAAU;IAC1D,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC3B;AAED,qBAAa,kBAAmB,SAAQ,QAAQ;IACvC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;gBACrB,MAAM,EAAE,wBAAwB;IAK5C,YAAY,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,eAAe;CAOzD"}
@@ -34,3 +34,4 @@ import { ChatContextItem } from './types';
34
34
  * ```
35
35
  */
36
36
  export declare function createAssistantContextItem<T extends keyof ContextTypeRegistry>(type: T, params: ContextTypeRegistry[T]['params']): ChatContextItem;
37
+ //# sourceMappingURL=chat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/context/chat.ts"],"names":[],"mappings":"AAEA,OAAO,EAAuB,mBAAmB,EAAE,MAAM,WAAW,CAAC;AACrE,OAAO,EAAE,eAAe,EAAgB,MAAM,SAAS,CAAC;AA2BxD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,0BAA0B,CAAC,CAAC,SAAS,MAAM,mBAAmB,EAC5E,IAAI,EAAE,CAAC,EACP,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GACvC,eAAe,CAgBjB"}
@@ -36,3 +36,4 @@ export declare function usePageComponents(): Record<string, ComponentImplementat
36
36
  export declare function provideComponents(prompt: string, namespace: string, components: Record<string, ComponentImplementation>, urlPattern?: string | RegExp): ((context: import("./types").ChatContextItem[]) => void) & {
37
37
  unregister: () => void;
38
38
  };
39
+ //# sourceMappingURL=component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../src/context/component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAW,MAAM,OAAO,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,KAAK,eAAe,EAA0B,MAAM,SAAS,CAAC;AAIvE,MAAM,MAAM,uBAAuB,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;AACzD,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;AAEtE;;GAEG;AACH,MAAM,WAAW,4BAA6B,SAAQ,UAAU;IAC9D,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,iBAAkB,SAAQ,QAAQ;IACtC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;gBAEb,MAAM,EAAE,4BAA4B;IAQhD,YAAY,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,eAAe;CAWzD;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CA0B3E;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,EACnD,UAAU,GAAE,MAAM,GAAG,MAAa;;EASnC"}
@@ -25,3 +25,4 @@ export declare class FolderNodeData extends NodeData {
25
25
  constructor(params: CreateFolderContextParams);
26
26
  formatForLLM(codeElementIds?: string[]): ContextItemData;
27
27
  }
28
+ //# sourceMappingURL=dashboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../src/context/dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,KAAK,eAAe,EAA+C,MAAM,SAAS,CAAC;AAE5F,MAAM,WAAW,4BAA6B,SAAQ,UAAU;IAC9D,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,yBAA0B,SAAQ,UAAU;IAC3D,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,iBAAkB,SAAQ,QAAQ;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;gBAEhB,MAAM,EAAE,4BAA4B;IAShD,YAAY,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,eAAe;CAczD;AAED,qBAAa,cAAe,SAAQ,QAAQ;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,SAAM;gBAEL,MAAM,EAAE,yBAAyB;IAO7C,YAAY,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,eAAe;CAYzD"}
@@ -17,3 +17,4 @@ export declare class DatasourceNodeData extends NodeData {
17
17
  constructor(params: CreateDatasourceContextParams & DatasourceMeta);
18
18
  formatForLLM(codeElementIds?: string[]): ContextItemData;
19
19
  }
20
+ //# sourceMappingURL=datasource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datasource.d.ts","sourceRoot":"","sources":["../../src/context/datasource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,KAAK,eAAe,EAA2B,MAAM,SAAS,CAAC;AAExE;;;;GAIG;AACH,MAAM,WAAW,6BAA8B,SAAQ,UAAU;IAC/D,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,kBAAmB,SAAQ,QAAQ;IACvC,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;gBAER,MAAM,EAAE,6BAA6B,GAAG,cAAc;IASlE,YAAY,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,eAAe;CAazD"}
@@ -25,3 +25,4 @@ export declare class EntityNodeData extends NodeData {
25
25
  constructor(params: CreateEntityContextParams);
26
26
  formatForLLM(codeElementIds?: string[]): ContextItemData;
27
27
  }
28
+ //# sourceMappingURL=entity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity.d.ts","sourceRoot":"","sources":["../../src/context/entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,KAAK,eAAe,EAAuB,MAAM,SAAS,CAAC;AAEpE;;GAEG;AACH,MAAM,WAAW,yBAA0B,SAAQ,UAAU;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE;QACN,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAClC;AAED,qBAAa,cAAe,SAAQ,QAAQ;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE;QACb,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACK,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;gBAE5B,MAAM,EAAE,yBAAyB;IAiB7C,YAAY,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,eAAe;CAazD"}
@@ -54,3 +54,4 @@ export type DatasourceMeta = {
54
54
  * Creates context nodes based on type with full type safety using generics
55
55
  */
56
56
  export declare function createContextByType<T extends keyof ContextTypeRegistry>(type: T, params: ContextTypeRegistry[T]['params']): ContextTypeRegistry[T]['node'];
57
+ //# sourceMappingURL=factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/context/factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,QAAQ,CAAC;AAChG,OAAO,EAAE,iBAAiB,EAAE,KAAK,4BAA4B,EAAE,MAAM,aAAa,CAAC;AACnF,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,KAAK,4BAA4B,EACjC,KAAK,yBAAyB,EAC/B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,KAAK,6BAA6B,EAAE,MAAM,cAAc,CAAC;AACtF,OAAO,EAAE,cAAc,EAAE,KAAK,yBAAyB,EAAE,MAAM,UAAU,CAAC;AAC1E,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,KAAK,4BAA4B,EACjC,KAAK,6BAA6B,EACnC,MAAM,SAAS,CAAC;AAEjB;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,UAAU,EAAE;QAAE,MAAM,EAAE,6BAA6B,CAAC;QAAC,IAAI,EAAE,kBAAkB,CAAA;KAAE,CAAC;IAChF,UAAU,EAAE;QAAE,MAAM,EAAE,4BAA4B,CAAC;QAAC,IAAI,EAAE,iBAAiB,CAAA;KAAE,CAAC;IAC9E,WAAW,EAAE;QAAE,MAAM,EAAE,6BAA6B,CAAC;QAAC,IAAI,EAAE,kBAAkB,CAAA;KAAE,CAAC;IACjF,SAAS,EAAE;QAAE,MAAM,EAAE,4BAA4B,CAAC;QAAC,IAAI,EAAE,iBAAiB,CAAA;KAAE,CAAC;IAC7E,gBAAgB,EAAE;QAAE,MAAM,EAAE,yBAAyB,CAAC;QAAC,IAAI,EAAE,cAAc,CAAA;KAAE,CAAC;IAC9E,UAAU,EAAE;QAAE,MAAM,EAAE,wBAAwB,CAAC;QAAC,IAAI,EAAE,kBAAkB,CAAA;KAAE,CAAC;IAC3E,SAAS,EAAE;QAAE,MAAM,EAAE,4BAA4B,CAAC;QAAC,IAAI,EAAE,iBAAiB,CAAA;KAAE,CAAC;IAC7E,MAAM,EAAE;QAAE,MAAM,EAAE,yBAAyB,CAAC;QAAC,IAAI,EAAE,cAAc,CAAA;KAAE,CAAC;IACpE,OAAO,EAAE;QAAE,MAAM,EAAE,cAAc,CAAC;QAAC,IAAI,EAAE,QAAQ,CAAA;KAAE,CAAC;CACrD,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAcF;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,MAAM,mBAAmB,EACrE,IAAI,EAAE,CAAC,EACP,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GACvC,mBAAmB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAoChC"}
@@ -9,3 +9,4 @@ export * from './label';
9
9
  export * from './page';
10
10
  export * from './questions';
11
11
  export * from './types';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/context/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC"}
@@ -27,3 +27,4 @@ export declare class LabelValueNodeData extends NodeData {
27
27
  constructor(params: CreateLabelValueContextParams & DatasourceMeta);
28
28
  formatForLLM(codeElementIds?: string[]): ContextItemData;
29
29
  }
30
+ //# sourceMappingURL=label.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"label.d.ts","sourceRoot":"","sources":["../../src/context/label.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,KAAK,eAAe,EAAmD,MAAM,SAAS,CAAC;AAEhG,MAAM,WAAW,4BAA6B,SAAQ,UAAU;IAC9D,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,6BAA8B,SAAQ,4BAA4B;IACjF,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,iBAAkB,SAAQ,QAAQ;IACtC,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;gBAER,MAAM,EAAE,4BAA4B,GAAG,cAAc;IAUjE,YAAY,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,eAAe;CAezD;AAED,qBAAa,kBAAmB,SAAQ,QAAQ;IACvC,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;gBAER,MAAM,EAAE,6BAA6B,GAAG,cAAc;IAWlE,YAAY,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,eAAe;CAgBzD"}
@@ -39,3 +39,4 @@ export declare function generateRegistrationId(prefix?: string): string;
39
39
  * @internal This is for testing purposes only
40
40
  */
41
41
  export declare function __clearPageContextRegistryForTesting(): void;
42
+ //# sourceMappingURL=page.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../src/context/page.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAG1C,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,OAAO,EAAE,eAAe,EAAE,CAAC;CAC5B;AA8DD;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,GAAG,MAAM,EAC3B,cAAc,EAAE,eAAe,EAAE,GAChC,CAAC,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,IAAI,CAAC,GAAG;IAAE,UAAU,EAAE,MAAM,IAAI,CAAA;CAAE,CAiDrE;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,GAAG,MAAM,EAC3B,cAAc,GAAE,eAAe,EAAO,GACrC,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,IAAI,CAgCtC;AAoCD,wBAAgB,cAAc,CAC5B,OAAO,GAAE;IAAE,cAAc,EAAE,OAAO,CAAC;IAAC,eAAe,EAAE,OAAO,CAAA;CAAsD,GACjH,eAAe,EAAE,CAkEnB;AAED,wBAAgB,sBAAsB,CAAC,MAAM,SAAiB,GAAG,MAAM,CAEtE;AAyBD;;;;;GAKG;AACH,wBAAgB,oCAAoC,IAAI,IAAI,CAE3D"}
@@ -38,3 +38,4 @@ export declare function useProvideQuestions(urlPattern: string | RegExp, initial
38
38
  * @returns Array of questions from all matching registrations
39
39
  */
40
40
  export declare function useQuestions(): Question[];
41
+ //# sourceMappingURL=questions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"questions.d.ts","sourceRoot":"","sources":["../../src/context/questions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAG1C,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,SAAS,EAAE,QAAQ,EAAE,CAAC;CACvB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,MAAM,GAAG,MAAM,EAC3B,gBAAgB,EAAE,QAAQ,EAAE,GAC3B,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,IAAI,CAAC,GAAG;IAAE,UAAU,EAAE,MAAM,IAAI,CAAA;CAAE,CAmChE;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,GAAG,MAAM,EAC3B,gBAAgB,GAAE,QAAQ,EAAO,GAChC,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,IAAI,CAmCjC;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,IAAI,QAAQ,EAAE,CAKzC"}
@@ -66,3 +66,4 @@ export interface ChatContextItem {
66
66
  node: TreeNode;
67
67
  occurrences: string[];
68
68
  }
69
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/context/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEtC,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAgB,SAAQ,YAAY;CAAG;AACxD,MAAM,MAAM,YAAY,GACpB,SAAS,GACT,YAAY,GACZ,YAAY,GACZ,aAAa,GACb,WAAW,GACX,kBAAkB,GAClB,YAAY,GACZ,WAAW,GACX,QAAQ,CAAC;AAEb,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,YAAY,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC3B;AAGD,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;IAEtB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,SAAS,EAAE,OAAO,CAAC;IAEnB,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,IAAI,CAAC,EAAE,QAAQ,CAAC;IAEhB,IAAI,CAAC,EAAE,GAAG,CAAC;CACZ;AAED,MAAM,WAAW,kBAAmB,SAAQ,YAAY;IACtD,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,iBAAkB,SAAQ,YAAY;IACrD,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAmB,SAAQ,iBAAiB;IAC3D,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAkB,SAAQ,YAAY;IACrD,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAe,SAAQ,YAAY;IAClD,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAkB,SAAQ,YAAY;IACrD,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAe,SAAQ,YAAY;IAClD,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE;QACN,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,QAAQ,CAAC;IACf,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB"}
@@ -9,3 +9,4 @@ export type FunctionNamespace = {
9
9
  };
10
10
  export declare function newFunctionNamespace(namespace: string, functions: NamedFunctions): FunctionNamespace;
11
11
  export declare function getExposeAssistantFunctionsConfig(namespaces: FunctionNamespace[]): PluginExtensionAddedFunctionConfig<() => FunctionNamespace[]>;
12
+ //# sourceMappingURL=functions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"functions.d.ts","sourceRoot":"","sources":["../src/functions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kCAAkC,EAAE,MAAM,eAAe,CAAC;AAEnE,MAAM,MAAM,gBAAgB,GAAG,MAAM,iBAAiB,EAAE,CAAC;AACzD,MAAM,MAAM,sBAAsB,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC;AAC7D,eAAO,MAAM,wBAAwB,4CAA4C,CAAC;AAElF,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;AACpE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,cAAc,CAAC;CAC3B,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,GAAG,iBAAiB,CAKpG;AAED,wBAAgB,iCAAiC,CAC/C,UAAU,EAAE,iBAAiB,EAAE,GAC9B,kCAAkC,CAAC,MAAM,iBAAiB,EAAE,CAAC,CAa/D"}
package/dist/hook.d.ts CHANGED
@@ -10,3 +10,4 @@ export type AssistantHook = {
10
10
  * @returns {AssistantHook}
11
11
  */
12
12
  export declare function useAssistant(): AssistantHook;
13
+ //# sourceMappingURL=hook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../src/hook.ts"],"names":[],"mappings":"AAEA,OAAO,EAAkD,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAE/F,MAAM,MAAM,aAAa,GAAG;IAC1B,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,CAAC,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACjE,cAAc,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;IACzC,eAAe,EAAE,CAAC,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CACpE,CAAC;AACF;;;GAGG;AACH,wBAAgB,YAAY,IAAI,aAAa,CAgB5C"}
package/dist/index.d.ts CHANGED
@@ -4,3 +4,5 @@ export * from './hook';
4
4
  export * from './plugin';
5
5
  export * from './sidebar';
6
6
  export * from './components';
7
+ export * from './inline';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAC1B,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,cAAc,EACd,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,QAAQ,EACR,kBAAkB,EAClB,qBAAqB,EACrB,uBAAuB,EACvB,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACnB,YAAY,EACZ,QAAQ,EACR,oBAAoB,EAEpB,iBAAiB,EACjB,iBAAiB,EACjB,uBAAuB,EACvB,eAAe,GAChB,MAAM,iBAAiB,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC"}
package/dist/index.js CHANGED
@@ -1 +1,2 @@
1
- (()=>{"use strict";var e={n:t=>{var n=t&&t.__esModule?()=>t.default:()=>t;return e.d(n,{a:n}),n},d:(t,n)=>{for(var a in n)e.o(n,a)&&!e.o(t,a)&&Object.defineProperty(t,a,{enumerable:!0,get:n[a]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};function n(e){let t=5381;for(let n=0;n<e.length;n++)t=(t<<5)+t+e.charCodeAt(n);return(t>>>0).toString(16)}e.r(t),e.d(t,{ASSISTANT_PLUGIN_ID:()=>q,ASSISTANT_PLUGIN_TITLE:()=>D,CALLBACK_EXTENSION_POINT:()=>P,ComponentNodeData:()=>y,DashboardNodeData:()=>k,DatasourceNodeData:()=>$,EntityNodeData:()=>A,FolderNodeData:()=>E,LabelNameNodeData:()=>S,LabelValueNodeData:()=>C,OpenAssistantButton:()=>mt,StructuredNodeData:()=>r,closeAssistant:()=>W,createAssistantContextItem:()=>L,getExposeAssistantFunctionsConfig:()=>j,isAssistantAvailable:()=>F,newFunctionNamespace:()=>M,openAssistant:()=>Q,provideComponents:()=>w,providePageContext:()=>h,provideQuestions:()=>_,toggleAssistant:()=>H,useAssistant:()=>J,usePageComponents:()=>x,usePageContext:()=>v,useProvidePageContext:()=>m,useProvideQuestions:()=>I,useQuestions:()=>U});class a{constructor(e){this.params=e,this.text="",this.id=n(e.id),this.type=e.type}formatForLLM(e){var t,n;return{type:this.type,codeElementIds:e,data:{name:null!==(t=this.params.text)&&void 0!==t?t:"",text:null!==(n=this.params.text)&&void 0!==n?n:""}}}equals(e){return e instanceof a&&this.id===e.id&&this.type===e.type}}class r extends a{constructor(e){super({...e,id:n(JSON.stringify(e.data)),type:"structured"}),this.data=e.data}formatForLLM(e){return{type:this.type,codeElementIds:e,data:this.data}}}const s=require("@grafana/runtime"),o=require("react");var i=e.n(o);const c=[],u="grafana-assistant:page-context-sync",l="grafana-assistant:page-context-update",d="grafana-assistant:page-context-remove",p="grafana-assistant:location-changed";let f=!1;function h(e,t){const n={id:g(),urlPattern:e,context:[...t]};c.push(n),window.dispatchEvent(new CustomEvent(l,{detail:n})),window.dispatchEvent(new CustomEvent(u,{detail:{registry:c}}));const a=e=>{const t=c.findIndex((e=>e.id===n.id));-1!==t&&(c[t].context=[...e],window.dispatchEvent(new CustomEvent(l,{detail:c[t]})))};return a.unregister=()=>{const e=c.findIndex((e=>e.id===n.id));-1!==e&&(c.splice(e,1),window.dispatchEvent(new CustomEvent(d,{detail:{id:n.id}})))},a}function m(e,t=[]){const n=(0,o.useRef)(void 0),a=(0,o.useRef)(t);return a.current=t,(0,o.useEffect)((()=>(n.current=h(e,a.current),()=>{var e;null===(e=n.current)||void 0===e||e.unregister()})),[e]),(0,o.useEffect)((()=>{n.current&&n.current(t)}),[t]),(0,o.useCallback)((e=>{var t;null===(t=n.current)||void 0===t||t.call(n,e)}),[])}function v(e={allowQuestions:!1,allowComponents:!1}){const[t,n]=(0,o.useState)([]),a=(0,s.useLocationService)(),r=(0,o.useRef)("");(0,o.useEffect)((()=>{const e=()=>{const e=function(e,t){if(!e)return[];const n=[];for(const a of t)b(e,a.urlPattern)&&n.push(...a.context);return n}(a.getLocation().pathname,c);n(e)},t=()=>{e()},s=t=>{var n;const r=null===(n=t.detail)||void 0===n?void 0:n.pathname;r&&r===a.getLocation().pathname&&e()},o=a.getLocationObservable().subscribe((t=>{const n=t.pathname;n!==r.current&&(r.current=n,function(e){window.dispatchEvent(new CustomEvent(p,{detail:{pathname:e}}))}(n),e())}));return e(),window.addEventListener(u,t),window.addEventListener(l,t),window.addEventListener(d,t),window.addEventListener(p,s),()=>{o.unsubscribe(),window.removeEventListener(u,t),window.removeEventListener(l,t),window.removeEventListener(d,t),window.removeEventListener(p,s)}}),[a]);let i=t;return e.allowQuestions||(i=i.filter((e=>{var t;return"question"!==(null===(t=e.node.data)||void 0===t?void 0:t.type)}))),e.allowComponents||(i=i.filter((e=>{var t;return"component"!==(null===(t=e.node.data)||void 0===t?void 0:t.type)}))),i}function g(e="page-context"){return`${e}-${Date.now()}-${Math.random().toString(36).slice(2,11)}`}function b(e,t){if(t instanceof RegExp)return t.test(e);if("string"==typeof t){const n=t.replace(/\*\*/g,"\0DOUBLE_STAR\0").replace(/\*/g,"[^/]*").replace(/\u0000DOUBLE_STAR\u0000/g,".*").replace(/\?/g,".");return new RegExp(`^${n}$`).test(e)}return!1}f||(window.addEventListener(u,(e=>{var t;const n=null===(t=e.detail)||void 0===t?void 0:t.registry;if(n){const e=new Set(c.map((e=>e.id))),t=n.filter((t=>!e.has(t.id)));c.push(...t)}})),window.addEventListener(l,(e=>{const t=e.detail;if(t){const e=c.findIndex((e=>e.id===t.id));-1!==e?c[e]=t:c.push(t)}})),window.addEventListener(d,(e=>{var t;const n=null===(t=e.detail)||void 0===t?void 0:t.id;if(n){const e=c.findIndex((e=>e.id===n));-1!==e&&c.splice(e,1)}})),f=!0);class y extends a{constructor(e){const t=e.namespace||"components";super({...e,id:`${t}-${Object.keys(e.components).join("-")}`,type:"component"}),this.components=e.components,this.prompt=e.prompt,this.namespace=t}formatForLLM(e){return{type:this.type,codeElementIds:e,data:{name:`${this.namespace} components`,prompt:this.prompt,namespace:this.namespace}}}}function x(){const e=v({allowComponents:!0,allowQuestions:!1});return(0,o.useMemo)((()=>{const t={};return e.filter((e=>{var t;return null===(t=e.node.data)||void 0===t?void 0:t.components})).forEach((e=>{const n=e.node.data;if(null==n?void 0:n.components){const e=n.namespace||n.name||"components";Object.entries(n.components).forEach((([n,a])=>{t[`${e}_${n}`]=a}))}})),t}),[e])}function w(e,t,n,a=/.*/){return h(a,[L("component",{components:n,prompt:e,namespace:t})])}class k extends a{constructor(e){super({...e,id:e.dashboardUid,type:"dashboard"}),this.dashboardUid=e.dashboardUid,this.dashboardTitle=e.dashboardTitle,this.folderUid=e.folderUid,this.folderTitle=e.folderTitle,this.text=e.dashboardTitle}formatForLLM(e){return{type:this.type,codeElementIds:e,data:{name:this.dashboardTitle,dashboardUid:this.dashboardUid,dashboardTitle:this.dashboardTitle,folderUid:this.folderUid,folderTitle:this.folderTitle,text:this.text}}}}class E extends a{constructor(e){super({...e,id:e.folderUid,type:"dashboard_folder"}),this.text="",this.folderUid=e.folderUid,this.folderTitle=e.folderTitle,this.text=e.folderTitle}formatForLLM(e){return{type:this.type,codeElementIds:e,data:{name:this.folderTitle,folderUid:this.folderUid,folderTitle:this.folderTitle,text:this.text}}}}class $ extends a{constructor(e){super({...e,id:e.datasourceUid,type:"datasource"}),this.datasourceUid=e.datasourceUid,this.datasourceType=e.datasourceType,this.datasourceName=e.datasourceName,this.img=e.img,this.text=e.datasourceName}formatForLLM(e){return{type:this.type,codeElementIds:e,data:{name:this.datasourceName,uid:this.datasourceUid,type:this.datasourceType,text:this.text,img:this.img}}}}class A extends a{constructor(e){var t,n,a;super({id:`${e.type}-${e.name}-${[null===(t=e.scope)||void 0===t?void 0:t.env,null===(n=e.scope)||void 0===n?void 0:n.site,null===(a=e.scope)||void 0===a?void 0:a.namespace].filter(Boolean).join("-")}`,type:"entity",title:e.title,hidden:e.hidden,img:e.img,icon:e.icon,text:e.name}),this.entityType=e.type,this.name=e.name,this.scope=e.scope,this.properties=e.properties,this.text=e.name}formatForLLM(e){return{type:"entity",codeElementIds:e,data:{name:this.name,text:this.text,type:this.entityType,scope:this.scope,properties:this.properties}}}}class S extends a{constructor(e){super({...e,id:`${e.datasourceUid}-${e.labelName}`,type:"label_name"}),this.datasourceUid=e.datasourceUid,this.datasourceType=e.datasourceType,this.datasourceName=e.datasourceName,this.labelName=e.labelName,this.text=e.labelName,this.img=e.img}formatForLLM(e){return{type:this.type,codeElementIds:e,data:{name:this.labelName,datasourceUid:this.datasourceUid,datasourceType:this.datasourceType,datasourceName:this.datasourceName,labelName:this.labelName,img:this.img,text:this.text}}}}class C extends a{constructor(e){super({...e,id:`${e.datasourceUid}-${e.labelName}-${e.labelValue}`,type:"label_value"}),this.datasourceUid=e.datasourceUid,this.datasourceType=e.datasourceType,this.datasourceName=e.datasourceName,this.labelName=e.labelName,this.labelValue=e.labelValue,this.text=e.labelValue,this.img=e.img}formatForLLM(e){return{type:this.type,codeElementIds:e,data:{name:this.labelValue,datasourceUid:this.datasourceUid,datasourceType:this.datasourceType,datasourceName:this.datasourceName,labelName:this.labelName,labelValue:this.labelValue,text:this.text,img:this.img}}}}function N(e){var t,n,a,r,o;const i=(0,s.getDataSourceSrv)().getInstanceSettings(e);return{datasourceType:null!==(t=null==i?void 0:i.type)&&void 0!==t?t:"unknown",datasourceName:null!==(n=null==i?void 0:i.name)&&void 0!==n?n:e,img:null===(o=null===(r=null===(a=null==i?void 0:i.meta)||void 0===a?void 0:a.info)||void 0===r?void 0:r.logos)||void 0===o?void 0:o.small}}const T={datasource:"database",label_name:"database",label_value:"database",dashboard:"dashboard",dashboard_folder:"folder",unknown:"circle-mono",structured:"gf-grid",component:"gf-grid",entity:"asserts"};function L(e,t){var n,s,o;const i=function(e,t){switch(e){case"datasource":return new $({...t,...N(t.datasourceUid)});case"label_name":return new S({...t,...N(t.datasourceUid)});case"label_value":return new C({...t,...N(t.datasourceUid)});case"dashboard":return new k(t);case"dashboard_folder":return new E(t);case"structured":return new r(t);case"component":return new y({...t,hidden:!0});case"entity":return new A(t);case"unknown":return new a(t);default:return console.error(`Unknown context type: ${e}`),new a(t)}}(e,t),c=null!==(n=t.title)&&void 0!==n?n:function(e){var t;return e instanceof r?e.formatForLLM().data.name:null!==(t=e.text)&&void 0!==t?t:"Given Context"}(i),u=null!==(s=t.img)&&void 0!==s?s:function(e){if("img"in e)return e.img}(i);return{node:{id:i.id,name:c,img:u,icon:null!==(o=t.icon)&&void 0!==o?o:T[e],navigable:!1,selectable:!0,data:i},occurrences:[]}}function _(e,t){const n=g("question"),a=e=>e.map(((e,t)=>({node:{id:`question-${n}-${t}`,name:e.prompt,navigable:!1,selectable:!0,icon:"question-circle",data:{type:"question",prompt:e.prompt,context:e.context||[]}},occurrences:[]}))),r=h(e,a(t)),s=e=>{r(a(e))};return s.unregister=r.unregister,s}function I(e,t=[]){const n=(0,o.useMemo)((()=>g("question")),[]),a=e=>e.map(((e,t)=>({node:{id:`question-${n}-${t}`,name:e.prompt,navigable:!1,selectable:!0,icon:"question-circle",data:{type:"question",prompt:e.prompt,context:e.context||[]}},occurrences:[]}))),r=m(e,a(t));return e=>{r(a(e))}}function U(){const e=v({allowQuestions:!0,allowComponents:!1});return O(e)}const O=e=>e.filter((e=>{var t;return"question"===(null===(t=e.node.data)||void 0===t?void 0:t.type)})).map((e=>{var t,n;return{prompt:(null===(t=e.node.data)||void 0===t?void 0:t.prompt)||e.node.name,context:(null===(n=e.node.data)||void 0===n?void 0:n.context)||[]}})),P="grafana-assistant-app/callback/v0-alpha";function M(e,t){return{namespace:e,functions:t}}function j(e){return{title:"callback",targets:[P],fn:()=>e.map((e=>({namespace:e.namespace,functions:e.functions})))}}const R=require("rxjs"),q="grafana-assistant-app",D="Grafana Assistant";function F(){if(!s.getObservablePluginLinks)return(0,R.of)(!1);return(0,s.getObservablePluginLinks)({extensionPointId:"grafana/extension-sidebar/v0-alpha"}).pipe((0,R.map)((e=>e.some((e=>e.pluginId===q&&e.title===D)))))}const z=require("@grafana/data");class B extends z.BusEventWithPayload{}B.type="open-extension-sidebar";class G extends z.BusEventBase{}G.type="close-extension-sidebar";class V extends z.BusEventWithPayload{}function Q(e){var t,n;(0,s.reportInteraction)("grafana_assistant_app_opened_sidebar",{from:e.origin,prompt:null!==(t=e.prompt)&&void 0!==t?t:""}),function(e,t,n){const a=new B({pluginId:e,componentTitle:t,props:n});(0,s.getAppEvents)().publish(a)}(q,D,{initialPrompt:e.prompt,initialContext:e.context,initialAutoSend:null===(n=e.autoSend)||void 0===n||n,origin:e.origin})}function W(){!function(){const e=new G;(0,s.getAppEvents)().publish(e)}()}function H(e){var t,n;(0,s.reportInteraction)("grafana_assistant_app_toggled_sidebar",{from:e.origin,prompt:null!==(t=e.prompt)&&void 0!==t?t:""}),function(e,t,n){const a=new V({pluginId:e,componentTitle:t,props:n});(0,s.getAppEvents)().publish(a)}(q,D,{initialPrompt:e.prompt,initialContext:e.context,initialAutoSend:null===(n=e.autoSend)||void 0===n||n,origin:e.origin})}function J(){const[e,t]=(0,o.useState)(!1);return(0,o.useEffect)((()=>{const e=F().subscribe((e=>t(e)));return()=>{e.unsubscribe()}}),[]),{isAvailable:e,openAssistant:e?Q:void 0,closeAssistant:e?W:void 0,toggleAssistant:e?H:void 0}}V.type="toggle-extension-sidebar";const K=require("@grafana/ui");var X=function(){function e(e){var t=this;this._insertTag=function(e){var n;n=0===t.tags.length?t.insertionPoint?t.insertionPoint.nextSibling:t.prepend?t.container.firstChild:t.before:t.tags[t.tags.length-1].nextSibling,t.container.insertBefore(e,n),t.tags.push(e)},this.isSpeedy=void 0===e.speedy||e.speedy,this.tags=[],this.ctr=0,this.nonce=e.nonce,this.key=e.key,this.container=e.container,this.prepend=e.prepend,this.insertionPoint=e.insertionPoint,this.before=null}var t=e.prototype;return t.hydrate=function(e){e.forEach(this._insertTag)},t.insert=function(e){this.ctr%(this.isSpeedy?65e3:1)==0&&this._insertTag(function(e){var t=document.createElement("style");return t.setAttribute("data-emotion",e.key),void 0!==e.nonce&&t.setAttribute("nonce",e.nonce),t.appendChild(document.createTextNode("")),t.setAttribute("data-s",""),t}(this));var t=this.tags[this.tags.length-1];if(this.isSpeedy){var n=function(e){if(e.sheet)return e.sheet;for(var t=0;t<document.styleSheets.length;t++)if(document.styleSheets[t].ownerNode===e)return document.styleSheets[t]}(t);try{n.insertRule(e,n.cssRules.length)}catch(e){}}else t.appendChild(document.createTextNode(e));this.ctr++},t.flush=function(){this.tags.forEach((function(e){var t;return null==(t=e.parentNode)?void 0:t.removeChild(e)})),this.tags=[],this.ctr=0},e}(),Z=Math.abs,Y=String.fromCharCode,ee=Object.assign;function te(e){return e.trim()}function ne(e,t,n){return e.replace(t,n)}function ae(e,t){return e.indexOf(t)}function re(e,t){return 0|e.charCodeAt(t)}function se(e,t,n){return e.slice(t,n)}function oe(e){return e.length}function ie(e){return e.length}function ce(e,t){return t.push(e),e}var ue=1,le=1,de=0,pe=0,fe=0,he="";function me(e,t,n,a,r,s,o){return{value:e,root:t,parent:n,type:a,props:r,children:s,line:ue,column:le,length:o,return:""}}function ve(e,t){return ee(me("",null,null,"",null,null,0),e,{length:-e.length},t)}function ge(){return fe=pe>0?re(he,--pe):0,le--,10===fe&&(le=1,ue--),fe}function be(){return fe=pe<de?re(he,pe++):0,le++,10===fe&&(le=1,ue++),fe}function ye(){return re(he,pe)}function xe(){return pe}function we(e,t){return se(he,e,t)}function ke(e){switch(e){case 0:case 9:case 10:case 13:case 32:return 5;case 33:case 43:case 44:case 47:case 62:case 64:case 126:case 59:case 123:case 125:return 4;case 58:return 3;case 34:case 39:case 40:case 91:return 2;case 41:case 93:return 1}return 0}function Ee(e){return ue=le=1,de=oe(he=e),pe=0,[]}function $e(e){return he="",e}function Ae(e){return te(we(pe-1,Ne(91===e?e+2:40===e?e+1:e)))}function Se(e){for(;(fe=ye())&&fe<33;)be();return ke(e)>2||ke(fe)>3?"":" "}function Ce(e,t){for(;--t&&be()&&!(fe<48||fe>102||fe>57&&fe<65||fe>70&&fe<97););return we(e,xe()+(t<6&&32==ye()&&32==be()))}function Ne(e){for(;be();)switch(fe){case e:return pe;case 34:case 39:34!==e&&39!==e&&Ne(fe);break;case 40:41===e&&Ne(e);break;case 92:be()}return pe}function Te(e,t){for(;be()&&e+fe!==57&&(e+fe!==84||47!==ye()););return"/*"+we(t,pe-1)+"*"+Y(47===e?e:be())}function Le(e){for(;!ke(ye());)be();return we(e,pe)}var _e="-ms-",Ie="-moz-",Ue="-webkit-",Oe="comm",Pe="rule",Me="decl",je="@keyframes";function Re(e,t){for(var n="",a=ie(e),r=0;r<a;r++)n+=t(e[r],r,e,t)||"";return n}function qe(e,t,n,a){switch(e.type){case"@layer":if(e.children.length)break;case"@import":case Me:return e.return=e.return||e.value;case Oe:return"";case je:return e.return=e.value+"{"+Re(e.children,a)+"}";case Pe:e.value=e.props.join(",")}return oe(n=Re(e.children,a))?e.return=e.value+"{"+n+"}":""}function De(e){return $e(Fe("",null,null,null,[""],e=Ee(e),0,[0],e))}function Fe(e,t,n,a,r,s,o,i,c){for(var u=0,l=0,d=o,p=0,f=0,h=0,m=1,v=1,g=1,b=0,y="",x=r,w=s,k=a,E=y;v;)switch(h=b,b=be()){case 40:if(108!=h&&58==re(E,d-1)){-1!=ae(E+=ne(Ae(b),"&","&\f"),"&\f")&&(g=-1);break}case 34:case 39:case 91:E+=Ae(b);break;case 9:case 10:case 13:case 32:E+=Se(h);break;case 92:E+=Ce(xe()-1,7);continue;case 47:switch(ye()){case 42:case 47:ce(Be(Te(be(),xe()),t,n),c);break;default:E+="/"}break;case 123*m:i[u++]=oe(E)*g;case 125*m:case 59:case 0:switch(b){case 0:case 125:v=0;case 59+l:-1==g&&(E=ne(E,/\f/g,"")),f>0&&oe(E)-d&&ce(f>32?Ge(E+";",a,n,d-1):Ge(ne(E," ","")+";",a,n,d-2),c);break;case 59:E+=";";default:if(ce(k=ze(E,t,n,u,l,r,i,y,x=[],w=[],d),s),123===b)if(0===l)Fe(E,t,k,k,x,s,d,i,w);else switch(99===p&&110===re(E,3)?100:p){case 100:case 108:case 109:case 115:Fe(e,k,k,a&&ce(ze(e,k,k,0,0,r,i,y,r,x=[],d),w),r,w,d,i,a?x:w);break;default:Fe(E,k,k,k,[""],w,0,i,w)}}u=l=f=0,m=g=1,y=E="",d=o;break;case 58:d=1+oe(E),f=h;default:if(m<1)if(123==b)--m;else if(125==b&&0==m++&&125==ge())continue;switch(E+=Y(b),b*m){case 38:g=l>0?1:(E+="\f",-1);break;case 44:i[u++]=(oe(E)-1)*g,g=1;break;case 64:45===ye()&&(E+=Ae(be())),p=ye(),l=d=oe(y=E+=Le(xe())),b++;break;case 45:45===h&&2==oe(E)&&(m=0)}}return s}function ze(e,t,n,a,r,s,o,i,c,u,l){for(var d=r-1,p=0===r?s:[""],f=ie(p),h=0,m=0,v=0;h<a;++h)for(var g=0,b=se(e,d+1,d=Z(m=o[h])),y=e;g<f;++g)(y=te(m>0?p[g]+" "+b:ne(b,/&\f/g,p[g])))&&(c[v++]=y);return me(e,t,n,0===r?Pe:i,c,u,l)}function Be(e,t,n){return me(e,t,n,Oe,Y(fe),se(e,2,-2),0)}function Ge(e,t,n,a){return me(e,t,n,Me,se(e,0,a),se(e,a+1,-1),a)}var Ve=function(e,t,n){for(var a=0,r=0;a=r,r=ye(),38===a&&12===r&&(t[n]=1),!ke(r);)be();return we(e,pe)},Qe=new WeakMap,We=function(e){if("rule"===e.type&&e.parent&&!(e.length<1)){for(var t=e.value,n=e.parent,a=e.column===n.column&&e.line===n.line;"rule"!==n.type;)if(!(n=n.parent))return;if((1!==e.props.length||58===t.charCodeAt(0)||Qe.get(n))&&!a){Qe.set(e,!0);for(var r=[],s=function(e,t){return $e(function(e,t){var n=-1,a=44;do{switch(ke(a)){case 0:38===a&&12===ye()&&(t[n]=1),e[n]+=Ve(pe-1,t,n);break;case 2:e[n]+=Ae(a);break;case 4:if(44===a){e[++n]=58===ye()?"&\f":"",t[n]=e[n].length;break}default:e[n]+=Y(a)}}while(a=be());return e}(Ee(e),t))}(t,r),o=n.props,i=0,c=0;i<s.length;i++)for(var u=0;u<o.length;u++,c++)e.props[c]=r[i]?s[i].replace(/&\f/g,o[u]):o[u]+" "+s[i]}}},He=function(e){if("decl"===e.type){var t=e.value;108===t.charCodeAt(0)&&98===t.charCodeAt(2)&&(e.return="",e.value="")}};function Je(e,t){switch(function(e,t){return 45^re(e,0)?(((t<<2^re(e,0))<<2^re(e,1))<<2^re(e,2))<<2^re(e,3):0}(e,t)){case 5103:return Ue+"print-"+e+e;case 5737:case 4201:case 3177:case 3433:case 1641:case 4457:case 2921:case 5572:case 6356:case 5844:case 3191:case 6645:case 3005:case 6391:case 5879:case 5623:case 6135:case 4599:case 4855:case 4215:case 6389:case 5109:case 5365:case 5621:case 3829:return Ue+e+e;case 5349:case 4246:case 4810:case 6968:case 2756:return Ue+e+Ie+e+_e+e+e;case 6828:case 4268:return Ue+e+_e+e+e;case 6165:return Ue+e+_e+"flex-"+e+e;case 5187:return Ue+e+ne(e,/(\w+).+(:[^]+)/,Ue+"box-$1$2"+_e+"flex-$1$2")+e;case 5443:return Ue+e+_e+"flex-item-"+ne(e,/flex-|-self/,"")+e;case 4675:return Ue+e+_e+"flex-line-pack"+ne(e,/align-content|flex-|-self/,"")+e;case 5548:return Ue+e+_e+ne(e,"shrink","negative")+e;case 5292:return Ue+e+_e+ne(e,"basis","preferred-size")+e;case 6060:return Ue+"box-"+ne(e,"-grow","")+Ue+e+_e+ne(e,"grow","positive")+e;case 4554:return Ue+ne(e,/([^-])(transform)/g,"$1"+Ue+"$2")+e;case 6187:return ne(ne(ne(e,/(zoom-|grab)/,Ue+"$1"),/(image-set)/,Ue+"$1"),e,"")+e;case 5495:case 3959:return ne(e,/(image-set\([^]*)/,Ue+"$1$`$1");case 4968:return ne(ne(e,/(.+:)(flex-)?(.*)/,Ue+"box-pack:$3"+_e+"flex-pack:$3"),/s.+-b[^;]+/,"justify")+Ue+e+e;case 4095:case 3583:case 4068:case 2532:return ne(e,/(.+)-inline(.+)/,Ue+"$1$2")+e;case 8116:case 7059:case 5753:case 5535:case 5445:case 5701:case 4933:case 4677:case 5533:case 5789:case 5021:case 4765:if(oe(e)-1-t>6)switch(re(e,t+1)){case 109:if(45!==re(e,t+4))break;case 102:return ne(e,/(.+:)(.+)-([^]+)/,"$1"+Ue+"$2-$3$1"+Ie+(108==re(e,t+3)?"$3":"$2-$3"))+e;case 115:return~ae(e,"stretch")?Je(ne(e,"stretch","fill-available"),t)+e:e}break;case 4949:if(115!==re(e,t+1))break;case 6444:switch(re(e,oe(e)-3-(~ae(e,"!important")&&10))){case 107:return ne(e,":",":"+Ue)+e;case 101:return ne(e,/(.+:)([^;!]+)(;|!.+)?/,"$1"+Ue+(45===re(e,14)?"inline-":"")+"box$3$1"+Ue+"$2$3$1"+_e+"$2box$3")+e}break;case 5936:switch(re(e,t+11)){case 114:return Ue+e+_e+ne(e,/[svh]\w+-[tblr]{2}/,"tb")+e;case 108:return Ue+e+_e+ne(e,/[svh]\w+-[tblr]{2}/,"tb-rl")+e;case 45:return Ue+e+_e+ne(e,/[svh]\w+-[tblr]{2}/,"lr")+e}return Ue+e+_e+e+e}return e}var Ke=[function(e,t,n,a){if(e.length>-1&&!e.return)switch(e.type){case Me:e.return=Je(e.value,e.length);break;case je:return Re([ve(e,{value:ne(e.value,"@","@"+Ue)})],a);case Pe:if(e.length)return function(e,t){return e.map(t).join("")}(e.props,(function(t){switch(function(e){return(e=/(::plac\w+|:read-\w+)/.exec(e))?e[0]:e}(t)){case":read-only":case":read-write":return Re([ve(e,{props:[ne(t,/:(read-\w+)/,":-moz-$1")]})],a);case"::placeholder":return Re([ve(e,{props:[ne(t,/:(plac\w+)/,":"+Ue+"input-$1")]}),ve(e,{props:[ne(t,/:(plac\w+)/,":-moz-$1")]}),ve(e,{props:[ne(t,/:(plac\w+)/,_e+"input-$1")]})],a)}return""}))}}],Xe={animationIterationCount:1,aspectRatio:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,scale:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1};function Ze(e){var t=Object.create(null);return function(n){return void 0===t[n]&&(t[n]=e(n)),t[n]}}var Ye=/[A-Z]|^ms/g,et=/_EMO_([^_]+?)_([^]*?)_EMO_/g,tt=function(e){return 45===e.charCodeAt(1)},nt=function(e){return null!=e&&"boolean"!=typeof e},at=Ze((function(e){return tt(e)?e:e.replace(Ye,"-$&").toLowerCase()})),rt=function(e,t){switch(e){case"animation":case"animationName":if("string"==typeof t)return t.replace(et,(function(e,t,n){return ot={name:t,styles:n,next:ot},t}))}return 1===Xe[e]||tt(e)||"number"!=typeof t||0===t?t:t+"px"};function st(e,t,n){if(null==n)return"";var a=n;if(void 0!==a.__emotion_styles)return a;switch(typeof n){case"boolean":return"";case"object":var r=n;if(1===r.anim)return ot={name:r.name,styles:r.styles,next:ot},r.name;var s=n;if(void 0!==s.styles){var o=s.next;if(void 0!==o)for(;void 0!==o;)ot={name:o.name,styles:o.styles,next:ot},o=o.next;return s.styles+";"}return function(e,t,n){var a="";if(Array.isArray(n))for(var r=0;r<n.length;r++)a+=st(e,t,n[r])+";";else for(var s in n){var o=n[s];if("object"!=typeof o){var i=o;null!=t&&void 0!==t[i]?a+=s+"{"+t[i]+"}":nt(i)&&(a+=at(s)+":"+rt(s,i)+";")}else if(!Array.isArray(o)||"string"!=typeof o[0]||null!=t&&void 0!==t[o[0]]){var c=st(e,t,o);switch(s){case"animation":case"animationName":a+=at(s)+":"+c+";";break;default:a+=s+"{"+c+"}"}}else for(var u=0;u<o.length;u++)nt(o[u])&&(a+=at(s)+":"+rt(s,o[u])+";")}return a}(e,t,n);case"function":if(void 0!==e){var i=ot,c=n(e);return ot=i,st(e,t,c)}}var u=n;if(null==t)return u;var l=t[u];return void 0!==l?l:u}var ot,it=/label:\s*([^\s;{]+)\s*(;|$)/g;function ct(e,t,n){if(1===e.length&&"object"==typeof e[0]&&null!==e[0]&&void 0!==e[0].styles)return e[0];var a=!0,r="";ot=void 0;var s=e[0];null==s||void 0===s.raw?(a=!1,r+=st(n,t,s)):r+=s[0];for(var o=1;o<e.length;o++)r+=st(n,t,e[o]),a&&(r+=s[o]);it.lastIndex=0;for(var i,c="";null!==(i=it.exec(r));)c+="-"+i[1];var u=function(e){for(var t,n=0,a=0,r=e.length;r>=4;++a,r-=4)t=1540483477*(65535&(t=255&e.charCodeAt(a)|(255&e.charCodeAt(++a))<<8|(255&e.charCodeAt(++a))<<16|(255&e.charCodeAt(++a))<<24))+(59797*(t>>>16)<<16),n=1540483477*(65535&(t^=t>>>24))+(59797*(t>>>16)<<16)^1540483477*(65535&n)+(59797*(n>>>16)<<16);switch(r){case 3:n^=(255&e.charCodeAt(a+2))<<16;case 2:n^=(255&e.charCodeAt(a+1))<<8;case 1:n=1540483477*(65535&(n^=255&e.charCodeAt(a)))+(59797*(n>>>16)<<16)}return(((n=1540483477*(65535&(n^=n>>>13))+(59797*(n>>>16)<<16))^n>>>15)>>>0).toString(36)}(r)+c;return{name:u,styles:r,next:ot}}function ut(e,t,n){var a="";return n.split(" ").forEach((function(n){void 0!==e[n]?t.push(e[n]+";"):n&&(a+=n+" ")})),a}function lt(e,t){if(void 0===e.inserted[t.name])return e.insert("",t,e.sheet,!0)}function dt(e,t,n){var a=[],r=ut(e,a,n);return a.length<2?n:r+t(a)}var pt=function e(t){for(var n="",a=0;a<t.length;a++){var r=t[a];if(null!=r){var s=void 0;switch(typeof r){case"boolean":break;case"object":if(Array.isArray(r))s=e(r);else for(var o in s="",r)r[o]&&o&&(s&&(s+=" "),s+=o);break;default:s=r}s&&(n&&(n+=" "),n+=s)}}return n};var ft=function(e){var t=function(e){var t=e.key;if("css"===t){var n=document.querySelectorAll("style[data-emotion]:not([data-s])");Array.prototype.forEach.call(n,(function(e){-1!==e.getAttribute("data-emotion").indexOf(" ")&&(document.head.appendChild(e),e.setAttribute("data-s",""))}))}var a,r,s=e.stylisPlugins||Ke,o={},i=[];a=e.container||document.head,Array.prototype.forEach.call(document.querySelectorAll('style[data-emotion^="'+t+' "]'),(function(e){for(var t=e.getAttribute("data-emotion").split(" "),n=1;n<t.length;n++)o[t[n]]=!0;i.push(e)}));var c,u,l,d,p=[qe,(d=function(e){c.insert(e)},function(e){e.root||(e=e.return)&&d(e)})],f=(u=[We,He].concat(s,p),l=ie(u),function(e,t,n,a){for(var r="",s=0;s<l;s++)r+=u[s](e,t,n,a)||"";return r});r=function(e,t,n,a){c=n,Re(De(e?e+"{"+t.styles+"}":t.styles),f),a&&(h.inserted[t.name]=!0)};var h={key:t,sheet:new X({key:t,container:a,nonce:e.nonce,speedy:e.speedy,prepend:e.prepend,insertionPoint:e.insertionPoint}),nonce:e.nonce,inserted:o,registered:{},insert:r};return h.sheet.hydrate(i),h}(e);t.sheet.speedy=function(e){this.isSpeedy=e},t.compat=!0;var n=function(){for(var e=arguments.length,n=new Array(e),a=0;a<e;a++)n[a]=arguments[a];var r=ct(n,t.registered,void 0);return function(e,t){!function(e,t){var n=e.key+"-"+t.name;void 0===e.registered[n]&&(e.registered[n]=t.styles)}(e,t);var n=e.key+"-"+t.name;if(void 0===e.inserted[t.name]){var a=t;do{e.insert(t===a?"."+n:"",a,e.sheet,!0),a=a.next}while(void 0!==a)}}(t,r),t.key+"-"+r.name};return{css:n,cx:function(){for(var e=arguments.length,a=new Array(e),r=0;r<e;r++)a[r]=arguments[r];return dt(t.registered,n,pt(a))},injectGlobal:function(){for(var e=arguments.length,n=new Array(e),a=0;a<e;a++)n[a]=arguments[a];var r=ct(n,t.registered);lt(t,r)},keyframes:function(){for(var e=arguments.length,n=new Array(e),a=0;a<e;a++)n[a]=arguments[a];var r=ct(n,t.registered),s="animation-"+r.name;return lt(t,{name:r.name,styles:"@keyframes "+s+"{"+r.styles+"}"}),s},hydrate:function(e){e.forEach((function(e){t.inserted[e]=!0}))},flush:function(){t.registered={},t.inserted={},t.sheet.flush()},sheet:t.sheet,cache:t,getRegisteredStyles:ut.bind(null,t.registered),merge:dt.bind(null,t.registered,n)}}({key:"css"}),ht=(ft.flush,ft.hydrate,ft.cx,ft.merge,ft.getRegisteredStyles,ft.injectGlobal,ft.keyframes,ft.css);function mt(e){const{isAvailable:t,openAssistant:n}=J();return t&&n?i().createElement(vt,{...e,openAssistant:n}):null}function vt({prompt:e,origin:t,context:n,autoSend:a=!0,title:r="Analyze with Assistant",size:c="sm",iconOnlyButton:u=!1,openAssistant:l}){const d=(0,K.useStyles2)(gt);return(0,o.useEffect)((()=>{(0,s.reportInteraction)("grafana_assistant_app_open_sidebar_button_displayed",{from:t})}),[t]),i().createElement(i().Fragment,null,u?i().createElement(K.IconButton,{name:"ai-sparkle",onClick:()=>l({prompt:e,context:n,autoSend:a,origin:t}),variant:"secondary",size:c,"aria-label":r,className:d.icon,tooltip:r,"data-testid":"assistant-icon-button"}):i().createElement(K.Button,{icon:"ai-sparkle",onClick:()=>l({prompt:e,context:n,autoSend:a,origin:t}),variant:"secondary",fill:"solid",size:c,title:r,"aria-label":r,className:d.button,"data-testid":"assistant-button"},r))}ft.sheet,ft.cache;const gt=e=>{const t=e.colors.secondary.main,n=e.colors.emphasize(t,.05),a=e.colors.background.canvas,r=e.shape.radius.default,s=`max(calc(${r} - 1px), 1px)`,o={content:'""',position:"absolute",inset:0,borderRadius:r,background:"linear-gradient(90deg, rgb(168, 85, 247), rgb(249, 115, 22))",zIndex:-2,pointerEvents:"none"},i=e=>({content:'""',position:"absolute",inset:"1px",borderRadius:s,background:`linear-gradient(${e}, ${e}), ${a}`,zIndex:-1,transition:"none",pointerEvents:"none"});return{button:ht({label:"assistant-button",position:"relative",isolation:"isolate",border:"none",transition:"none !important","&::before":o,"&::after":{...i(t),transition:"none"},"&:hover":{transition:"none !important"},"&:hover::after":{background:`linear-gradient(${n}, ${n}), ${a}`}}),icon:ht({label:"assistant-icon",position:"relative",isolation:"isolate",border:"none",background:"none",padding:e.spacing(.5),"&::before":{...o,transition:"background 0.1s ease"},"&:hover::after":{...i(t),background:`linear-gradient(${n}, ${n}), ${a}`}})}};module.exports=t})();
1
+ (()=>{"use strict";var e={n:t=>{var n=t&&t.__esModule?()=>t.default:()=>t;return e.d(n,{a:n}),n},d:(t,n)=>{for(var r in n)e.o(n,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:n[r]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};function n(e){let t=5381;for(let n=0;n<e.length;n++)t=(t<<5)+t+e.charCodeAt(n);return(t>>>0).toString(16)}e.r(t),e.d(t,{ASSISTANT_PLUGIN_ID:()=>z,ASSISTANT_PLUGIN_TITLE:()=>q,CALLBACK_EXTENSION_POINT:()=>O,ComponentNodeData:()=>y,DashboardNodeData:()=>k,DatasourceNodeData:()=>A,EntityNodeData:()=>$,FolderNodeData:()=>E,LabelNameNodeData:()=>S,LabelValueNodeData:()=>C,OpenAssistantButton:()=>mt,StructuredNodeData:()=>a,closeAssistant:()=>W,createAssistantContextItem:()=>I,ensureInlineAssistantInitialized:()=>Et,getExposeAssistantFunctionsConfig:()=>R,getInlineAssistantFactory:()=>At,isAssistantAvailable:()=>D,newFunctionNamespace:()=>M,openAssistant:()=>Q,provideComponents:()=>x,providePageContext:()=>h,provideQuestions:()=>L,setInlineAssistantFactory:()=>xt,setInlineAssistantInitializer:()=>kt,toggleAssistant:()=>H,useAssistant:()=>J,useInlineAssistant:()=>$t,usePageComponents:()=>w,usePageContext:()=>v,useProvidePageContext:()=>m,useProvideQuestions:()=>_,useQuestions:()=>U});class r{constructor(e){this.params=e,this.text="",this.id=n(e.id),this.type=e.type}formatForLLM(e){var t,n;return{type:this.type,codeElementIds:e,data:{name:null!==(t=this.params.text)&&void 0!==t?t:"",text:null!==(n=this.params.text)&&void 0!==n?n:""}}}equals(e){return e instanceof r&&this.id===e.id&&this.type===e.type}}class a extends r{constructor(e){super({...e,id:n(JSON.stringify(e.data)),type:"structured"}),this.data=e.data}formatForLLM(e){return{type:this.type,codeElementIds:e,data:this.data}}}const s=require("@grafana/runtime"),i=require("react");var o=e.n(i);const c=[],u="grafana-assistant:page-context-sync",l="grafana-assistant:page-context-update",d="grafana-assistant:page-context-remove",p="grafana-assistant:location-changed";let f=!1;function h(e,t){const n={id:g(),urlPattern:e,context:[...t]};c.push(n),window.dispatchEvent(new CustomEvent(l,{detail:n})),window.dispatchEvent(new CustomEvent(u,{detail:{registry:c}}));const r=e=>{const t=c.findIndex((e=>e.id===n.id));-1!==t&&(c[t].context=[...e],window.dispatchEvent(new CustomEvent(l,{detail:c[t]})))};return r.unregister=()=>{const e=c.findIndex((e=>e.id===n.id));-1!==e&&(c.splice(e,1),window.dispatchEvent(new CustomEvent(d,{detail:{id:n.id}})))},r}function m(e,t=[]){const n=(0,i.useRef)(void 0),r=(0,i.useRef)(t);return r.current=t,(0,i.useEffect)((()=>(n.current=h(e,r.current),()=>{var e;null===(e=n.current)||void 0===e||e.unregister()})),[e]),(0,i.useEffect)((()=>{n.current&&n.current(t)}),[t]),(0,i.useCallback)((e=>{var t;null===(t=n.current)||void 0===t||t.call(n,e)}),[])}function v(e={allowQuestions:!1,allowComponents:!1}){const[t,n]=(0,i.useState)([]),r=(0,s.useLocationService)(),a=(0,i.useRef)("");(0,i.useEffect)((()=>{const e=()=>{const e=function(e,t){if(!e)return[];const n=[];for(const r of t)b(e,r.urlPattern)&&n.push(...r.context);return n}(r.getLocation().pathname,c);n(e)},t=()=>{e()},s=t=>{var n;const a=null===(n=t.detail)||void 0===n?void 0:n.pathname;a&&a===r.getLocation().pathname&&e()},i=r.getLocationObservable().subscribe((t=>{const n=t.pathname;n!==a.current&&(a.current=n,function(e){window.dispatchEvent(new CustomEvent(p,{detail:{pathname:e}}))}(n),e())}));return e(),window.addEventListener(u,t),window.addEventListener(l,t),window.addEventListener(d,t),window.addEventListener(p,s),()=>{i.unsubscribe(),window.removeEventListener(u,t),window.removeEventListener(l,t),window.removeEventListener(d,t),window.removeEventListener(p,s)}}),[r]);let o=t;return e.allowQuestions||(o=o.filter((e=>{var t;return"question"!==(null===(t=e.node.data)||void 0===t?void 0:t.type)}))),e.allowComponents||(o=o.filter((e=>{var t;return"component"!==(null===(t=e.node.data)||void 0===t?void 0:t.type)}))),o}function g(e="page-context"){return`${e}-${Date.now()}-${Math.random().toString(36).slice(2,11)}`}function b(e,t){if(t instanceof RegExp)return t.test(e);if("string"==typeof t){const n=t.replace(/\*\*/g,"\0DOUBLE_STAR\0").replace(/\*/g,"[^/]*").replace(/\u0000DOUBLE_STAR\u0000/g,".*").replace(/\?/g,".");return new RegExp(`^${n}$`).test(e)}return!1}f||(window.addEventListener(u,(e=>{var t;const n=null===(t=e.detail)||void 0===t?void 0:t.registry;if(n){const e=new Set(c.map((e=>e.id))),t=n.filter((t=>!e.has(t.id)));c.push(...t)}})),window.addEventListener(l,(e=>{const t=e.detail;if(t){const e=c.findIndex((e=>e.id===t.id));-1!==e?c[e]=t:c.push(t)}})),window.addEventListener(d,(e=>{var t;const n=null===(t=e.detail)||void 0===t?void 0:t.id;if(n){const e=c.findIndex((e=>e.id===n));-1!==e&&c.splice(e,1)}})),f=!0);class y extends r{constructor(e){const t=e.namespace||"components";super({...e,id:`${t}-${Object.keys(e.components).join("-")}`,type:"component"}),this.components=e.components,this.prompt=e.prompt,this.namespace=t}formatForLLM(e){return{type:this.type,codeElementIds:e,data:{name:`${this.namespace} components`,prompt:this.prompt,namespace:this.namespace}}}}function w(){const e=v({allowComponents:!0,allowQuestions:!1});return(0,i.useMemo)((()=>{const t={};return e.filter((e=>{var t;return null===(t=e.node.data)||void 0===t?void 0:t.components})).forEach((e=>{const n=e.node.data;if(null==n?void 0:n.components){const e=n.namespace||n.name||"components";Object.entries(n.components).forEach((([n,r])=>{t[`${e}_${n}`]=r}))}})),t}),[e])}function x(e,t,n,r=/.*/){return h(r,[I("component",{components:n,prompt:e,namespace:t})])}class k extends r{constructor(e){super({...e,id:e.dashboardUid,type:"dashboard"}),this.dashboardUid=e.dashboardUid,this.dashboardTitle=e.dashboardTitle,this.folderUid=e.folderUid,this.folderTitle=e.folderTitle,this.text=e.dashboardTitle}formatForLLM(e){return{type:this.type,codeElementIds:e,data:{name:this.dashboardTitle,dashboardUid:this.dashboardUid,dashboardTitle:this.dashboardTitle,folderUid:this.folderUid,folderTitle:this.folderTitle,text:this.text}}}}class E extends r{constructor(e){super({...e,id:e.folderUid,type:"dashboard_folder"}),this.text="",this.folderUid=e.folderUid,this.folderTitle=e.folderTitle,this.text=e.folderTitle}formatForLLM(e){return{type:this.type,codeElementIds:e,data:{name:this.folderTitle,folderUid:this.folderUid,folderTitle:this.folderTitle,text:this.text}}}}class A extends r{constructor(e){super({...e,id:e.datasourceUid,type:"datasource"}),this.datasourceUid=e.datasourceUid,this.datasourceType=e.datasourceType,this.datasourceName=e.datasourceName,this.img=e.img,this.text=e.datasourceName}formatForLLM(e){return{type:this.type,codeElementIds:e,data:{name:this.datasourceName,uid:this.datasourceUid,type:this.datasourceType,text:this.text,img:this.img}}}}class $ extends r{constructor(e){var t,n,r;super({id:`${e.type}-${e.name}-${[null===(t=e.scope)||void 0===t?void 0:t.env,null===(n=e.scope)||void 0===n?void 0:n.site,null===(r=e.scope)||void 0===r?void 0:r.namespace].filter(Boolean).join("-")}`,type:"entity",title:e.title,hidden:e.hidden,img:e.img,icon:e.icon,text:e.name}),this.entityType=e.type,this.name=e.name,this.scope=e.scope,this.properties=e.properties,this.text=e.name}formatForLLM(e){return{type:"entity",codeElementIds:e,data:{name:this.name,text:this.text,type:this.entityType,scope:this.scope,properties:this.properties}}}}class S extends r{constructor(e){super({...e,id:`${e.datasourceUid}-${e.labelName}`,type:"label_name"}),this.datasourceUid=e.datasourceUid,this.datasourceType=e.datasourceType,this.datasourceName=e.datasourceName,this.labelName=e.labelName,this.text=e.labelName,this.img=e.img}formatForLLM(e){return{type:this.type,codeElementIds:e,data:{name:this.labelName,datasourceUid:this.datasourceUid,datasourceType:this.datasourceType,datasourceName:this.datasourceName,labelName:this.labelName,img:this.img,text:this.text}}}}class C extends r{constructor(e){super({...e,id:`${e.datasourceUid}-${e.labelName}-${e.labelValue}`,type:"label_value"}),this.datasourceUid=e.datasourceUid,this.datasourceType=e.datasourceType,this.datasourceName=e.datasourceName,this.labelName=e.labelName,this.labelValue=e.labelValue,this.text=e.labelValue,this.img=e.img}formatForLLM(e){return{type:this.type,codeElementIds:e,data:{name:this.labelValue,datasourceUid:this.datasourceUid,datasourceType:this.datasourceType,datasourceName:this.datasourceName,labelName:this.labelName,labelValue:this.labelValue,text:this.text,img:this.img}}}}function N(e){var t,n,r,a,i;const o=(0,s.getDataSourceSrv)().getInstanceSettings(e);return{datasourceType:null!==(t=null==o?void 0:o.type)&&void 0!==t?t:"unknown",datasourceName:null!==(n=null==o?void 0:o.name)&&void 0!==n?n:e,img:null===(i=null===(a=null===(r=null==o?void 0:o.meta)||void 0===r?void 0:r.info)||void 0===a?void 0:a.logos)||void 0===i?void 0:i.small}}const T={datasource:"database",label_name:"database",label_value:"database",dashboard:"dashboard",dashboard_folder:"folder",unknown:"circle-mono",structured:"gf-grid",component:"gf-grid",entity:"asserts"};function I(e,t){var n,s,i;const o=function(e,t){switch(e){case"datasource":return new A({...t,...N(t.datasourceUid)});case"label_name":return new S({...t,...N(t.datasourceUid)});case"label_value":return new C({...t,...N(t.datasourceUid)});case"dashboard":return new k(t);case"dashboard_folder":return new E(t);case"structured":return new a(t);case"component":return new y({...t,hidden:!0});case"entity":return new $(t);case"unknown":return new r(t);default:return console.error(`Unknown context type: ${e}`),new r(t)}}(e,t),c=null!==(n=t.title)&&void 0!==n?n:function(e){var t;return e instanceof a?e.formatForLLM().data.name:null!==(t=e.text)&&void 0!==t?t:"Given Context"}(o),u=null!==(s=t.img)&&void 0!==s?s:function(e){if("img"in e)return e.img}(o);return{node:{id:o.id,name:c,img:u,icon:null!==(i=t.icon)&&void 0!==i?i:T[e],navigable:!1,selectable:!0,data:o},occurrences:[]}}function L(e,t){const n=g("question"),r=e=>e.map(((e,t)=>({node:{id:`question-${n}-${t}`,name:e.prompt,navigable:!1,selectable:!0,icon:"question-circle",data:{type:"question",prompt:e.prompt,context:e.context||[]}},occurrences:[]}))),a=h(e,r(t)),s=e=>{a(r(e))};return s.unregister=a.unregister,s}function _(e,t=[]){const n=(0,i.useMemo)((()=>g("question")),[]),r=e=>e.map(((e,t)=>({node:{id:`question-${n}-${t}`,name:e.prompt,navigable:!1,selectable:!0,icon:"question-circle",data:{type:"question",prompt:e.prompt,context:e.context||[]}},occurrences:[]}))),a=m(e,r(t));return e=>{a(r(e))}}function U(){const e=v({allowQuestions:!0,allowComponents:!1});return P(e)}const P=e=>e.filter((e=>{var t;return"question"===(null===(t=e.node.data)||void 0===t?void 0:t.type)})).map((e=>{var t,n;return{prompt:(null===(t=e.node.data)||void 0===t?void 0:t.prompt)||e.node.name,context:(null===(n=e.node.data)||void 0===n?void 0:n.context)||[]}})),O="grafana-assistant-app/callback/v0-alpha";function M(e,t){return{namespace:e,functions:t}}function R(e){return{title:"callback",targets:[O],fn:()=>e.map((e=>({namespace:e.namespace,functions:e.functions})))}}const j=require("rxjs"),z="grafana-assistant-app",q="Grafana Assistant";function D(){if(!s.getObservablePluginLinks)return(0,j.of)(!1);return(0,s.getObservablePluginLinks)({extensionPointId:"grafana/extension-sidebar/v0-alpha"}).pipe((0,j.map)((e=>e.some((e=>e.pluginId===z&&e.title===q)))))}const F=require("@grafana/data");class G extends F.BusEventWithPayload{}G.type="open-extension-sidebar";class B extends F.BusEventBase{}B.type="close-extension-sidebar";class V extends F.BusEventWithPayload{}function Q(e){var t,n;(0,s.reportInteraction)("grafana_assistant_app_opened_sidebar",{from:e.origin,prompt:null!==(t=e.prompt)&&void 0!==t?t:""}),function(e,t,n){const r=new G({pluginId:e,componentTitle:t,props:n});(0,s.getAppEvents)().publish(r)}(z,q,{initialPrompt:e.prompt,initialContext:e.context,initialAutoSend:null===(n=e.autoSend)||void 0===n||n,origin:e.origin,initialMode:e.mode})}function W(){!function(){const e=new B;(0,s.getAppEvents)().publish(e)}()}function H(e){var t,n;(0,s.reportInteraction)("grafana_assistant_app_toggled_sidebar",{from:e.origin,prompt:null!==(t=e.prompt)&&void 0!==t?t:""}),function(e,t,n){const r=new V({pluginId:e,componentTitle:t,props:n});(0,s.getAppEvents)().publish(r)}(z,q,{initialPrompt:e.prompt,initialContext:e.context,initialAutoSend:null===(n=e.autoSend)||void 0===n||n,origin:e.origin,initialMode:e.mode})}function J(){const[e,t]=(0,i.useState)(!1);return(0,i.useEffect)((()=>{const e=D().subscribe((e=>t(e)));return()=>{e.unsubscribe()}}),[]),{isAvailable:e,openAssistant:e?Q:void 0,closeAssistant:e?W:void 0,toggleAssistant:e?H:void 0}}V.type="toggle-extension-sidebar";const K=require("@grafana/ui");var X=function(){function e(e){var t=this;this._insertTag=function(e){var n;n=0===t.tags.length?t.insertionPoint?t.insertionPoint.nextSibling:t.prepend?t.container.firstChild:t.before:t.tags[t.tags.length-1].nextSibling,t.container.insertBefore(e,n),t.tags.push(e)},this.isSpeedy=void 0===e.speedy||e.speedy,this.tags=[],this.ctr=0,this.nonce=e.nonce,this.key=e.key,this.container=e.container,this.prepend=e.prepend,this.insertionPoint=e.insertionPoint,this.before=null}var t=e.prototype;return t.hydrate=function(e){e.forEach(this._insertTag)},t.insert=function(e){this.ctr%(this.isSpeedy?65e3:1)==0&&this._insertTag(function(e){var t=document.createElement("style");return t.setAttribute("data-emotion",e.key),void 0!==e.nonce&&t.setAttribute("nonce",e.nonce),t.appendChild(document.createTextNode("")),t.setAttribute("data-s",""),t}(this));var t=this.tags[this.tags.length-1];if(this.isSpeedy){var n=function(e){if(e.sheet)return e.sheet;for(var t=0;t<document.styleSheets.length;t++)if(document.styleSheets[t].ownerNode===e)return document.styleSheets[t]}(t);try{n.insertRule(e,n.cssRules.length)}catch(e){}}else t.appendChild(document.createTextNode(e));this.ctr++},t.flush=function(){this.tags.forEach((function(e){var t;return null==(t=e.parentNode)?void 0:t.removeChild(e)})),this.tags=[],this.ctr=0},e}(),Z=Math.abs,Y=String.fromCharCode,ee=Object.assign;function te(e){return e.trim()}function ne(e,t,n){return e.replace(t,n)}function re(e,t){return e.indexOf(t)}function ae(e,t){return 0|e.charCodeAt(t)}function se(e,t,n){return e.slice(t,n)}function ie(e){return e.length}function oe(e){return e.length}function ce(e,t){return t.push(e),e}var ue=1,le=1,de=0,pe=0,fe=0,he="";function me(e,t,n,r,a,s,i){return{value:e,root:t,parent:n,type:r,props:a,children:s,line:ue,column:le,length:i,return:""}}function ve(e,t){return ee(me("",null,null,"",null,null,0),e,{length:-e.length},t)}function ge(){return fe=pe>0?ae(he,--pe):0,le--,10===fe&&(le=1,ue--),fe}function be(){return fe=pe<de?ae(he,pe++):0,le++,10===fe&&(le=1,ue++),fe}function ye(){return ae(he,pe)}function we(){return pe}function xe(e,t){return se(he,e,t)}function ke(e){switch(e){case 0:case 9:case 10:case 13:case 32:return 5;case 33:case 43:case 44:case 47:case 62:case 64:case 126:case 59:case 123:case 125:return 4;case 58:return 3;case 34:case 39:case 40:case 91:return 2;case 41:case 93:return 1}return 0}function Ee(e){return ue=le=1,de=ie(he=e),pe=0,[]}function Ae(e){return he="",e}function $e(e){return te(xe(pe-1,Ne(91===e?e+2:40===e?e+1:e)))}function Se(e){for(;(fe=ye())&&fe<33;)be();return ke(e)>2||ke(fe)>3?"":" "}function Ce(e,t){for(;--t&&be()&&!(fe<48||fe>102||fe>57&&fe<65||fe>70&&fe<97););return xe(e,we()+(t<6&&32==ye()&&32==be()))}function Ne(e){for(;be();)switch(fe){case e:return pe;case 34:case 39:34!==e&&39!==e&&Ne(fe);break;case 40:41===e&&Ne(e);break;case 92:be()}return pe}function Te(e,t){for(;be()&&e+fe!==57&&(e+fe!==84||47!==ye()););return"/*"+xe(t,pe-1)+"*"+Y(47===e?e:be())}function Ie(e){for(;!ke(ye());)be();return xe(e,pe)}var Le="-ms-",_e="-moz-",Ue="-webkit-",Pe="comm",Oe="rule",Me="decl",Re="@keyframes";function je(e,t){for(var n="",r=oe(e),a=0;a<r;a++)n+=t(e[a],a,e,t)||"";return n}function ze(e,t,n,r){switch(e.type){case"@layer":if(e.children.length)break;case"@import":case Me:return e.return=e.return||e.value;case Pe:return"";case Re:return e.return=e.value+"{"+je(e.children,r)+"}";case Oe:e.value=e.props.join(",")}return ie(n=je(e.children,r))?e.return=e.value+"{"+n+"}":""}function qe(e){return Ae(De("",null,null,null,[""],e=Ee(e),0,[0],e))}function De(e,t,n,r,a,s,i,o,c){for(var u=0,l=0,d=i,p=0,f=0,h=0,m=1,v=1,g=1,b=0,y="",w=a,x=s,k=r,E=y;v;)switch(h=b,b=be()){case 40:if(108!=h&&58==ae(E,d-1)){-1!=re(E+=ne($e(b),"&","&\f"),"&\f")&&(g=-1);break}case 34:case 39:case 91:E+=$e(b);break;case 9:case 10:case 13:case 32:E+=Se(h);break;case 92:E+=Ce(we()-1,7);continue;case 47:switch(ye()){case 42:case 47:ce(Ge(Te(be(),we()),t,n),c);break;default:E+="/"}break;case 123*m:o[u++]=ie(E)*g;case 125*m:case 59:case 0:switch(b){case 0:case 125:v=0;case 59+l:-1==g&&(E=ne(E,/\f/g,"")),f>0&&ie(E)-d&&ce(f>32?Be(E+";",r,n,d-1):Be(ne(E," ","")+";",r,n,d-2),c);break;case 59:E+=";";default:if(ce(k=Fe(E,t,n,u,l,a,o,y,w=[],x=[],d),s),123===b)if(0===l)De(E,t,k,k,w,s,d,o,x);else switch(99===p&&110===ae(E,3)?100:p){case 100:case 108:case 109:case 115:De(e,k,k,r&&ce(Fe(e,k,k,0,0,a,o,y,a,w=[],d),x),a,x,d,o,r?w:x);break;default:De(E,k,k,k,[""],x,0,o,x)}}u=l=f=0,m=g=1,y=E="",d=i;break;case 58:d=1+ie(E),f=h;default:if(m<1)if(123==b)--m;else if(125==b&&0==m++&&125==ge())continue;switch(E+=Y(b),b*m){case 38:g=l>0?1:(E+="\f",-1);break;case 44:o[u++]=(ie(E)-1)*g,g=1;break;case 64:45===ye()&&(E+=$e(be())),p=ye(),l=d=ie(y=E+=Ie(we())),b++;break;case 45:45===h&&2==ie(E)&&(m=0)}}return s}function Fe(e,t,n,r,a,s,i,o,c,u,l){for(var d=a-1,p=0===a?s:[""],f=oe(p),h=0,m=0,v=0;h<r;++h)for(var g=0,b=se(e,d+1,d=Z(m=i[h])),y=e;g<f;++g)(y=te(m>0?p[g]+" "+b:ne(b,/&\f/g,p[g])))&&(c[v++]=y);return me(e,t,n,0===a?Oe:o,c,u,l)}function Ge(e,t,n){return me(e,t,n,Pe,Y(fe),se(e,2,-2),0)}function Be(e,t,n,r){return me(e,t,n,Me,se(e,0,r),se(e,r+1,-1),r)}var Ve=function(e,t,n){for(var r=0,a=0;r=a,a=ye(),38===r&&12===a&&(t[n]=1),!ke(a);)be();return xe(e,pe)},Qe=new WeakMap,We=function(e){if("rule"===e.type&&e.parent&&!(e.length<1)){for(var t=e.value,n=e.parent,r=e.column===n.column&&e.line===n.line;"rule"!==n.type;)if(!(n=n.parent))return;if((1!==e.props.length||58===t.charCodeAt(0)||Qe.get(n))&&!r){Qe.set(e,!0);for(var a=[],s=function(e,t){return Ae(function(e,t){var n=-1,r=44;do{switch(ke(r)){case 0:38===r&&12===ye()&&(t[n]=1),e[n]+=Ve(pe-1,t,n);break;case 2:e[n]+=$e(r);break;case 4:if(44===r){e[++n]=58===ye()?"&\f":"",t[n]=e[n].length;break}default:e[n]+=Y(r)}}while(r=be());return e}(Ee(e),t))}(t,a),i=n.props,o=0,c=0;o<s.length;o++)for(var u=0;u<i.length;u++,c++)e.props[c]=a[o]?s[o].replace(/&\f/g,i[u]):i[u]+" "+s[o]}}},He=function(e){if("decl"===e.type){var t=e.value;108===t.charCodeAt(0)&&98===t.charCodeAt(2)&&(e.return="",e.value="")}};function Je(e,t){switch(function(e,t){return 45^ae(e,0)?(((t<<2^ae(e,0))<<2^ae(e,1))<<2^ae(e,2))<<2^ae(e,3):0}(e,t)){case 5103:return Ue+"print-"+e+e;case 5737:case 4201:case 3177:case 3433:case 1641:case 4457:case 2921:case 5572:case 6356:case 5844:case 3191:case 6645:case 3005:case 6391:case 5879:case 5623:case 6135:case 4599:case 4855:case 4215:case 6389:case 5109:case 5365:case 5621:case 3829:return Ue+e+e;case 5349:case 4246:case 4810:case 6968:case 2756:return Ue+e+_e+e+Le+e+e;case 6828:case 4268:return Ue+e+Le+e+e;case 6165:return Ue+e+Le+"flex-"+e+e;case 5187:return Ue+e+ne(e,/(\w+).+(:[^]+)/,Ue+"box-$1$2"+Le+"flex-$1$2")+e;case 5443:return Ue+e+Le+"flex-item-"+ne(e,/flex-|-self/,"")+e;case 4675:return Ue+e+Le+"flex-line-pack"+ne(e,/align-content|flex-|-self/,"")+e;case 5548:return Ue+e+Le+ne(e,"shrink","negative")+e;case 5292:return Ue+e+Le+ne(e,"basis","preferred-size")+e;case 6060:return Ue+"box-"+ne(e,"-grow","")+Ue+e+Le+ne(e,"grow","positive")+e;case 4554:return Ue+ne(e,/([^-])(transform)/g,"$1"+Ue+"$2")+e;case 6187:return ne(ne(ne(e,/(zoom-|grab)/,Ue+"$1"),/(image-set)/,Ue+"$1"),e,"")+e;case 5495:case 3959:return ne(e,/(image-set\([^]*)/,Ue+"$1$`$1");case 4968:return ne(ne(e,/(.+:)(flex-)?(.*)/,Ue+"box-pack:$3"+Le+"flex-pack:$3"),/s.+-b[^;]+/,"justify")+Ue+e+e;case 4095:case 3583:case 4068:case 2532:return ne(e,/(.+)-inline(.+)/,Ue+"$1$2")+e;case 8116:case 7059:case 5753:case 5535:case 5445:case 5701:case 4933:case 4677:case 5533:case 5789:case 5021:case 4765:if(ie(e)-1-t>6)switch(ae(e,t+1)){case 109:if(45!==ae(e,t+4))break;case 102:return ne(e,/(.+:)(.+)-([^]+)/,"$1"+Ue+"$2-$3$1"+_e+(108==ae(e,t+3)?"$3":"$2-$3"))+e;case 115:return~re(e,"stretch")?Je(ne(e,"stretch","fill-available"),t)+e:e}break;case 4949:if(115!==ae(e,t+1))break;case 6444:switch(ae(e,ie(e)-3-(~re(e,"!important")&&10))){case 107:return ne(e,":",":"+Ue)+e;case 101:return ne(e,/(.+:)([^;!]+)(;|!.+)?/,"$1"+Ue+(45===ae(e,14)?"inline-":"")+"box$3$1"+Ue+"$2$3$1"+Le+"$2box$3")+e}break;case 5936:switch(ae(e,t+11)){case 114:return Ue+e+Le+ne(e,/[svh]\w+-[tblr]{2}/,"tb")+e;case 108:return Ue+e+Le+ne(e,/[svh]\w+-[tblr]{2}/,"tb-rl")+e;case 45:return Ue+e+Le+ne(e,/[svh]\w+-[tblr]{2}/,"lr")+e}return Ue+e+Le+e+e}return e}var Ke=[function(e,t,n,r){if(e.length>-1&&!e.return)switch(e.type){case Me:e.return=Je(e.value,e.length);break;case Re:return je([ve(e,{value:ne(e.value,"@","@"+Ue)})],r);case Oe:if(e.length)return function(e,t){return e.map(t).join("")}(e.props,(function(t){switch(function(e){return(e=/(::plac\w+|:read-\w+)/.exec(e))?e[0]:e}(t)){case":read-only":case":read-write":return je([ve(e,{props:[ne(t,/:(read-\w+)/,":-moz-$1")]})],r);case"::placeholder":return je([ve(e,{props:[ne(t,/:(plac\w+)/,":"+Ue+"input-$1")]}),ve(e,{props:[ne(t,/:(plac\w+)/,":-moz-$1")]}),ve(e,{props:[ne(t,/:(plac\w+)/,Le+"input-$1")]})],r)}return""}))}}],Xe={animationIterationCount:1,aspectRatio:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,scale:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1};function Ze(e){var t=Object.create(null);return function(n){return void 0===t[n]&&(t[n]=e(n)),t[n]}}var Ye=/[A-Z]|^ms/g,et=/_EMO_([^_]+?)_([^]*?)_EMO_/g,tt=function(e){return 45===e.charCodeAt(1)},nt=function(e){return null!=e&&"boolean"!=typeof e},rt=Ze((function(e){return tt(e)?e:e.replace(Ye,"-$&").toLowerCase()})),at=function(e,t){switch(e){case"animation":case"animationName":if("string"==typeof t)return t.replace(et,(function(e,t,n){return it={name:t,styles:n,next:it},t}))}return 1===Xe[e]||tt(e)||"number"!=typeof t||0===t?t:t+"px"};function st(e,t,n){if(null==n)return"";var r=n;if(void 0!==r.__emotion_styles)return r;switch(typeof n){case"boolean":return"";case"object":var a=n;if(1===a.anim)return it={name:a.name,styles:a.styles,next:it},a.name;var s=n;if(void 0!==s.styles){var i=s.next;if(void 0!==i)for(;void 0!==i;)it={name:i.name,styles:i.styles,next:it},i=i.next;return s.styles+";"}return function(e,t,n){var r="";if(Array.isArray(n))for(var a=0;a<n.length;a++)r+=st(e,t,n[a])+";";else for(var s in n){var i=n[s];if("object"!=typeof i){var o=i;null!=t&&void 0!==t[o]?r+=s+"{"+t[o]+"}":nt(o)&&(r+=rt(s)+":"+at(s,o)+";")}else if(!Array.isArray(i)||"string"!=typeof i[0]||null!=t&&void 0!==t[i[0]]){var c=st(e,t,i);switch(s){case"animation":case"animationName":r+=rt(s)+":"+c+";";break;default:r+=s+"{"+c+"}"}}else for(var u=0;u<i.length;u++)nt(i[u])&&(r+=rt(s)+":"+at(s,i[u])+";")}return r}(e,t,n);case"function":if(void 0!==e){var o=it,c=n(e);return it=o,st(e,t,c)}}var u=n;if(null==t)return u;var l=t[u];return void 0!==l?l:u}var it,ot=/label:\s*([^\s;{]+)\s*(;|$)/g;function ct(e,t,n){if(1===e.length&&"object"==typeof e[0]&&null!==e[0]&&void 0!==e[0].styles)return e[0];var r=!0,a="";it=void 0;var s=e[0];null==s||void 0===s.raw?(r=!1,a+=st(n,t,s)):a+=s[0];for(var i=1;i<e.length;i++)a+=st(n,t,e[i]),r&&(a+=s[i]);ot.lastIndex=0;for(var o,c="";null!==(o=ot.exec(a));)c+="-"+o[1];var u=function(e){for(var t,n=0,r=0,a=e.length;a>=4;++r,a-=4)t=1540483477*(65535&(t=255&e.charCodeAt(r)|(255&e.charCodeAt(++r))<<8|(255&e.charCodeAt(++r))<<16|(255&e.charCodeAt(++r))<<24))+(59797*(t>>>16)<<16),n=1540483477*(65535&(t^=t>>>24))+(59797*(t>>>16)<<16)^1540483477*(65535&n)+(59797*(n>>>16)<<16);switch(a){case 3:n^=(255&e.charCodeAt(r+2))<<16;case 2:n^=(255&e.charCodeAt(r+1))<<8;case 1:n=1540483477*(65535&(n^=255&e.charCodeAt(r)))+(59797*(n>>>16)<<16)}return(((n=1540483477*(65535&(n^=n>>>13))+(59797*(n>>>16)<<16))^n>>>15)>>>0).toString(36)}(a)+c;return{name:u,styles:a,next:it}}function ut(e,t,n){var r="";return n.split(" ").forEach((function(n){void 0!==e[n]?t.push(e[n]+";"):n&&(r+=n+" ")})),r}function lt(e,t){if(void 0===e.inserted[t.name])return e.insert("",t,e.sheet,!0)}function dt(e,t,n){var r=[],a=ut(e,r,n);return r.length<2?n:a+t(r)}var pt=function e(t){for(var n="",r=0;r<t.length;r++){var a=t[r];if(null!=a){var s=void 0;switch(typeof a){case"boolean":break;case"object":if(Array.isArray(a))s=e(a);else for(var i in s="",a)a[i]&&i&&(s&&(s+=" "),s+=i);break;default:s=a}s&&(n&&(n+=" "),n+=s)}}return n};var ft=function(e){var t=function(e){var t=e.key;if("css"===t){var n=document.querySelectorAll("style[data-emotion]:not([data-s])");Array.prototype.forEach.call(n,(function(e){-1!==e.getAttribute("data-emotion").indexOf(" ")&&(document.head.appendChild(e),e.setAttribute("data-s",""))}))}var r,a,s=e.stylisPlugins||Ke,i={},o=[];r=e.container||document.head,Array.prototype.forEach.call(document.querySelectorAll('style[data-emotion^="'+t+' "]'),(function(e){for(var t=e.getAttribute("data-emotion").split(" "),n=1;n<t.length;n++)i[t[n]]=!0;o.push(e)}));var c,u,l,d,p=[ze,(d=function(e){c.insert(e)},function(e){e.root||(e=e.return)&&d(e)})],f=(u=[We,He].concat(s,p),l=oe(u),function(e,t,n,r){for(var a="",s=0;s<l;s++)a+=u[s](e,t,n,r)||"";return a});a=function(e,t,n,r){c=n,je(qe(e?e+"{"+t.styles+"}":t.styles),f),r&&(h.inserted[t.name]=!0)};var h={key:t,sheet:new X({key:t,container:r,nonce:e.nonce,speedy:e.speedy,prepend:e.prepend,insertionPoint:e.insertionPoint}),nonce:e.nonce,inserted:i,registered:{},insert:a};return h.sheet.hydrate(o),h}(e);t.sheet.speedy=function(e){this.isSpeedy=e},t.compat=!0;var n=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];var a=ct(n,t.registered,void 0);return function(e,t){!function(e,t){var n=e.key+"-"+t.name;void 0===e.registered[n]&&(e.registered[n]=t.styles)}(e,t);var n=e.key+"-"+t.name;if(void 0===e.inserted[t.name]){var r=t;do{e.insert(t===r?"."+n:"",r,e.sheet,!0),r=r.next}while(void 0!==r)}}(t,a),t.key+"-"+a.name};return{css:n,cx:function(){for(var e=arguments.length,r=new Array(e),a=0;a<e;a++)r[a]=arguments[a];return dt(t.registered,n,pt(r))},injectGlobal:function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];var a=ct(n,t.registered);lt(t,a)},keyframes:function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];var a=ct(n,t.registered),s="animation-"+a.name;return lt(t,{name:a.name,styles:"@keyframes "+s+"{"+a.styles+"}"}),s},hydrate:function(e){e.forEach((function(e){t.inserted[e]=!0}))},flush:function(){t.registered={},t.inserted={},t.sheet.flush()},sheet:t.sheet,cache:t,getRegisteredStyles:ut.bind(null,t.registered),merge:dt.bind(null,t.registered,n)}}({key:"css"}),ht=(ft.flush,ft.hydrate,ft.cx,ft.merge,ft.getRegisteredStyles,ft.injectGlobal,ft.keyframes,ft.css);function mt(e){const{isAvailable:t,openAssistant:n}=J();return t&&n?o().createElement(vt,{...e,openAssistant:n}):null}function vt({prompt:e,origin:t,context:n,autoSend:r=!0,title:a="Analyze with Assistant",size:c="sm",iconOnlyButton:u=!1,openAssistant:l,onClick:d}){const p=(0,K.useStyles2)(gt);return(0,i.useEffect)((()=>{(0,s.reportInteraction)("grafana_assistant_app_open_sidebar_button_displayed",{from:t})}),[t]),o().createElement(o().Fragment,null,u?o().createElement(K.IconButton,{name:"ai-sparkle",onClick:()=>{null==d||d(),l({prompt:e,context:n,autoSend:r,origin:t})},variant:"secondary",size:c,"aria-label":a,className:p.icon,tooltip:a,"data-testid":"assistant-icon-button"}):o().createElement(K.Button,{icon:"ai-sparkle",onClick:()=>{null==d||d(),l({prompt:e,context:n,autoSend:r,origin:t})},variant:"secondary",fill:"solid",size:c,title:a,"aria-label":a,className:p.button,"data-testid":"assistant-button"},a))}ft.sheet,ft.cache;const gt=e=>{const t=e.colors.secondary.main,n=e.colors.emphasize(t,.05),r=e.colors.background.canvas,a=e.shape.radius.default,s=`max(calc(${a} - 1px), 1px)`,i={content:'""',position:"absolute",inset:0,borderRadius:a,background:"linear-gradient(90deg, rgb(168, 85, 247), rgb(249, 115, 22))",zIndex:-2,pointerEvents:"none"},o=e=>({content:'""',position:"absolute",inset:"1px",borderRadius:s,background:`linear-gradient(${e}, ${e}), ${r}`,zIndex:-1,transition:"none",pointerEvents:"none"});return{button:ht({label:"assistant-button",position:"relative",isolation:"isolate",border:"none",transition:"none !important","&::before":i,"&::after":{...o(t),transition:"none"},"&:hover":{transition:"none !important"},"&:hover::after":{background:`linear-gradient(${n}, ${n}), ${r}`}}),icon:ht({label:"assistant-icon",position:"relative",isolation:"isolate",border:"none",background:"none",padding:e.spacing(.5),"&::before":{...i,transition:"background 0.1s ease"},"&:hover::after":{...o(t),background:`linear-gradient(${n}, ${n}), ${r}`}})}};let bt=null,yt=null,wt=null;function xt(e){bt=e}function kt(e){yt=e}async function Et(){if(!bt){if(!yt)throw new Error("InlineAssistant not initialized. Make sure the Grafana Assistant plugin is loaded and initialized.");return wt||(wt=(async()=>{try{await yt()}catch(e){throw wt=null,e}})(),wt)}}function At(){if(!bt)throw new Error("InlineAssistant factory not initialized. Make sure the Grafana Assistant plugin is loaded.");return bt}function $t(){const[e,t]=(0,i.useState)(!1),[n,r]=(0,i.useState)(""),[a,s]=(0,i.useState)(null),o=(0,i.useRef)(null),c=(0,i.useCallback)((()=>{s(null),r("")}),[]),u=(0,i.useCallback)((()=>{o.current&&o.current.cancel(),t(!1)}),[]),l=(0,i.useCallback)((async e=>{var n;s(null),r(""),t(!0);try{await Et();const n=At();o.current||(o.current=await n(e.origin)),await o.current.sendPrompt({prompt:e.prompt,systemPrompt:e.systemPrompt,onStart:()=>{t(!0)},onDelta:e=>{r((t=>t+e))},onComplete:n=>{var a;r(n),t(!1),null===(a=e.onComplete)||void 0===a||a.call(e,n)},onError:n=>{var r;s(n),t(!1),null===(r=e.onError)||void 0===r||r.call(e,n)}})}catch(r){const a=r instanceof Error?r:new Error(String(r));s(a),t(!1),null===(n=e.onError)||void 0===n||n.call(e,a)}}),[]);return(0,i.useEffect)((()=>()=>{o.current&&(o.current.cancel(),o.current.dispose(),o.current=null)}),[]),{generate:l,isGenerating:e,content:n,error:a,cancel:u,reset:c}}module.exports=t})();
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","mappings":"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","sources":["webpack://@grafana/assistant/webpack/bootstrap","webpack://@grafana/assistant/webpack/runtime/compat get default export","webpack://@grafana/assistant/webpack/runtime/define property getters","webpack://@grafana/assistant/webpack/runtime/hasOwnProperty shorthand","webpack://@grafana/assistant/webpack/runtime/make namespace object","webpack://@grafana/assistant/./src/utils/hash.ts","webpack://@grafana/assistant/./src/context/base.ts","webpack://@grafana/assistant/external commonjs2 \"@grafana/runtime\"","webpack://@grafana/assistant/external commonjs2 \"react\"","webpack://@grafana/assistant/./src/context/page.ts","webpack://@grafana/assistant/./src/context/component.ts","webpack://@grafana/assistant/./src/context/dashboard.ts","webpack://@grafana/assistant/./src/context/datasource.ts","webpack://@grafana/assistant/./src/context/entity.ts","webpack://@grafana/assistant/./src/context/label.ts","webpack://@grafana/assistant/./src/context/factory.ts","webpack://@grafana/assistant/./src/context/chat.ts","webpack://@grafana/assistant/./src/context/questions.ts","webpack://@grafana/assistant/./src/functions.ts","webpack://@grafana/assistant/external commonjs2 \"rxjs\"","webpack://@grafana/assistant/./src/plugin.ts","webpack://@grafana/assistant/external commonjs2 \"@grafana/data\"","webpack://@grafana/assistant/./src/sidebar.ts","webpack://@grafana/assistant/./src/hook.ts","webpack://@grafana/assistant/external commonjs2 \"@grafana/ui\"","webpack://@grafana/assistant/../../../node_modules/@emotion/sheet/dist/emotion-sheet.esm.js","webpack://@grafana/assistant/../../../node_modules/stylis/src/Utility.js","webpack://@grafana/assistant/../../../node_modules/stylis/src/Tokenizer.js","webpack://@grafana/assistant/../../../node_modules/stylis/src/Enum.js","webpack://@grafana/assistant/../../../node_modules/stylis/src/Serializer.js","webpack://@grafana/assistant/../../../node_modules/stylis/src/Parser.js","webpack://@grafana/assistant/../../../node_modules/@emotion/cache/dist/emotion-cache.browser.esm.js","webpack://@grafana/assistant/../../../node_modules/@emotion/unitless/dist/emotion-unitless.esm.js","webpack://@grafana/assistant/../../../node_modules/@emotion/memoize/dist/emotion-memoize.esm.js","webpack://@grafana/assistant/../../../node_modules/@emotion/serialize/dist/emotion-serialize.esm.js","webpack://@grafana/assistant/../../../node_modules/@emotion/hash/dist/emotion-hash.esm.js","webpack://@grafana/assistant/../../../node_modules/@emotion/utils/dist/emotion-utils.browser.esm.js","webpack://@grafana/assistant/../../../node_modules/@emotion/css/create-instance/dist/emotion-css-create-instance.esm.js","webpack://@grafana/assistant/../../../node_modules/@emotion/css/dist/emotion-css.esm.js","webpack://@grafana/assistant/../../../node_modules/stylis/src/Middleware.js","webpack://@grafana/assistant/./src/components/OpenAssistantButton.tsx","webpack://@grafana/assistant/./src/inline/inlineAssistant.ts","webpack://@grafana/assistant/./src/inline/useInlineAssistant.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/**\n * Simple hash function that generates a deterministic hash for a given input string.\n * Uses the djb2 algorithm for simplicity and good distribution.\n */\nexport function hash(input: string): string {\n let hash = 5381;\n\n for (let i = 0; i < input.length; i++) {\n hash = (hash << 5) + hash + input.charCodeAt(i);\n }\n\n // Convert to positive hex string\n return (hash >>> 0).toString(16);\n}\n","import { IconName } from '@grafana/ui';\nimport { ItemDataType, type ContextItemData, type UnknownItemData } from './types';\nimport { hash } from '../utils/hash';\n\nexport interface BaseParams {\n title?: string;\n // If true, the context item will not be shown in the context pills\n hidden?: boolean;\n // Image to display, if not selected, we fallback to icon\n img?: string;\n // Icon to display, if img is provided, icon is ignored\n icon?: IconName;\n}\n\nexport interface NodeDataParams extends BaseParams {\n id: string;\n type: ItemDataType;\n text?: string;\n}\n\nexport class NodeData {\n public id: string;\n public text = '';\n public type: ItemDataType;\n\n constructor(public params: NodeDataParams) {\n this.id = hash(params.id);\n this.type = params.type;\n }\n\n formatForLLM(codeElementIds?: string[]): ContextItemData {\n return {\n type: this.type,\n codeElementIds,\n data: {\n name: this.params.text ?? '',\n text: this.params.text ?? '',\n } satisfies UnknownItemData,\n };\n }\n\n equals(other: unknown): boolean {\n if (!(other instanceof NodeData)) {\n return false;\n }\n return this.id === other.id && this.type === other.type;\n }\n}\n\nexport interface StructuredNodeDataParams extends BaseParams {\n data: Record<string, any>;\n}\n\nexport class StructuredNodeData extends NodeData {\n public data: Record<string, any>;\n constructor(params: StructuredNodeDataParams) {\n super({ ...params, id: hash(JSON.stringify(params.data)), type: 'structured' });\n this.data = params.data;\n }\n\n formatForLLM(codeElementIds?: string[]): ContextItemData {\n return {\n type: this.type,\n codeElementIds,\n data: this.data,\n };\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@grafana/runtime\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"react\");","import { useLocationService } from '@grafana/runtime';\nimport { ChatContextItem } from './types';\nimport { useEffect, useState, useRef, useCallback } from 'react';\n\nexport interface PageContextRegistration {\n id: string;\n urlPattern: string | RegExp;\n context: ChatContextItem[];\n}\n\n// Local registry for this module instance\nconst pageContextRegistry: PageContextRegistration[] = [];\n\n// Custom event types\nconst REGISTRY_SYNC_EVENT = 'grafana-assistant:page-context-sync';\nconst REGISTRY_UPDATE_EVENT = 'grafana-assistant:page-context-update';\nconst REGISTRY_REMOVE_EVENT = 'grafana-assistant:page-context-remove';\nconst LOCATION_CHANGE_EVENT = 'grafana-assistant:location-changed';\n\n// Sync registry with other instances\nfunction syncRegistry(): void {\n window.dispatchEvent(\n new CustomEvent(REGISTRY_SYNC_EVENT, {\n detail: { registry: pageContextRegistry },\n })\n );\n}\n\n// Listen for sync events from other instances\nlet syncListenerAdded = false;\nif (!syncListenerAdded) {\n window.addEventListener(REGISTRY_SYNC_EVENT, (event: Event) => {\n const customEvent = event as CustomEvent;\n const incomingRegistry = customEvent.detail?.registry as PageContextRegistration[];\n if (incomingRegistry) {\n // Merge registries, keeping unique entries by ID\n const existingIds = new Set(pageContextRegistry.map((r) => r.id));\n const newRegistrations = incomingRegistry.filter((r) => !existingIds.has(r.id));\n\n pageContextRegistry.push(...newRegistrations);\n }\n });\n\n window.addEventListener(REGISTRY_UPDATE_EVENT, (event: Event) => {\n const customEvent = event as CustomEvent;\n const update = customEvent.detail as PageContextRegistration;\n if (update) {\n const index = pageContextRegistry.findIndex((r) => r.id === update.id);\n if (index !== -1) {\n pageContextRegistry[index] = update;\n } else {\n pageContextRegistry.push(update);\n }\n }\n });\n\n window.addEventListener(REGISTRY_REMOVE_EVENT, (event: Event) => {\n const customEvent = event as CustomEvent;\n const id = customEvent.detail?.id;\n if (id) {\n const index = pageContextRegistry.findIndex((r) => r.id === id);\n if (index !== -1) {\n pageContextRegistry.splice(index, 1);\n }\n }\n });\n\n syncListenerAdded = true;\n}\n\n/**\n * Registers context items for specific pages based on URL patterns.\n * Returns a setter function to update the context dynamically, similar to useState.\n *\n * Multiple registrations with the same URL pattern are allowed and will all be merged\n * when the pattern matches. Each call creates a new independent registration.\n *\n * @param urlPattern - URL pattern (string or RegExp) to match against page URLs\n * @param initialContext - Initial array of ChatContextItem to provide when the pattern matches\n * @returns A setter function to update the context, with an unregister method attached\n */\nexport function providePageContext(\n urlPattern: string | RegExp,\n initialContext: ChatContextItem[]\n): ((context: ChatContextItem[]) => void) & { unregister: () => void } {\n // Always create a new registration to allow multiple providers with the same URL pattern\n const registration: PageContextRegistration = {\n id: generateRegistrationId(),\n urlPattern,\n context: [...initialContext],\n };\n\n pageContextRegistry.push(registration);\n\n // Notify other instances about the new/updated registration\n window.dispatchEvent(\n new CustomEvent(REGISTRY_UPDATE_EVENT, {\n detail: registration,\n })\n );\n\n // Request sync from other instances to get their registrations\n syncRegistry();\n\n // Create setter function that can update the context\n const setContext = (newContext: ChatContextItem[]) => {\n const index = pageContextRegistry.findIndex((reg) => reg.id === registration.id);\n if (index !== -1) {\n pageContextRegistry[index].context = [...newContext];\n // Notify other instances about the update\n window.dispatchEvent(\n new CustomEvent(REGISTRY_UPDATE_EVENT, {\n detail: pageContextRegistry[index],\n })\n );\n }\n };\n\n // Add unregister method to the setter\n setContext.unregister = () => {\n const index = pageContextRegistry.findIndex((reg) => reg.id === registration.id);\n if (index !== -1) {\n pageContextRegistry.splice(index, 1);\n // Notify other instances about the removal\n window.dispatchEvent(\n new CustomEvent(REGISTRY_REMOVE_EVENT, {\n detail: { id: registration.id },\n })\n );\n }\n };\n\n return setContext;\n}\n\n/**\n * React hook for providing page context that automatically cleans up on unmount.\n * This is the recommended way to use page context in React components.\n *\n * @param urlPattern - URL pattern (string or RegExp) to match against page URLs\n * @param initialContext - Initial array of ChatContextItem to provide when the pattern matches\n * @returns A setter function to update the context\n */\nexport function useProvidePageContext(\n urlPattern: string | RegExp,\n initialContext: ChatContextItem[] = []\n): (context: ChatContextItem[]) => void {\n const setContextRef = useRef<(((context: ChatContextItem[]) => void) & { unregister: () => void }) | undefined>(\n undefined\n );\n\n // Store the latest context in a ref to avoid stale closures\n const latestContextRef = useRef(initialContext);\n latestContextRef.current = initialContext;\n\n // Create or update the registration when dependencies change\n useEffect(() => {\n setContextRef.current = providePageContext(urlPattern, latestContextRef.current);\n\n // Cleanup on unmount or dependency change\n return () => {\n setContextRef.current?.unregister();\n };\n }, [urlPattern]);\n\n // Update context when initialContext changes\n useEffect(() => {\n if (setContextRef.current) {\n setContextRef.current(initialContext);\n }\n }, [initialContext]);\n\n // Return a stable setter function\n const setContext = useCallback((newContext: ChatContextItem[]) => {\n setContextRef.current?.(newContext);\n }, []);\n\n return setContext;\n}\n\n/**\n * Gets all context items that match the current URL.\n *\n * @param currentUrl - The current page URL to match against\n * @param registrations - Array of registrations to match against\n * @returns Array of ChatContextItem from all matching registrations\n */\nfunction getActivePageContext(currentUrl: string, registrations: PageContextRegistration[]): ChatContextItem[] {\n if (!currentUrl) {\n return [];\n }\n\n const activeContext: ChatContextItem[] = [];\n\n for (const registration of registrations) {\n if (matchesUrlPattern(currentUrl, registration.urlPattern)) {\n activeContext.push(...registration.context);\n }\n }\n\n return activeContext;\n}\n\n/**\n * Notifies about location changes via window events\n */\nfunction notifyLocationChange(pathname: string): void {\n window.dispatchEvent(\n new CustomEvent(LOCATION_CHANGE_EVENT, {\n detail: { pathname },\n })\n );\n}\n\nexport function usePageContext(\n options: { allowQuestions: boolean; allowComponents: boolean } = { allowQuestions: false, allowComponents: false }\n): ChatContextItem[] {\n const [pageContext, setPageContext] = useState<ChatContextItem[]>([]);\n const location = useLocationService();\n const currentPathnameRef = useRef<string>('');\n\n useEffect(() => {\n // Function to update context based on current location and registry\n const updateContext = () => {\n const pathname = location.getLocation().pathname;\n const context = getActivePageContext(pathname, pageContextRegistry);\n setPageContext(context);\n };\n\n // Handle registry changes from any source\n const handleRegistryChange = () => {\n updateContext();\n };\n\n // Handle location changes from other packages\n const handleLocationChange = (event: Event) => {\n const customEvent = event as CustomEvent;\n const pathname = customEvent.detail?.pathname;\n if (pathname && pathname === location.getLocation().pathname) {\n updateContext();\n }\n };\n\n // Subscribe to location changes from this package\n const locationSub = location.getLocationObservable().subscribe((loc: { pathname: string }) => {\n const pathname = loc.pathname;\n if (pathname !== currentPathnameRef.current) {\n currentPathnameRef.current = pathname;\n notifyLocationChange(pathname);\n updateContext();\n }\n });\n\n // Initial update\n updateContext();\n\n // Add event listeners for all registry events\n window.addEventListener(REGISTRY_SYNC_EVENT, handleRegistryChange);\n window.addEventListener(REGISTRY_UPDATE_EVENT, handleRegistryChange);\n window.addEventListener(REGISTRY_REMOVE_EVENT, handleRegistryChange);\n window.addEventListener(LOCATION_CHANGE_EVENT, handleLocationChange);\n\n return () => {\n locationSub.unsubscribe();\n window.removeEventListener(REGISTRY_SYNC_EVENT, handleRegistryChange);\n window.removeEventListener(REGISTRY_UPDATE_EVENT, handleRegistryChange);\n window.removeEventListener(REGISTRY_REMOVE_EVENT, handleRegistryChange);\n window.removeEventListener(LOCATION_CHANGE_EVENT, handleLocationChange);\n };\n }, [location]);\n\n let filteredContext = pageContext;\n\n if (!options.allowQuestions) {\n filteredContext = filteredContext.filter((item) => item.node.data?.type !== 'question');\n }\n\n if (!options.allowComponents) {\n filteredContext = filteredContext.filter((item) => item.node.data?.type !== 'component');\n }\n\n return filteredContext;\n}\n\nexport function generateRegistrationId(prefix = 'page-context'): string {\n return `${prefix}-${Date.now()}-${Math.random().toString(36).slice(2, 11)}`;\n}\n\nfunction matchesUrlPattern(url: string, pattern: string | RegExp): boolean {\n if (pattern instanceof RegExp) {\n return pattern.test(url);\n }\n\n // For string patterns, support simple wildcards\n if (typeof pattern === 'string') {\n // Convert simple wildcard pattern to regex\n // * matches any characters except /, ** matches any path segments\n // Handle ** first with a placeholder to avoid conflicts\n const regexPattern = pattern\n .replace(/\\*\\*/g, '\\u0000DOUBLE_STAR\\u0000') // Temporary placeholder for **\n .replace(/\\*/g, '[^/]*') // * becomes [^/]*\n .replace(/\\u0000DOUBLE_STAR\\u0000/g, '.*') // Replace placeholder with .*\n .replace(/\\?/g, '.'); // ? becomes .\n\n const regex = new RegExp(`^${regexPattern}$`);\n return regex.test(url);\n }\n\n return false;\n}\n\n/**\n * Test utility function to clear all registrations from the registry.\n * This should only be used in tests to ensure a clean slate between test runs.\n *\n * @internal This is for testing purposes only\n */\nexport function __clearPageContextRegistryForTesting(): void {\n pageContextRegistry.length = 0;\n}\n","import { ComponentType, useMemo } from 'react';\nimport { BaseParams, NodeData } from './base';\nimport { type ContextItemData, type ComponentItemData } from './types';\nimport { providePageContext, usePageContext } from './page';\nimport { createAssistantContextItem } from './chat';\n\nexport type ComponentImplementation = ComponentType<any>;\nexport type NamedComponents = Record<string, ComponentImplementation>;\n\n/**\n * Type used to create a component context item.\n */\nexport interface CreateComponentContextParams extends BaseParams {\n components: Record<string, ComponentType<any>>;\n prompt: string;\n namespace?: string;\n}\n\nexport class ComponentNodeData extends NodeData {\n public components: Record<string, ComponentType<any>>;\n public prompt: string;\n public namespace: string;\n\n constructor(params: CreateComponentContextParams) {\n const namespace = params.namespace || 'components';\n super({ ...params, id: `${namespace}-${Object.keys(params.components).join('-')}`, type: 'component' });\n this.components = params.components;\n this.prompt = params.prompt;\n this.namespace = namespace;\n }\n\n formatForLLM(codeElementIds?: string[]): ContextItemData {\n return {\n type: this.type,\n codeElementIds,\n data: {\n name: `${this.namespace} components`,\n prompt: this.prompt,\n namespace: this.namespace,\n } satisfies Omit<ComponentItemData, 'components' | 'text'>,\n };\n }\n}\n\n/**\n * React hook that provides all components available for the current page.\n * This hook automatically updates when the URL changes or when component registrations change.\n *\n * @returns Object containing all components available for the current page, keyed by namespace.componentName\n */\nexport function usePageComponents(): Record<string, ComponentImplementation> {\n const pageContext = usePageContext({ allowComponents: true, allowQuestions: false });\n\n // Use useMemo to avoid recreating the components object on every render\n const components = useMemo(() => {\n const allComponents: Record<string, ComponentImplementation> = {};\n\n // Filter for component context items and extract their components\n pageContext\n .filter((item) => item.node.data?.components)\n .forEach((item) => {\n const componentData = item.node.data;\n if (componentData?.components) {\n const namespace = componentData.namespace || componentData.name || 'components';\n\n // Add each component with namespace_componentName format\n Object.entries(componentData.components).forEach(([componentName, component]) => {\n allComponents[`${namespace}_${componentName}`] = component as ComponentImplementation;\n });\n }\n });\n\n return allComponents;\n }, [pageContext]);\n\n return components;\n}\n\n/**\n * Provide components to the assistant.\n *\n * @param prompt - The prompt to use for the components.\n * @param namespace - The namespace to use for the components.\n * @param components - The components to provide.\n * @param urlPattern - The URL pattern to match for the components.\n */\nexport function provideComponents(\n prompt: string,\n namespace: string,\n components: Record<string, ComponentImplementation>,\n urlPattern: string | RegExp = /.*/\n) {\n return providePageContext(urlPattern, [\n createAssistantContextItem('component', {\n components,\n prompt,\n namespace,\n }),\n ]);\n}\n","import { BaseParams, NodeData } from './base';\nimport { type ContextItemData, type DashboardItemData, type FolderItemData } from './types';\n\nexport interface CreateDashboardContextParams extends BaseParams {\n dashboardUid: string;\n dashboardTitle: string;\n folderUid?: string;\n folderTitle?: string;\n}\n\nexport interface CreateFolderContextParams extends BaseParams {\n folderUid: string;\n folderTitle: string;\n}\n\nexport class DashboardNodeData extends NodeData {\n public dashboardUid: string;\n public dashboardTitle: string;\n public folderUid?: string;\n public folderTitle?: string;\n\n constructor(params: CreateDashboardContextParams) {\n super({ ...params, id: params.dashboardUid, type: 'dashboard' });\n this.dashboardUid = params.dashboardUid;\n this.dashboardTitle = params.dashboardTitle;\n this.folderUid = params.folderUid;\n this.folderTitle = params.folderTitle;\n this.text = params.dashboardTitle;\n }\n\n formatForLLM(codeElementIds?: string[]): ContextItemData {\n return {\n type: this.type,\n codeElementIds,\n data: {\n name: this.dashboardTitle,\n dashboardUid: this.dashboardUid,\n dashboardTitle: this.dashboardTitle,\n folderUid: this.folderUid,\n folderTitle: this.folderTitle,\n text: this.text,\n } satisfies DashboardItemData,\n };\n }\n}\n\nexport class FolderNodeData extends NodeData {\n public folderUid: string;\n public folderTitle: string;\n public text = '';\n\n constructor(params: CreateFolderContextParams) {\n super({ ...params, id: params.folderUid, type: 'dashboard_folder' });\n this.folderUid = params.folderUid;\n this.folderTitle = params.folderTitle;\n this.text = params.folderTitle;\n }\n\n formatForLLM(codeElementIds?: string[]): ContextItemData {\n return {\n type: this.type,\n codeElementIds,\n data: {\n name: this.folderTitle,\n folderUid: this.folderUid,\n folderTitle: this.folderTitle,\n text: this.text,\n } satisfies FolderItemData,\n };\n }\n}\n","import { BaseParams, NodeData } from './base';\nimport { DatasourceMeta } from './factory';\nimport { type ContextItemData, type DatasourceItemData } from './types';\n\n/**\n * Type used to create a datasource context item.\n *\n * All required attributes will be inferred from the datasources uid.\n */\nexport interface CreateDatasourceContextParams extends BaseParams {\n datasourceUid: string;\n}\n\nexport class DatasourceNodeData extends NodeData {\n public datasourceUid: string;\n public datasourceType: string;\n public datasourceName: string;\n public img?: string;\n\n constructor(params: CreateDatasourceContextParams & DatasourceMeta) {\n super({ ...params, id: params.datasourceUid, type: 'datasource' });\n this.datasourceUid = params.datasourceUid;\n this.datasourceType = params.datasourceType;\n this.datasourceName = params.datasourceName;\n this.img = params.img;\n this.text = params.datasourceName;\n }\n\n formatForLLM(codeElementIds?: string[]): ContextItemData {\n return {\n type: this.type,\n codeElementIds,\n data: {\n name: this.datasourceName,\n uid: this.datasourceUid,\n type: this.datasourceType,\n text: this.text,\n img: this.img,\n } satisfies DatasourceItemData,\n };\n }\n}\n","import { BaseParams, NodeData } from './base';\nimport { type ContextItemData, type EntityItemData } from './types';\n\n/**\n * Type used to create an entity context item.\n */\nexport interface CreateEntityContextParams extends BaseParams {\n type: string;\n name: string;\n scope?: {\n env?: string;\n site?: string;\n namespace?: string;\n };\n properties?: Record<string, any>;\n}\n\nexport class EntityNodeData extends NodeData {\n public entityType: string;\n public name: string;\n public scope?: {\n env?: string;\n site?: string;\n namespace?: string;\n };\n public properties?: Record<string, any>;\n\n constructor(params: CreateEntityContextParams) {\n super({\n id: `${params.type}-${params.name}-${[params.scope?.env, params.scope?.site, params.scope?.namespace].filter(Boolean).join('-')}`,\n type: 'entity',\n title: params.title,\n hidden: params.hidden,\n img: params.img,\n icon: params.icon,\n text: params.name,\n });\n this.entityType = params.type;\n this.name = params.name;\n this.scope = params.scope;\n this.properties = params.properties;\n this.text = params.name;\n }\n\n formatForLLM(codeElementIds?: string[]): ContextItemData {\n return {\n type: 'entity',\n codeElementIds,\n data: {\n name: this.name,\n text: this.text,\n type: this.entityType,\n scope: this.scope,\n properties: this.properties,\n } satisfies EntityItemData,\n };\n }\n}\n","import { BaseParams, NodeData } from './base';\nimport { DatasourceMeta } from './factory';\nimport { type ContextItemData, type LabelNameItemData, type LabelValueItemData } from './types';\n\nexport interface CreateLabelNameContextParams extends BaseParams {\n datasourceUid: string;\n labelName: string;\n}\n\nexport interface CreateLabelValueContextParams extends CreateLabelNameContextParams {\n labelValue: string;\n}\n\nexport class LabelNameNodeData extends NodeData {\n public datasourceUid: string;\n public datasourceType: string;\n public datasourceName: string;\n public labelName: string;\n public img?: string;\n\n constructor(params: CreateLabelNameContextParams & DatasourceMeta) {\n super({ ...params, id: `${params.datasourceUid}-${params.labelName}`, type: 'label_name' });\n this.datasourceUid = params.datasourceUid;\n this.datasourceType = params.datasourceType;\n this.datasourceName = params.datasourceName;\n this.labelName = params.labelName;\n this.text = params.labelName;\n this.img = params.img;\n }\n\n formatForLLM(codeElementIds?: string[]): ContextItemData {\n return {\n type: this.type,\n codeElementIds,\n data: {\n name: this.labelName,\n datasourceUid: this.datasourceUid,\n datasourceType: this.datasourceType,\n datasourceName: this.datasourceName,\n labelName: this.labelName,\n img: this.img,\n text: this.text,\n } satisfies LabelNameItemData,\n };\n }\n}\n\nexport class LabelValueNodeData extends NodeData {\n public datasourceUid: string;\n public datasourceType: string;\n public datasourceName: string;\n public labelName: string;\n public labelValue: string;\n public img?: string;\n\n constructor(params: CreateLabelValueContextParams & DatasourceMeta) {\n super({ ...params, id: `${params.datasourceUid}-${params.labelName}-${params.labelValue}`, type: 'label_value' });\n this.datasourceUid = params.datasourceUid;\n this.datasourceType = params.datasourceType;\n this.datasourceName = params.datasourceName;\n this.labelName = params.labelName;\n this.labelValue = params.labelValue;\n this.text = params.labelValue;\n this.img = params.img;\n }\n\n formatForLLM(codeElementIds?: string[]): ContextItemData {\n return {\n type: this.type,\n codeElementIds,\n data: {\n name: this.labelValue,\n datasourceUid: this.datasourceUid,\n datasourceType: this.datasourceType,\n datasourceName: this.datasourceName,\n labelName: this.labelName,\n labelValue: this.labelValue,\n text: this.text,\n img: this.img,\n } satisfies LabelValueItemData,\n };\n }\n}\n","import { getDataSourceSrv } from '@grafana/runtime';\nimport { NodeData, NodeDataParams, StructuredNodeData, StructuredNodeDataParams } from './base';\nimport { ComponentNodeData, type CreateComponentContextParams } from './component';\nimport {\n DashboardNodeData,\n FolderNodeData,\n type CreateDashboardContextParams,\n type CreateFolderContextParams,\n} from './dashboard';\nimport { DatasourceNodeData, type CreateDatasourceContextParams } from './datasource';\nimport { EntityNodeData, type CreateEntityContextParams } from './entity';\nimport {\n LabelNameNodeData,\n LabelValueNodeData,\n type CreateLabelNameContextParams,\n type CreateLabelValueContextParams,\n} from './label';\n\n/**\n * registry to handle the type mappings between ItemData type, params and node data\n */\nexport type ContextTypeRegistry = {\n datasource: { params: CreateDatasourceContextParams; node: DatasourceNodeData };\n label_name: { params: CreateLabelNameContextParams; node: LabelNameNodeData };\n label_value: { params: CreateLabelValueContextParams; node: LabelValueNodeData };\n dashboard: { params: CreateDashboardContextParams; node: DashboardNodeData };\n dashboard_folder: { params: CreateFolderContextParams; node: FolderNodeData };\n structured: { params: StructuredNodeDataParams; node: StructuredNodeData };\n component: { params: CreateComponentContextParams; node: ComponentNodeData };\n entity: { params: CreateEntityContextParams; node: EntityNodeData };\n unknown: { params: NodeDataParams; node: NodeData };\n};\n\nexport type DatasourceMeta = {\n datasourceType: string;\n datasourceName: string;\n img?: string;\n};\n\n/**\n * Helper function to get datasource type from datasource UID\n */\nfunction getDatasourceMeta(datasourceUid: string): DatasourceMeta {\n const datasourceInstance = getDataSourceSrv().getInstanceSettings(datasourceUid);\n return {\n datasourceType: datasourceInstance?.type ?? 'unknown',\n datasourceName: datasourceInstance?.name ?? datasourceUid,\n img: datasourceInstance?.meta?.info?.logos?.small,\n };\n}\n\n/**\n * Creates context nodes based on type with full type safety using generics\n */\nexport function createContextByType<T extends keyof ContextTypeRegistry>(\n type: T,\n params: ContextTypeRegistry[T]['params']\n): ContextTypeRegistry[T]['node'] {\n switch (type) {\n case 'datasource':\n return new DatasourceNodeData({\n ...(params as CreateDatasourceContextParams),\n ...getDatasourceMeta((params as CreateDatasourceContextParams).datasourceUid),\n });\n case 'label_name':\n return new LabelNameNodeData({\n ...(params as CreateLabelNameContextParams),\n ...getDatasourceMeta((params as CreateLabelNameContextParams).datasourceUid),\n });\n case 'label_value':\n return new LabelValueNodeData({\n ...(params as CreateLabelValueContextParams),\n ...getDatasourceMeta((params as CreateLabelValueContextParams).datasourceUid),\n });\n case 'dashboard':\n return new DashboardNodeData(params as CreateDashboardContextParams);\n case 'dashboard_folder':\n return new FolderNodeData(params as CreateFolderContextParams);\n case 'structured':\n return new StructuredNodeData(params as StructuredNodeDataParams);\n case 'component':\n return new ComponentNodeData({\n ...(params as CreateComponentContextParams),\n hidden: true,\n });\n case 'entity':\n return new EntityNodeData(params as CreateEntityContextParams);\n case 'unknown':\n return new NodeData(params as NodeDataParams);\n default:\n console.error(`Unknown context type: ${type}`);\n return new NodeData(params as NodeDataParams);\n }\n}\n","import { IconName } from '@grafana/ui';\nimport { NodeData, StructuredNodeData } from './base';\nimport { createContextByType, ContextTypeRegistry } from './factory';\nimport { ChatContextItem, ItemDataType } from './types';\n\nconst defaultIcons: Record<ItemDataType, IconName> = {\n datasource: 'database',\n label_name: 'database',\n label_value: 'database',\n dashboard: 'dashboard',\n dashboard_folder: 'folder',\n unknown: 'circle-mono',\n structured: 'gf-grid',\n component: 'gf-grid',\n entity: 'asserts',\n};\n\nfunction getTitleFromContextNode(nodeData: NodeData | StructuredNodeData): string {\n return nodeData instanceof StructuredNodeData\n ? nodeData.formatForLLM().data.name\n : (nodeData.text ?? 'Given Context');\n}\n\nfunction getImgFromContextNode(nodeData: NodeData | StructuredNodeData): string | undefined {\n if ('img' in nodeData) {\n return (nodeData as { img?: string }).img;\n }\n return undefined;\n}\n\n/**\n * Creates a new chat context item that can be added to conversations.\n *\n * This function creates structured context items that provide additional information\n * to the AI assistant during conversations. Context items can include:\n * - Datasources (metrics, logs, traces)\n * - Labels and their values\n * - Dashboards and folders\n * - Structured data objects\n *\n * The created context item includes display metadata (title, icon, image) and\n * the underlying data that will be formatted and sent to the LLM when the\n * context is included in a conversation.\n *\n * @param type - The type of context to create (Datasource, Label, Dashboard etc.)\n * @param params - Type-specific parameters for creating the context item\n * @returns A ChatContextItem that can be added to conversation context\n *\n * @example\n * ```typescript\n * // Create a context that will be passed into the function triggering an assistant open\n * openAssistant({\n * ...\n * origin: 'my-feature',\n * context: [\n * createAssistantContextItem('datasource', {\n * datasourceUid: datasource.uid,\n * img: datasource.meta?.info?.logos?.small,\n * }),\n * ],\n * });\n * ```\n */\nexport function createAssistantContextItem<T extends keyof ContextTypeRegistry>(\n type: T,\n params: ContextTypeRegistry[T]['params']\n): ChatContextItem {\n const nodeData = createContextByType(type, params);\n const defaultTitle = params.title ?? getTitleFromContextNode(nodeData);\n const img = params.img ?? getImgFromContextNode(nodeData);\n return {\n node: {\n id: nodeData.id,\n name: defaultTitle,\n img,\n icon: params.icon ?? defaultIcons[type],\n navigable: false,\n selectable: true,\n data: nodeData,\n },\n occurrences: [],\n };\n}\n","import { useMemo } from 'react';\nimport { ChatContextItem } from './types';\nimport { providePageContext, useProvidePageContext, usePageContext, generateRegistrationId } from './page';\n\nexport interface Question {\n prompt: string;\n context?: ChatContextItem[];\n}\n\nexport interface QuestionRegistration {\n id: string;\n urlPattern: string | RegExp;\n questions: Question[];\n}\n\n/**\n * Registers questions for specific pages based on URL patterns.\n * Returns a setter function to update the questions dynamically, similar to useState.\n *\n * Multiple registrations with the same URL pattern are allowed and will all be merged\n * when the pattern matches. Each call creates a new independent registration.\n *\n * @param urlPattern - URL pattern (string or RegExp) to match against page URLs\n * @param initialQuestions - Initial array of questions to provide when the pattern matches\n * @returns A setter function to update the questions, with an unregister method attached\n */\nexport function provideQuestions(\n urlPattern: string | RegExp,\n initialQuestions: Question[]\n): ((questions: Question[]) => void) & { unregister: () => void } {\n // Generate a unique registration ID to prevent collisions when multiple registrations exist\n const registrationId = generateRegistrationId('question');\n\n // Convert questions to ChatContextItem format for the underlying system\n const convertQuestionsToContext = (questions: Question[]): ChatContextItem[] => {\n return questions.map((question, index) => ({\n node: {\n id: `question-${registrationId}-${index}`,\n name: question.prompt,\n navigable: false,\n selectable: true,\n icon: 'question-circle',\n data: {\n type: 'question',\n prompt: question.prompt,\n context: question.context || [],\n },\n },\n occurrences: [],\n }));\n };\n\n // Use the existing providePageContext system\n const setContext = providePageContext(urlPattern, convertQuestionsToContext(initialQuestions));\n\n // Create a wrapper that converts between questions and context\n const setQuestions = (newQuestions: Question[]) => {\n setContext(convertQuestionsToContext(newQuestions));\n };\n\n // Add unregister method\n setQuestions.unregister = setContext.unregister;\n\n return setQuestions;\n}\n\n/**\n * React hook for providing questions that automatically cleans up on unmount.\n * This is the recommended way to use questions in React components.\n *\n * @param urlPattern - URL pattern (string or RegExp) to match against page URLs\n * @param initialQuestions - Initial array of questions to provide when the pattern matches\n * @returns A setter function to update the questions\n */\nexport function useProvideQuestions(\n urlPattern: string | RegExp,\n initialQuestions: Question[] = []\n): (questions: Question[]) => void {\n // Generate a stable unique registration ID per component instance to prevent collisions\n const registrationId = useMemo(\n () => generateRegistrationId('question'),\n [] // Empty deps = generated once per component instance\n );\n\n // Convert questions to ChatContextItem format for the underlying system\n const convertQuestionsToContext = (questions: Question[]): ChatContextItem[] => {\n return questions.map((question, index) => ({\n node: {\n id: `question-${registrationId}-${index}`,\n name: question.prompt,\n navigable: false,\n selectable: true,\n icon: 'question-circle',\n data: {\n type: 'question',\n prompt: question.prompt,\n context: question.context || [],\n },\n },\n occurrences: [],\n }));\n };\n\n // Use the existing useProvidePageContext system\n const setContext = useProvidePageContext(urlPattern, convertQuestionsToContext(initialQuestions));\n\n // Create a wrapper that converts between questions and context\n const setQuestions = (newQuestions: Question[]) => {\n setContext(convertQuestionsToContext(newQuestions));\n };\n\n return setQuestions;\n}\n\n/**\n * React hook to get all questions that match the current URL.\n * This filters the page context to only return question-type items.\n *\n * @returns Array of questions from all matching registrations\n */\nexport function useQuestions(): Question[] {\n const pageContext = usePageContext({ allowQuestions: true, allowComponents: false });\n\n // Filter and convert context items to questions\n return convertContextToQuestions(pageContext);\n}\n\nconst convertContextToQuestions = (contextItems: ChatContextItem[]): Question[] => {\n return contextItems\n .filter((item) => item.node.data?.type === 'question')\n .map((item) => ({\n prompt: item.node.data?.prompt || item.node.name,\n context: item.node.data?.context || [],\n }));\n};\n","import { PluginExtensionAddedFunctionConfig } from '@grafana/data';\n\nexport type CallbackFunction = () => FunctionNamespace[];\nexport type FunctionImplementation = (...args: any[]) => any;\nexport const CALLBACK_EXTENSION_POINT = 'grafana-assistant-app/callback/v0-alpha';\n\nexport type NamedFunctions = Record<string, FunctionImplementation>;\nexport type FunctionNamespace = {\n namespace: string;\n functions: NamedFunctions;\n};\n\nexport function newFunctionNamespace(namespace: string, functions: NamedFunctions): FunctionNamespace {\n return {\n namespace,\n functions,\n };\n}\n\nexport function getExposeAssistantFunctionsConfig(\n namespaces: FunctionNamespace[]\n): PluginExtensionAddedFunctionConfig<() => FunctionNamespace[]> {\n return {\n title: 'callback',\n targets: [CALLBACK_EXTENSION_POINT],\n fn: () => {\n return namespaces.map((namespace) => {\n return {\n namespace: namespace.namespace,\n functions: namespace.functions,\n };\n });\n },\n };\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"rxjs\");","import { getObservablePluginLinks } from '@grafana/runtime';\nimport { map, Observable, of } from 'rxjs';\n\nexport const ASSISTANT_PLUGIN_ID = 'grafana-assistant-app';\nexport const ASSISTANT_PLUGIN_TITLE = 'Grafana Assistant';\n\n/**\n * Check if the assistant is available.\n * @returns An observable that emits true if the assistant is available, false otherwise.\n */\nexport function isAssistantAvailable(): Observable<boolean> {\n // this is to avoid crashing in older Grafana versions\n if (!getObservablePluginLinks) {\n return of(false);\n }\n\n const links = getObservablePluginLinks({\n extensionPointId: 'grafana/extension-sidebar/v0-alpha',\n });\n const isAssistantAvailable = links.pipe(\n map((links: Array<{ pluginId: string; title: string }>) =>\n links.some((link) => link.pluginId === ASSISTANT_PLUGIN_ID && link.title === ASSISTANT_PLUGIN_TITLE)\n )\n );\n return isAssistantAvailable;\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@grafana/data\");","import { BusEventBase, BusEventWithPayload } from '@grafana/data';\nimport { getAppEvents, reportInteraction } from '@grafana/runtime';\nimport { ChatContextItem } from './context/types';\nimport { ASSISTANT_PLUGIN_ID, ASSISTANT_PLUGIN_TITLE } from './plugin';\n\ninterface OpenExtensionSidebarPayload {\n props?: Record<string, unknown>;\n pluginId: string;\n componentTitle: string;\n}\n\nclass OpenExtensionSidebarEvent extends BusEventWithPayload<OpenExtensionSidebarPayload> {\n static type = 'open-extension-sidebar';\n}\n\nclass CloseExtensionSidebarEvent extends BusEventBase {\n static type = 'close-extension-sidebar';\n}\n\nclass ToggleExtensionSidebarEvent extends BusEventWithPayload<OpenExtensionSidebarPayload> {\n static type = 'toggle-extension-sidebar';\n}\n\nfunction openExtensionSidebar(pluginId: string, componentTitle: string, props?: Record<string, unknown>) {\n const event = new OpenExtensionSidebarEvent({\n pluginId,\n componentTitle,\n props,\n });\n getAppEvents().publish(event);\n}\n\nfunction closeExtensionSidebar() {\n const event = new CloseExtensionSidebarEvent();\n getAppEvents().publish(event);\n}\n\nfunction toggleExtensionSidebar(pluginId: string, componentTitle: string, props?: Record<string, unknown>) {\n const event = new ToggleExtensionSidebarEvent({\n pluginId,\n componentTitle,\n props,\n });\n getAppEvents().publish(event);\n}\n\nexport type OpenAssistantProps = {\n origin: string;\n\n prompt?: string;\n context?: ChatContextItem[];\n autoSend?: boolean;\n mode?: 'assistant' | 'investigation';\n};\n\n/**\n * Open the Grafana Assistant sidebar with a given initial prompt.\n *\n * @param props - The props to pass to the assistant.\n * @param props.origin - The origin of the request that opened the assistant. This is used to track the source of the request. Should be a structured string using forward slashes, with the first part as a namespace. Examples: 'grafana-datasources/prometheus/query-builder', 'grafana-slo-app/slo-editor-overview', 'grafana/trace-view-analyzer`.\n * @param props.prompt - The initial prompt to display in the assistant.\n * @param props.context - The initial context to display in the assistant. Created with `createContext`.\n * @param props.autoSend - Whether to automatically send the initial prompt. When true, opens a chat and sends the initial prompt right away. When false, opens chat and updates user message without sending it. Defaults to true.\n * @param props.mode - The mode to open the assistant in. Either 'assistant' or 'investigation'. Defaults to 'assistant'.\n */\nexport function openAssistant(props: OpenAssistantProps) {\n reportInteraction('grafana_assistant_app_opened_sidebar', {\n from: props.origin,\n prompt: props.prompt ?? '',\n });\n\n openExtensionSidebar(ASSISTANT_PLUGIN_ID, ASSISTANT_PLUGIN_TITLE, {\n initialPrompt: props.prompt,\n initialContext: props.context,\n initialAutoSend: props.autoSend ?? true,\n origin: props.origin,\n initialMode: props.mode,\n });\n}\n\n/**\n * Close the Grafana Assistant sidebar.\n */\nexport function closeAssistant() {\n closeExtensionSidebar();\n}\n\nexport function toggleAssistant(props: OpenAssistantProps) {\n reportInteraction('grafana_assistant_app_toggled_sidebar', {\n from: props.origin,\n prompt: props.prompt ?? '',\n });\n\n toggleExtensionSidebar(ASSISTANT_PLUGIN_ID, ASSISTANT_PLUGIN_TITLE, {\n initialPrompt: props.prompt,\n initialContext: props.context,\n initialAutoSend: props.autoSend ?? true,\n origin: props.origin,\n initialMode: props.mode,\n });\n}\n","import { useEffect, useState } from 'react';\nimport { isAssistantAvailable } from './plugin';\nimport { closeAssistant, openAssistant, toggleAssistant, OpenAssistantProps } from './sidebar';\n\nexport type AssistantHook = {\n isAvailable: boolean;\n openAssistant: ((props: OpenAssistantProps) => void) | undefined;\n closeAssistant: (() => void) | undefined;\n toggleAssistant: ((props: OpenAssistantProps) => void) | undefined;\n};\n/**\n * Hook to check if the assistant is available and return the open, close, and toggle functions.\n * @returns {AssistantHook}\n */\nexport function useAssistant(): AssistantHook {\n const [isAvailable, setIsAvailable] = useState(false);\n\n useEffect(() => {\n const sub = isAssistantAvailable().subscribe((available: boolean) => setIsAvailable(available));\n return () => {\n sub.unsubscribe();\n };\n }, []);\n\n return {\n isAvailable,\n openAssistant: isAvailable ? openAssistant : undefined,\n closeAssistant: isAvailable ? closeAssistant : undefined,\n toggleAssistant: isAvailable ? toggleAssistant : undefined,\n };\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@grafana/ui\");","var isDevelopment = false;\n\n/*\n\nBased off glamor's StyleSheet, thanks Sunil ❤️\n\nhigh performance StyleSheet for css-in-js systems\n\n- uses multiple style tags behind the scenes for millions of rules\n- uses `insertRule` for appending in production for *much* faster performance\n\n// usage\n\nimport { StyleSheet } from '@emotion/sheet'\n\nlet styleSheet = new StyleSheet({ key: '', container: document.head })\n\nstyleSheet.insert('#box { border: 1px solid red; }')\n- appends a css rule into the stylesheet\n\nstyleSheet.flush()\n- empties the stylesheet of all its contents\n\n*/\n\nfunction sheetForTag(tag) {\n if (tag.sheet) {\n return tag.sheet;\n } // this weirdness brought to you by firefox\n\n /* istanbul ignore next */\n\n\n for (var i = 0; i < document.styleSheets.length; i++) {\n if (document.styleSheets[i].ownerNode === tag) {\n return document.styleSheets[i];\n }\n } // this function should always return with a value\n // TS can't understand it though so we make it stop complaining here\n\n\n return undefined;\n}\n\nfunction createStyleElement(options) {\n var tag = document.createElement('style');\n tag.setAttribute('data-emotion', options.key);\n\n if (options.nonce !== undefined) {\n tag.setAttribute('nonce', options.nonce);\n }\n\n tag.appendChild(document.createTextNode(''));\n tag.setAttribute('data-s', '');\n return tag;\n}\n\nvar StyleSheet = /*#__PURE__*/function () {\n // Using Node instead of HTMLElement since container may be a ShadowRoot\n function StyleSheet(options) {\n var _this = this;\n\n this._insertTag = function (tag) {\n var before;\n\n if (_this.tags.length === 0) {\n if (_this.insertionPoint) {\n before = _this.insertionPoint.nextSibling;\n } else if (_this.prepend) {\n before = _this.container.firstChild;\n } else {\n before = _this.before;\n }\n } else {\n before = _this.tags[_this.tags.length - 1].nextSibling;\n }\n\n _this.container.insertBefore(tag, before);\n\n _this.tags.push(tag);\n };\n\n this.isSpeedy = options.speedy === undefined ? !isDevelopment : options.speedy;\n this.tags = [];\n this.ctr = 0;\n this.nonce = options.nonce; // key is the value of the data-emotion attribute, it's used to identify different sheets\n\n this.key = options.key;\n this.container = options.container;\n this.prepend = options.prepend;\n this.insertionPoint = options.insertionPoint;\n this.before = null;\n }\n\n var _proto = StyleSheet.prototype;\n\n _proto.hydrate = function hydrate(nodes) {\n nodes.forEach(this._insertTag);\n };\n\n _proto.insert = function insert(rule) {\n // the max length is how many rules we have per style tag, it's 65000 in speedy mode\n // it's 1 in dev because we insert source maps that map a single rule to a location\n // and you can only have one source map per style tag\n if (this.ctr % (this.isSpeedy ? 65000 : 1) === 0) {\n this._insertTag(createStyleElement(this));\n }\n\n var tag = this.tags[this.tags.length - 1];\n\n if (this.isSpeedy) {\n var sheet = sheetForTag(tag);\n\n try {\n // this is the ultrafast version, works across browsers\n // the big drawback is that the css won't be editable in devtools\n sheet.insertRule(rule, sheet.cssRules.length);\n } catch (e) {\n }\n } else {\n tag.appendChild(document.createTextNode(rule));\n }\n\n this.ctr++;\n };\n\n _proto.flush = function flush() {\n this.tags.forEach(function (tag) {\n var _tag$parentNode;\n\n return (_tag$parentNode = tag.parentNode) == null ? void 0 : _tag$parentNode.removeChild(tag);\n });\n this.tags = [];\n this.ctr = 0;\n };\n\n return StyleSheet;\n}();\n\nexport { StyleSheet };\n","/**\n * @param {number}\n * @return {number}\n */\nexport var abs = Math.abs\n\n/**\n * @param {number}\n * @return {string}\n */\nexport var from = String.fromCharCode\n\n/**\n * @param {object}\n * @return {object}\n */\nexport var assign = Object.assign\n\n/**\n * @param {string} value\n * @param {number} length\n * @return {number}\n */\nexport function hash (value, length) {\n\treturn charat(value, 0) ^ 45 ? (((((((length << 2) ^ charat(value, 0)) << 2) ^ charat(value, 1)) << 2) ^ charat(value, 2)) << 2) ^ charat(value, 3) : 0\n}\n\n/**\n * @param {string} value\n * @return {string}\n */\nexport function trim (value) {\n\treturn value.trim()\n}\n\n/**\n * @param {string} value\n * @param {RegExp} pattern\n * @return {string?}\n */\nexport function match (value, pattern) {\n\treturn (value = pattern.exec(value)) ? value[0] : value\n}\n\n/**\n * @param {string} value\n * @param {(string|RegExp)} pattern\n * @param {string} replacement\n * @return {string}\n */\nexport function replace (value, pattern, replacement) {\n\treturn value.replace(pattern, replacement)\n}\n\n/**\n * @param {string} value\n * @param {string} search\n * @return {number}\n */\nexport function indexof (value, search) {\n\treturn value.indexOf(search)\n}\n\n/**\n * @param {string} value\n * @param {number} index\n * @return {number}\n */\nexport function charat (value, index) {\n\treturn value.charCodeAt(index) | 0\n}\n\n/**\n * @param {string} value\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function substr (value, begin, end) {\n\treturn value.slice(begin, end)\n}\n\n/**\n * @param {string} value\n * @return {number}\n */\nexport function strlen (value) {\n\treturn value.length\n}\n\n/**\n * @param {any[]} value\n * @return {number}\n */\nexport function sizeof (value) {\n\treturn value.length\n}\n\n/**\n * @param {any} value\n * @param {any[]} array\n * @return {any}\n */\nexport function append (value, array) {\n\treturn array.push(value), value\n}\n\n/**\n * @param {string[]} array\n * @param {function} callback\n * @return {string}\n */\nexport function combine (array, callback) {\n\treturn array.map(callback).join('')\n}\n","import {from, trim, charat, strlen, substr, append, assign} from './Utility.js'\n\nexport var line = 1\nexport var column = 1\nexport var length = 0\nexport var position = 0\nexport var character = 0\nexport var characters = ''\n\n/**\n * @param {string} value\n * @param {object | null} root\n * @param {object | null} parent\n * @param {string} type\n * @param {string[] | string} props\n * @param {object[] | string} children\n * @param {number} length\n */\nexport function node (value, root, parent, type, props, children, length) {\n\treturn {value: value, root: root, parent: parent, type: type, props: props, children: children, line: line, column: column, length: length, return: ''}\n}\n\n/**\n * @param {object} root\n * @param {object} props\n * @return {object}\n */\nexport function copy (root, props) {\n\treturn assign(node('', null, null, '', null, null, 0), root, {length: -root.length}, props)\n}\n\n/**\n * @return {number}\n */\nexport function char () {\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function prev () {\n\tcharacter = position > 0 ? charat(characters, --position) : 0\n\n\tif (column--, character === 10)\n\t\tcolumn = 1, line--\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function next () {\n\tcharacter = position < length ? charat(characters, position++) : 0\n\n\tif (column++, character === 10)\n\t\tcolumn = 1, line++\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function peek () {\n\treturn charat(characters, position)\n}\n\n/**\n * @return {number}\n */\nexport function caret () {\n\treturn position\n}\n\n/**\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function slice (begin, end) {\n\treturn substr(characters, begin, end)\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function token (type) {\n\tswitch (type) {\n\t\t// \\0 \\t \\n \\r \\s whitespace token\n\t\tcase 0: case 9: case 10: case 13: case 32:\n\t\t\treturn 5\n\t\t// ! + , / > @ ~ isolate token\n\t\tcase 33: case 43: case 44: case 47: case 62: case 64: case 126:\n\t\t// ; { } breakpoint token\n\t\tcase 59: case 123: case 125:\n\t\t\treturn 4\n\t\t// : accompanied token\n\t\tcase 58:\n\t\t\treturn 3\n\t\t// \" ' ( [ opening delimit token\n\t\tcase 34: case 39: case 40: case 91:\n\t\t\treturn 2\n\t\t// ) ] closing delimit token\n\t\tcase 41: case 93:\n\t\t\treturn 1\n\t}\n\n\treturn 0\n}\n\n/**\n * @param {string} value\n * @return {any[]}\n */\nexport function alloc (value) {\n\treturn line = column = 1, length = strlen(characters = value), position = 0, []\n}\n\n/**\n * @param {any} value\n * @return {any}\n */\nexport function dealloc (value) {\n\treturn characters = '', value\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function delimit (type) {\n\treturn trim(slice(position - 1, delimiter(type === 91 ? type + 2 : type === 40 ? type + 1 : type)))\n}\n\n/**\n * @param {string} value\n * @return {string[]}\n */\nexport function tokenize (value) {\n\treturn dealloc(tokenizer(alloc(value)))\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function whitespace (type) {\n\twhile (character = peek())\n\t\tif (character < 33)\n\t\t\tnext()\n\t\telse\n\t\t\tbreak\n\n\treturn token(type) > 2 || token(character) > 3 ? '' : ' '\n}\n\n/**\n * @param {string[]} children\n * @return {string[]}\n */\nexport function tokenizer (children) {\n\twhile (next())\n\t\tswitch (token(character)) {\n\t\t\tcase 0: append(identifier(position - 1), children)\n\t\t\t\tbreak\n\t\t\tcase 2: append(delimit(character), children)\n\t\t\t\tbreak\n\t\t\tdefault: append(from(character), children)\n\t\t}\n\n\treturn children\n}\n\n/**\n * @param {number} index\n * @param {number} count\n * @return {string}\n */\nexport function escaping (index, count) {\n\twhile (--count && next())\n\t\t// not 0-9 A-F a-f\n\t\tif (character < 48 || character > 102 || (character > 57 && character < 65) || (character > 70 && character < 97))\n\t\t\tbreak\n\n\treturn slice(index, caret() + (count < 6 && peek() == 32 && next() == 32))\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function delimiter (type) {\n\twhile (next())\n\t\tswitch (character) {\n\t\t\t// ] ) \" '\n\t\t\tcase type:\n\t\t\t\treturn position\n\t\t\t// \" '\n\t\t\tcase 34: case 39:\n\t\t\t\tif (type !== 34 && type !== 39)\n\t\t\t\t\tdelimiter(character)\n\t\t\t\tbreak\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (type === 41)\n\t\t\t\t\tdelimiter(type)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tnext()\n\t\t\t\tbreak\n\t\t}\n\n\treturn position\n}\n\n/**\n * @param {number} type\n * @param {number} index\n * @return {number}\n */\nexport function commenter (type, index) {\n\twhile (next())\n\t\t// //\n\t\tif (type + character === 47 + 10)\n\t\t\tbreak\n\t\t// /*\n\t\telse if (type + character === 42 + 42 && peek() === 47)\n\t\t\tbreak\n\n\treturn '/*' + slice(index, position - 1) + '*' + from(type === 47 ? type : next())\n}\n\n/**\n * @param {number} index\n * @return {string}\n */\nexport function identifier (index) {\n\twhile (!token(peek()))\n\t\tnext()\n\n\treturn slice(index, position)\n}\n","export var MS = '-ms-'\nexport var MOZ = '-moz-'\nexport var WEBKIT = '-webkit-'\n\nexport var COMMENT = 'comm'\nexport var RULESET = 'rule'\nexport var DECLARATION = 'decl'\n\nexport var PAGE = '@page'\nexport var MEDIA = '@media'\nexport var IMPORT = '@import'\nexport var CHARSET = '@charset'\nexport var VIEWPORT = '@viewport'\nexport var SUPPORTS = '@supports'\nexport var DOCUMENT = '@document'\nexport var NAMESPACE = '@namespace'\nexport var KEYFRAMES = '@keyframes'\nexport var FONT_FACE = '@font-face'\nexport var COUNTER_STYLE = '@counter-style'\nexport var FONT_FEATURE_VALUES = '@font-feature-values'\nexport var LAYER = '@layer'\n","import {IMPORT, LAYER, COMMENT, RULESET, DECLARATION, KEYFRAMES} from './Enum.js'\nimport {strlen, sizeof} from './Utility.js'\n\n/**\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function serialize (children, callback) {\n\tvar output = ''\n\tvar length = sizeof(children)\n\n\tfor (var i = 0; i < length; i++)\n\t\toutput += callback(children[i], i, children, callback) || ''\n\n\treturn output\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function stringify (element, index, children, callback) {\n\tswitch (element.type) {\n\t\tcase LAYER: if (element.children.length) break\n\t\tcase IMPORT: case DECLARATION: return element.return = element.return || element.value\n\t\tcase COMMENT: return ''\n\t\tcase KEYFRAMES: return element.return = element.value + '{' + serialize(element.children, callback) + '}'\n\t\tcase RULESET: element.value = element.props.join(',')\n\t}\n\n\treturn strlen(children = serialize(element.children, callback)) ? element.return = element.value + '{' + children + '}' : ''\n}\n","import {COMMENT, RULESET, DECLARATION} from './Enum.js'\nimport {abs, charat, trim, from, sizeof, strlen, substr, append, replace, indexof} from './Utility.js'\nimport {node, char, prev, next, peek, caret, alloc, dealloc, delimit, whitespace, escaping, identifier, commenter} from './Tokenizer.js'\n\n/**\n * @param {string} value\n * @return {object[]}\n */\nexport function compile (value) {\n\treturn dealloc(parse('', null, null, null, [''], value = alloc(value), 0, [0], value))\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {string[]} rule\n * @param {string[]} rules\n * @param {string[]} rulesets\n * @param {number[]} pseudo\n * @param {number[]} points\n * @param {string[]} declarations\n * @return {object}\n */\nexport function parse (value, root, parent, rule, rules, rulesets, pseudo, points, declarations) {\n\tvar index = 0\n\tvar offset = 0\n\tvar length = pseudo\n\tvar atrule = 0\n\tvar property = 0\n\tvar previous = 0\n\tvar variable = 1\n\tvar scanning = 1\n\tvar ampersand = 1\n\tvar character = 0\n\tvar type = ''\n\tvar props = rules\n\tvar children = rulesets\n\tvar reference = rule\n\tvar characters = type\n\n\twhile (scanning)\n\t\tswitch (previous = character, character = next()) {\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (previous != 108 && charat(characters, length - 1) == 58) {\n\t\t\t\t\tif (indexof(characters += replace(delimit(character), '&', '&\\f'), '&\\f') != -1)\n\t\t\t\t\t\tampersand = -1\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t// \" ' [\n\t\t\tcase 34: case 39: case 91:\n\t\t\t\tcharacters += delimit(character)\n\t\t\t\tbreak\n\t\t\t// \\t \\n \\r \\s\n\t\t\tcase 9: case 10: case 13: case 32:\n\t\t\t\tcharacters += whitespace(previous)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tcharacters += escaping(caret() - 1, 7)\n\t\t\t\tcontinue\n\t\t\t// /\n\t\t\tcase 47:\n\t\t\t\tswitch (peek()) {\n\t\t\t\t\tcase 42: case 47:\n\t\t\t\t\t\tappend(comment(commenter(next(), caret()), root, parent), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcharacters += '/'\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t// {\n\t\t\tcase 123 * variable:\n\t\t\t\tpoints[index++] = strlen(characters) * ampersand\n\t\t\t// } ; \\0\n\t\t\tcase 125 * variable: case 59: case 0:\n\t\t\t\tswitch (character) {\n\t\t\t\t\t// \\0 }\n\t\t\t\t\tcase 0: case 125: scanning = 0\n\t\t\t\t\t// ;\n\t\t\t\t\tcase 59 + offset: if (ampersand == -1) characters = replace(characters, /\\f/g, '')\n\t\t\t\t\t\tif (property > 0 && (strlen(characters) - length))\n\t\t\t\t\t\t\tappend(property > 32 ? declaration(characters + ';', rule, parent, length - 1) : declaration(replace(characters, ' ', '') + ';', rule, parent, length - 2), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @ ;\n\t\t\t\t\tcase 59: characters += ';'\n\t\t\t\t\t// { rule/at-rule\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tappend(reference = ruleset(characters, root, parent, index, offset, rules, points, type, props = [], children = [], length), rulesets)\n\n\t\t\t\t\t\tif (character === 123)\n\t\t\t\t\t\t\tif (offset === 0)\n\t\t\t\t\t\t\t\tparse(characters, root, reference, reference, props, rulesets, length, points, children)\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tswitch (atrule === 99 && charat(characters, 3) === 110 ? 100 : atrule) {\n\t\t\t\t\t\t\t\t\t// d l m s\n\t\t\t\t\t\t\t\t\tcase 100: case 108: case 109: case 115:\n\t\t\t\t\t\t\t\t\t\tparse(value, reference, reference, rule && append(ruleset(value, reference, reference, 0, 0, rules, points, type, rules, props = [], length), children), rules, children, length, points, rule ? props : children)\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tparse(characters, reference, reference, reference, [''], children, 0, points, children)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tindex = offset = property = 0, variable = ampersand = 1, type = characters = '', length = pseudo\n\t\t\t\tbreak\n\t\t\t// :\n\t\t\tcase 58:\n\t\t\t\tlength = 1 + strlen(characters), property = previous\n\t\t\tdefault:\n\t\t\t\tif (variable < 1)\n\t\t\t\t\tif (character == 123)\n\t\t\t\t\t\t--variable\n\t\t\t\t\telse if (character == 125 && variable++ == 0 && prev() == 125)\n\t\t\t\t\t\tcontinue\n\n\t\t\t\tswitch (characters += from(character), character * variable) {\n\t\t\t\t\t// &\n\t\t\t\t\tcase 38:\n\t\t\t\t\t\tampersand = offset > 0 ? 1 : (characters += '\\f', -1)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// ,\n\t\t\t\t\tcase 44:\n\t\t\t\t\t\tpoints[index++] = (strlen(characters) - 1) * ampersand, ampersand = 1\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @\n\t\t\t\t\tcase 64:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (peek() === 45)\n\t\t\t\t\t\t\tcharacters += delimit(next())\n\n\t\t\t\t\t\tatrule = peek(), offset = length = strlen(type = characters += identifier(caret())), character++\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// -\n\t\t\t\t\tcase 45:\n\t\t\t\t\t\tif (previous === 45 && strlen(characters) == 2)\n\t\t\t\t\t\t\tvariable = 0\n\t\t\t\t}\n\t\t}\n\n\treturn rulesets\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} index\n * @param {number} offset\n * @param {string[]} rules\n * @param {number[]} points\n * @param {string} type\n * @param {string[]} props\n * @param {string[]} children\n * @param {number} length\n * @return {object}\n */\nexport function ruleset (value, root, parent, index, offset, rules, points, type, props, children, length) {\n\tvar post = offset - 1\n\tvar rule = offset === 0 ? rules : ['']\n\tvar size = sizeof(rule)\n\n\tfor (var i = 0, j = 0, k = 0; i < index; ++i)\n\t\tfor (var x = 0, y = substr(value, post + 1, post = abs(j = points[i])), z = value; x < size; ++x)\n\t\t\tif (z = trim(j > 0 ? rule[x] + ' ' + y : replace(y, /&\\f/g, rule[x])))\n\t\t\t\tprops[k++] = z\n\n\treturn node(value, root, parent, offset === 0 ? RULESET : type, props, children, length)\n}\n\n/**\n * @param {number} value\n * @param {object} root\n * @param {object?} parent\n * @return {object}\n */\nexport function comment (value, root, parent) {\n\treturn node(value, root, parent, COMMENT, from(char()), substr(value, 2, -2), 0)\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} length\n * @return {object}\n */\nexport function declaration (value, root, parent, length) {\n\treturn node(value, root, parent, DECLARATION, substr(value, 0, length), substr(value, length + 1, -1), length)\n}\n","import { StyleSheet } from '@emotion/sheet';\nimport { dealloc, alloc, next, token, from, peek, delimit, slice, position, RULESET, combine, match, serialize, copy, replace, WEBKIT, MOZ, MS, KEYFRAMES, DECLARATION, hash, charat, strlen, indexof, stringify, rulesheet, middleware, compile } from 'stylis';\nimport '@emotion/weak-memoize';\nimport '@emotion/memoize';\n\nvar identifierWithPointTracking = function identifierWithPointTracking(begin, points, index) {\n var previous = 0;\n var character = 0;\n\n while (true) {\n previous = character;\n character = peek(); // &\\f\n\n if (previous === 38 && character === 12) {\n points[index] = 1;\n }\n\n if (token(character)) {\n break;\n }\n\n next();\n }\n\n return slice(begin, position);\n};\n\nvar toRules = function toRules(parsed, points) {\n // pretend we've started with a comma\n var index = -1;\n var character = 44;\n\n do {\n switch (token(character)) {\n case 0:\n // &\\f\n if (character === 38 && peek() === 12) {\n // this is not 100% correct, we don't account for literal sequences here - like for example quoted strings\n // stylis inserts \\f after & to know when & where it should replace this sequence with the context selector\n // and when it should just concatenate the outer and inner selectors\n // it's very unlikely for this sequence to actually appear in a different context, so we just leverage this fact here\n points[index] = 1;\n }\n\n parsed[index] += identifierWithPointTracking(position - 1, points, index);\n break;\n\n case 2:\n parsed[index] += delimit(character);\n break;\n\n case 4:\n // comma\n if (character === 44) {\n // colon\n parsed[++index] = peek() === 58 ? '&\\f' : '';\n points[index] = parsed[index].length;\n break;\n }\n\n // fallthrough\n\n default:\n parsed[index] += from(character);\n }\n } while (character = next());\n\n return parsed;\n};\n\nvar getRules = function getRules(value, points) {\n return dealloc(toRules(alloc(value), points));\n}; // WeakSet would be more appropriate, but only WeakMap is supported in IE11\n\n\nvar fixedElements = /* #__PURE__ */new WeakMap();\nvar compat = function compat(element) {\n if (element.type !== 'rule' || !element.parent || // positive .length indicates that this rule contains pseudo\n // negative .length indicates that this rule has been already prefixed\n element.length < 1) {\n return;\n }\n\n var value = element.value;\n var parent = element.parent;\n var isImplicitRule = element.column === parent.column && element.line === parent.line;\n\n while (parent.type !== 'rule') {\n parent = parent.parent;\n if (!parent) return;\n } // short-circuit for the simplest case\n\n\n if (element.props.length === 1 && value.charCodeAt(0) !== 58\n /* colon */\n && !fixedElements.get(parent)) {\n return;\n } // if this is an implicitly inserted rule (the one eagerly inserted at the each new nested level)\n // then the props has already been manipulated beforehand as they that array is shared between it and its \"rule parent\"\n\n\n if (isImplicitRule) {\n return;\n }\n\n fixedElements.set(element, true);\n var points = [];\n var rules = getRules(value, points);\n var parentRules = parent.props;\n\n for (var i = 0, k = 0; i < rules.length; i++) {\n for (var j = 0; j < parentRules.length; j++, k++) {\n element.props[k] = points[i] ? rules[i].replace(/&\\f/g, parentRules[j]) : parentRules[j] + \" \" + rules[i];\n }\n }\n};\nvar removeLabel = function removeLabel(element) {\n if (element.type === 'decl') {\n var value = element.value;\n\n if ( // charcode for l\n value.charCodeAt(0) === 108 && // charcode for b\n value.charCodeAt(2) === 98) {\n // this ignores label\n element[\"return\"] = '';\n element.value = '';\n }\n }\n};\n\n/* eslint-disable no-fallthrough */\n\nfunction prefix(value, length) {\n switch (hash(value, length)) {\n // color-adjust\n case 5103:\n return WEBKIT + 'print-' + value + value;\n // animation, animation-(delay|direction|duration|fill-mode|iteration-count|name|play-state|timing-function)\n\n case 5737:\n case 4201:\n case 3177:\n case 3433:\n case 1641:\n case 4457:\n case 2921: // text-decoration, filter, clip-path, backface-visibility, column, box-decoration-break\n\n case 5572:\n case 6356:\n case 5844:\n case 3191:\n case 6645:\n case 3005: // mask, mask-image, mask-(mode|clip|size), mask-(repeat|origin), mask-position, mask-composite,\n\n case 6391:\n case 5879:\n case 5623:\n case 6135:\n case 4599:\n case 4855: // background-clip, columns, column-(count|fill|gap|rule|rule-color|rule-style|rule-width|span|width)\n\n case 4215:\n case 6389:\n case 5109:\n case 5365:\n case 5621:\n case 3829:\n return WEBKIT + value + value;\n // appearance, user-select, transform, hyphens, text-size-adjust\n\n case 5349:\n case 4246:\n case 4810:\n case 6968:\n case 2756:\n return WEBKIT + value + MOZ + value + MS + value + value;\n // flex, flex-direction\n\n case 6828:\n case 4268:\n return WEBKIT + value + MS + value + value;\n // order\n\n case 6165:\n return WEBKIT + value + MS + 'flex-' + value + value;\n // align-items\n\n case 5187:\n return WEBKIT + value + replace(value, /(\\w+).+(:[^]+)/, WEBKIT + 'box-$1$2' + MS + 'flex-$1$2') + value;\n // align-self\n\n case 5443:\n return WEBKIT + value + MS + 'flex-item-' + replace(value, /flex-|-self/, '') + value;\n // align-content\n\n case 4675:\n return WEBKIT + value + MS + 'flex-line-pack' + replace(value, /align-content|flex-|-self/, '') + value;\n // flex-shrink\n\n case 5548:\n return WEBKIT + value + MS + replace(value, 'shrink', 'negative') + value;\n // flex-basis\n\n case 5292:\n return WEBKIT + value + MS + replace(value, 'basis', 'preferred-size') + value;\n // flex-grow\n\n case 6060:\n return WEBKIT + 'box-' + replace(value, '-grow', '') + WEBKIT + value + MS + replace(value, 'grow', 'positive') + value;\n // transition\n\n case 4554:\n return WEBKIT + replace(value, /([^-])(transform)/g, '$1' + WEBKIT + '$2') + value;\n // cursor\n\n case 6187:\n return replace(replace(replace(value, /(zoom-|grab)/, WEBKIT + '$1'), /(image-set)/, WEBKIT + '$1'), value, '') + value;\n // background, background-image\n\n case 5495:\n case 3959:\n return replace(value, /(image-set\\([^]*)/, WEBKIT + '$1' + '$`$1');\n // justify-content\n\n case 4968:\n return replace(replace(value, /(.+:)(flex-)?(.*)/, WEBKIT + 'box-pack:$3' + MS + 'flex-pack:$3'), /s.+-b[^;]+/, 'justify') + WEBKIT + value + value;\n // (margin|padding)-inline-(start|end)\n\n case 4095:\n case 3583:\n case 4068:\n case 2532:\n return replace(value, /(.+)-inline(.+)/, WEBKIT + '$1$2') + value;\n // (min|max)?(width|height|inline-size|block-size)\n\n case 8116:\n case 7059:\n case 5753:\n case 5535:\n case 5445:\n case 5701:\n case 4933:\n case 4677:\n case 5533:\n case 5789:\n case 5021:\n case 4765:\n // stretch, max-content, min-content, fill-available\n if (strlen(value) - 1 - length > 6) switch (charat(value, length + 1)) {\n // (m)ax-content, (m)in-content\n case 109:\n // -\n if (charat(value, length + 4) !== 45) break;\n // (f)ill-available, (f)it-content\n\n case 102:\n return replace(value, /(.+:)(.+)-([^]+)/, '$1' + WEBKIT + '$2-$3' + '$1' + MOZ + (charat(value, length + 3) == 108 ? '$3' : '$2-$3')) + value;\n // (s)tretch\n\n case 115:\n return ~indexof(value, 'stretch') ? prefix(replace(value, 'stretch', 'fill-available'), length) + value : value;\n }\n break;\n // position: sticky\n\n case 4949:\n // (s)ticky?\n if (charat(value, length + 1) !== 115) break;\n // display: (flex|inline-flex)\n\n case 6444:\n switch (charat(value, strlen(value) - 3 - (~indexof(value, '!important') && 10))) {\n // stic(k)y\n case 107:\n return replace(value, ':', ':' + WEBKIT) + value;\n // (inline-)?fl(e)x\n\n case 101:\n return replace(value, /(.+:)([^;!]+)(;|!.+)?/, '$1' + WEBKIT + (charat(value, 14) === 45 ? 'inline-' : '') + 'box$3' + '$1' + WEBKIT + '$2$3' + '$1' + MS + '$2box$3') + value;\n }\n\n break;\n // writing-mode\n\n case 5936:\n switch (charat(value, length + 11)) {\n // vertical-l(r)\n case 114:\n return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb') + value;\n // vertical-r(l)\n\n case 108:\n return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb-rl') + value;\n // horizontal(-)tb\n\n case 45:\n return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'lr') + value;\n }\n\n return WEBKIT + value + MS + value + value;\n }\n\n return value;\n}\n\nvar prefixer = function prefixer(element, index, children, callback) {\n if (element.length > -1) if (!element[\"return\"]) switch (element.type) {\n case DECLARATION:\n element[\"return\"] = prefix(element.value, element.length);\n break;\n\n case KEYFRAMES:\n return serialize([copy(element, {\n value: replace(element.value, '@', '@' + WEBKIT)\n })], callback);\n\n case RULESET:\n if (element.length) return combine(element.props, function (value) {\n switch (match(value, /(::plac\\w+|:read-\\w+)/)) {\n // :read-(only|write)\n case ':read-only':\n case ':read-write':\n return serialize([copy(element, {\n props: [replace(value, /:(read-\\w+)/, ':' + MOZ + '$1')]\n })], callback);\n // :placeholder\n\n case '::placeholder':\n return serialize([copy(element, {\n props: [replace(value, /:(plac\\w+)/, ':' + WEBKIT + 'input-$1')]\n }), copy(element, {\n props: [replace(value, /:(plac\\w+)/, ':' + MOZ + '$1')]\n }), copy(element, {\n props: [replace(value, /:(plac\\w+)/, MS + 'input-$1')]\n })], callback);\n }\n\n return '';\n });\n }\n};\n\nvar defaultStylisPlugins = [prefixer];\n\nvar createCache = function createCache(options) {\n var key = options.key;\n\n if (key === 'css') {\n var ssrStyles = document.querySelectorAll(\"style[data-emotion]:not([data-s])\"); // get SSRed styles out of the way of React's hydration\n // document.head is a safe place to move them to(though note document.head is not necessarily the last place they will be)\n // note this very very intentionally targets all style elements regardless of the key to ensure\n // that creating a cache works inside of render of a React component\n\n Array.prototype.forEach.call(ssrStyles, function (node) {\n // we want to only move elements which have a space in the data-emotion attribute value\n // because that indicates that it is an Emotion 11 server-side rendered style elements\n // while we will already ignore Emotion 11 client-side inserted styles because of the :not([data-s]) part in the selector\n // Emotion 10 client-side inserted styles did not have data-s (but importantly did not have a space in their data-emotion attributes)\n // so checking for the space ensures that loading Emotion 11 after Emotion 10 has inserted some styles\n // will not result in the Emotion 10 styles being destroyed\n var dataEmotionAttribute = node.getAttribute('data-emotion');\n\n if (dataEmotionAttribute.indexOf(' ') === -1) {\n return;\n }\n\n document.head.appendChild(node);\n node.setAttribute('data-s', '');\n });\n }\n\n var stylisPlugins = options.stylisPlugins || defaultStylisPlugins;\n\n var inserted = {};\n var container;\n var nodesToHydrate = [];\n\n {\n container = options.container || document.head;\n Array.prototype.forEach.call( // this means we will ignore elements which don't have a space in them which\n // means that the style elements we're looking at are only Emotion 11 server-rendered style elements\n document.querySelectorAll(\"style[data-emotion^=\\\"\" + key + \" \\\"]\"), function (node) {\n var attrib = node.getAttribute(\"data-emotion\").split(' ');\n\n for (var i = 1; i < attrib.length; i++) {\n inserted[attrib[i]] = true;\n }\n\n nodesToHydrate.push(node);\n });\n }\n\n var _insert;\n\n var omnipresentPlugins = [compat, removeLabel];\n\n {\n var currentSheet;\n var finalizingPlugins = [stringify, rulesheet(function (rule) {\n currentSheet.insert(rule);\n })];\n var serializer = middleware(omnipresentPlugins.concat(stylisPlugins, finalizingPlugins));\n\n var stylis = function stylis(styles) {\n return serialize(compile(styles), serializer);\n };\n\n _insert = function insert(selector, serialized, sheet, shouldCache) {\n currentSheet = sheet;\n\n stylis(selector ? selector + \"{\" + serialized.styles + \"}\" : serialized.styles);\n\n if (shouldCache) {\n cache.inserted[serialized.name] = true;\n }\n };\n }\n\n var cache = {\n key: key,\n sheet: new StyleSheet({\n key: key,\n container: container,\n nonce: options.nonce,\n speedy: options.speedy,\n prepend: options.prepend,\n insertionPoint: options.insertionPoint\n }),\n nonce: options.nonce,\n inserted: inserted,\n registered: {},\n insert: _insert\n };\n cache.sheet.hydrate(nodesToHydrate);\n return cache;\n};\n\nexport { createCache as default };\n","var unitlessKeys = {\n animationIterationCount: 1,\n aspectRatio: 1,\n borderImageOutset: 1,\n borderImageSlice: 1,\n borderImageWidth: 1,\n boxFlex: 1,\n boxFlexGroup: 1,\n boxOrdinalGroup: 1,\n columnCount: 1,\n columns: 1,\n flex: 1,\n flexGrow: 1,\n flexPositive: 1,\n flexShrink: 1,\n flexNegative: 1,\n flexOrder: 1,\n gridRow: 1,\n gridRowEnd: 1,\n gridRowSpan: 1,\n gridRowStart: 1,\n gridColumn: 1,\n gridColumnEnd: 1,\n gridColumnSpan: 1,\n gridColumnStart: 1,\n msGridRow: 1,\n msGridRowSpan: 1,\n msGridColumn: 1,\n msGridColumnSpan: 1,\n fontWeight: 1,\n lineHeight: 1,\n opacity: 1,\n order: 1,\n orphans: 1,\n scale: 1,\n tabSize: 1,\n widows: 1,\n zIndex: 1,\n zoom: 1,\n WebkitLineClamp: 1,\n // SVG-related properties\n fillOpacity: 1,\n floodOpacity: 1,\n stopOpacity: 1,\n strokeDasharray: 1,\n strokeDashoffset: 1,\n strokeMiterlimit: 1,\n strokeOpacity: 1,\n strokeWidth: 1\n};\n\nexport { unitlessKeys as default };\n","function memoize(fn) {\n var cache = Object.create(null);\n return function (arg) {\n if (cache[arg] === undefined) cache[arg] = fn(arg);\n return cache[arg];\n };\n}\n\nexport { memoize as default };\n","import hashString from '@emotion/hash';\nimport unitless from '@emotion/unitless';\nimport memoize from '@emotion/memoize';\n\nvar isDevelopment = false;\n\nvar hyphenateRegex = /[A-Z]|^ms/g;\nvar animationRegex = /_EMO_([^_]+?)_([^]*?)_EMO_/g;\n\nvar isCustomProperty = function isCustomProperty(property) {\n return property.charCodeAt(1) === 45;\n};\n\nvar isProcessableValue = function isProcessableValue(value) {\n return value != null && typeof value !== 'boolean';\n};\n\nvar processStyleName = /* #__PURE__ */memoize(function (styleName) {\n return isCustomProperty(styleName) ? styleName : styleName.replace(hyphenateRegex, '-$&').toLowerCase();\n});\n\nvar processStyleValue = function processStyleValue(key, value) {\n switch (key) {\n case 'animation':\n case 'animationName':\n {\n if (typeof value === 'string') {\n return value.replace(animationRegex, function (match, p1, p2) {\n cursor = {\n name: p1,\n styles: p2,\n next: cursor\n };\n return p1;\n });\n }\n }\n }\n\n if (unitless[key] !== 1 && !isCustomProperty(key) && typeof value === 'number' && value !== 0) {\n return value + 'px';\n }\n\n return value;\n};\n\nvar noComponentSelectorMessage = 'Component selectors can only be used in conjunction with ' + '@emotion/babel-plugin, the swc Emotion plugin, or another Emotion-aware ' + 'compiler transform.';\n\nfunction handleInterpolation(mergedProps, registered, interpolation) {\n if (interpolation == null) {\n return '';\n }\n\n var componentSelector = interpolation;\n\n if (componentSelector.__emotion_styles !== undefined) {\n\n return componentSelector;\n }\n\n switch (typeof interpolation) {\n case 'boolean':\n {\n return '';\n }\n\n case 'object':\n {\n var keyframes = interpolation;\n\n if (keyframes.anim === 1) {\n cursor = {\n name: keyframes.name,\n styles: keyframes.styles,\n next: cursor\n };\n return keyframes.name;\n }\n\n var serializedStyles = interpolation;\n\n if (serializedStyles.styles !== undefined) {\n var next = serializedStyles.next;\n\n if (next !== undefined) {\n // not the most efficient thing ever but this is a pretty rare case\n // and there will be very few iterations of this generally\n while (next !== undefined) {\n cursor = {\n name: next.name,\n styles: next.styles,\n next: cursor\n };\n next = next.next;\n }\n }\n\n var styles = serializedStyles.styles + \";\";\n return styles;\n }\n\n return createStringFromObject(mergedProps, registered, interpolation);\n }\n\n case 'function':\n {\n if (mergedProps !== undefined) {\n var previousCursor = cursor;\n var result = interpolation(mergedProps);\n cursor = previousCursor;\n return handleInterpolation(mergedProps, registered, result);\n }\n\n break;\n }\n } // finalize string values (regular strings and functions interpolated into css calls)\n\n\n var asString = interpolation;\n\n if (registered == null) {\n return asString;\n }\n\n var cached = registered[asString];\n return cached !== undefined ? cached : asString;\n}\n\nfunction createStringFromObject(mergedProps, registered, obj) {\n var string = '';\n\n if (Array.isArray(obj)) {\n for (var i = 0; i < obj.length; i++) {\n string += handleInterpolation(mergedProps, registered, obj[i]) + \";\";\n }\n } else {\n for (var key in obj) {\n var value = obj[key];\n\n if (typeof value !== 'object') {\n var asString = value;\n\n if (registered != null && registered[asString] !== undefined) {\n string += key + \"{\" + registered[asString] + \"}\";\n } else if (isProcessableValue(asString)) {\n string += processStyleName(key) + \":\" + processStyleValue(key, asString) + \";\";\n }\n } else {\n if (key === 'NO_COMPONENT_SELECTOR' && isDevelopment) {\n throw new Error(noComponentSelectorMessage);\n }\n\n if (Array.isArray(value) && typeof value[0] === 'string' && (registered == null || registered[value[0]] === undefined)) {\n for (var _i = 0; _i < value.length; _i++) {\n if (isProcessableValue(value[_i])) {\n string += processStyleName(key) + \":\" + processStyleValue(key, value[_i]) + \";\";\n }\n }\n } else {\n var interpolated = handleInterpolation(mergedProps, registered, value);\n\n switch (key) {\n case 'animation':\n case 'animationName':\n {\n string += processStyleName(key) + \":\" + interpolated + \";\";\n break;\n }\n\n default:\n {\n\n string += key + \"{\" + interpolated + \"}\";\n }\n }\n }\n }\n }\n }\n\n return string;\n}\n\nvar labelPattern = /label:\\s*([^\\s;{]+)\\s*(;|$)/g; // this is the cursor for keyframes\n// keyframes are stored on the SerializedStyles object as a linked list\n\nvar cursor;\nfunction serializeStyles(args, registered, mergedProps) {\n if (args.length === 1 && typeof args[0] === 'object' && args[0] !== null && args[0].styles !== undefined) {\n return args[0];\n }\n\n var stringMode = true;\n var styles = '';\n cursor = undefined;\n var strings = args[0];\n\n if (strings == null || strings.raw === undefined) {\n stringMode = false;\n styles += handleInterpolation(mergedProps, registered, strings);\n } else {\n var asTemplateStringsArr = strings;\n\n styles += asTemplateStringsArr[0];\n } // we start at 1 since we've already handled the first arg\n\n\n for (var i = 1; i < args.length; i++) {\n styles += handleInterpolation(mergedProps, registered, args[i]);\n\n if (stringMode) {\n var templateStringsArr = strings;\n\n styles += templateStringsArr[i];\n }\n } // using a global regex with .exec is stateful so lastIndex has to be reset each time\n\n\n labelPattern.lastIndex = 0;\n var identifierName = '';\n var match; // https://esbench.com/bench/5b809c2cf2949800a0f61fb5\n\n while ((match = labelPattern.exec(styles)) !== null) {\n identifierName += '-' + match[1];\n }\n\n var name = hashString(styles) + identifierName;\n\n return {\n name: name,\n styles: styles,\n next: cursor\n };\n}\n\nexport { serializeStyles };\n","/* eslint-disable */\n// Inspired by https://github.com/garycourt/murmurhash-js\n// Ported from https://github.com/aappleby/smhasher/blob/61a0530f28277f2e850bfc39600ce61d02b518de/src/MurmurHash2.cpp#L37-L86\nfunction murmur2(str) {\n // 'm' and 'r' are mixing constants generated offline.\n // They're not really 'magic', they just happen to work well.\n // const m = 0x5bd1e995;\n // const r = 24;\n // Initialize the hash\n var h = 0; // Mix 4 bytes at a time into the hash\n\n var k,\n i = 0,\n len = str.length;\n\n for (; len >= 4; ++i, len -= 4) {\n k = str.charCodeAt(i) & 0xff | (str.charCodeAt(++i) & 0xff) << 8 | (str.charCodeAt(++i) & 0xff) << 16 | (str.charCodeAt(++i) & 0xff) << 24;\n k =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16);\n k ^=\n /* k >>> r: */\n k >>> 24;\n h =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16) ^\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Handle the last few bytes of the input array\n\n\n switch (len) {\n case 3:\n h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n\n case 2:\n h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n\n case 1:\n h ^= str.charCodeAt(i) & 0xff;\n h =\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Do a few final mixes of the hash to ensure the last few\n // bytes are well-incorporated.\n\n\n h ^= h >>> 13;\n h =\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n return ((h ^ h >>> 15) >>> 0).toString(36);\n}\n\nexport { murmur2 as default };\n","var isBrowser = true;\n\nfunction getRegisteredStyles(registered, registeredStyles, classNames) {\n var rawClassName = '';\n classNames.split(' ').forEach(function (className) {\n if (registered[className] !== undefined) {\n registeredStyles.push(registered[className] + \";\");\n } else if (className) {\n rawClassName += className + \" \";\n }\n });\n return rawClassName;\n}\nvar registerStyles = function registerStyles(cache, serialized, isStringTag) {\n var className = cache.key + \"-\" + serialized.name;\n\n if ( // we only need to add the styles to the registered cache if the\n // class name could be used further down\n // the tree but if it's a string tag, we know it won't\n // so we don't have to add it to registered cache.\n // this improves memory usage since we can avoid storing the whole style string\n (isStringTag === false || // we need to always store it if we're in compat mode and\n // in node since emotion-server relies on whether a style is in\n // the registered cache to know whether a style is global or not\n // also, note that this check will be dead code eliminated in the browser\n isBrowser === false ) && cache.registered[className] === undefined) {\n cache.registered[className] = serialized.styles;\n }\n};\nvar insertStyles = function insertStyles(cache, serialized, isStringTag) {\n registerStyles(cache, serialized, isStringTag);\n var className = cache.key + \"-\" + serialized.name;\n\n if (cache.inserted[serialized.name] === undefined) {\n var current = serialized;\n\n do {\n cache.insert(serialized === current ? \".\" + className : '', current, cache.sheet, true);\n\n current = current.next;\n } while (current !== undefined);\n }\n};\n\nexport { getRegisteredStyles, insertStyles, registerStyles };\n","import createCache from '@emotion/cache';\nimport { serializeStyles } from '@emotion/serialize';\nimport { getRegisteredStyles, insertStyles } from '@emotion/utils';\n\nfunction insertWithoutScoping(cache, serialized) {\n if (cache.inserted[serialized.name] === undefined) {\n return cache.insert('', serialized, cache.sheet, true);\n }\n}\n\nfunction merge(registered, css, className) {\n var registeredStyles = [];\n var rawClassName = getRegisteredStyles(registered, registeredStyles, className);\n\n if (registeredStyles.length < 2) {\n return className;\n }\n\n return rawClassName + css(registeredStyles);\n}\n\nvar createEmotion = function createEmotion(options) {\n var cache = createCache(options); // $FlowFixMe\n\n cache.sheet.speedy = function (value) {\n if (process.env.NODE_ENV !== 'production' && this.ctr !== 0) {\n throw new Error('speedy must be changed before any rules are inserted');\n }\n\n this.isSpeedy = value;\n };\n\n cache.compat = true;\n\n var css = function css() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var serialized = serializeStyles(args, cache.registered, undefined);\n insertStyles(cache, serialized, false);\n return cache.key + \"-\" + serialized.name;\n };\n\n var keyframes = function keyframes() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n var serialized = serializeStyles(args, cache.registered);\n var animation = \"animation-\" + serialized.name;\n insertWithoutScoping(cache, {\n name: serialized.name,\n styles: \"@keyframes \" + animation + \"{\" + serialized.styles + \"}\"\n });\n return animation;\n };\n\n var injectGlobal = function injectGlobal() {\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n var serialized = serializeStyles(args, cache.registered);\n insertWithoutScoping(cache, serialized);\n };\n\n var cx = function cx() {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n\n return merge(cache.registered, css, classnames(args));\n };\n\n return {\n css: css,\n cx: cx,\n injectGlobal: injectGlobal,\n keyframes: keyframes,\n hydrate: function hydrate(ids) {\n ids.forEach(function (key) {\n cache.inserted[key] = true;\n });\n },\n flush: function flush() {\n cache.registered = {};\n cache.inserted = {};\n cache.sheet.flush();\n },\n // $FlowFixMe\n sheet: cache.sheet,\n cache: cache,\n getRegisteredStyles: getRegisteredStyles.bind(null, cache.registered),\n merge: merge.bind(null, cache.registered, css)\n };\n};\n\nvar classnames = function classnames(args) {\n var cls = '';\n\n for (var i = 0; i < args.length; i++) {\n var arg = args[i];\n if (arg == null) continue;\n var toAdd = void 0;\n\n switch (typeof arg) {\n case 'boolean':\n break;\n\n case 'object':\n {\n if (Array.isArray(arg)) {\n toAdd = classnames(arg);\n } else {\n toAdd = '';\n\n for (var k in arg) {\n if (arg[k] && k) {\n toAdd && (toAdd += ' ');\n toAdd += k;\n }\n }\n }\n\n break;\n }\n\n default:\n {\n toAdd = arg;\n }\n }\n\n if (toAdd) {\n cls && (cls += ' ');\n cls += toAdd;\n }\n }\n\n return cls;\n};\n\nexport default createEmotion;\n","import '@emotion/cache';\nimport '@emotion/serialize';\nimport '@emotion/utils';\nimport createEmotion from '../create-instance/dist/emotion-css-create-instance.esm.js';\n\nvar _createEmotion = createEmotion({\n key: 'css'\n}),\n flush = _createEmotion.flush,\n hydrate = _createEmotion.hydrate,\n cx = _createEmotion.cx,\n merge = _createEmotion.merge,\n getRegisteredStyles = _createEmotion.getRegisteredStyles,\n injectGlobal = _createEmotion.injectGlobal,\n keyframes = _createEmotion.keyframes,\n css = _createEmotion.css,\n sheet = _createEmotion.sheet,\n cache = _createEmotion.cache;\n\nexport { cache, css, cx, flush, getRegisteredStyles, hydrate, injectGlobal, keyframes, merge, sheet };\n","import {MS, MOZ, WEBKIT, RULESET, KEYFRAMES, DECLARATION} from './Enum.js'\nimport {match, charat, substr, strlen, sizeof, replace, combine} from './Utility.js'\nimport {copy, tokenize} from './Tokenizer.js'\nimport {serialize} from './Serializer.js'\nimport {prefix} from './Prefixer.js'\n\n/**\n * @param {function[]} collection\n * @return {function}\n */\nexport function middleware (collection) {\n\tvar length = sizeof(collection)\n\n\treturn function (element, index, children, callback) {\n\t\tvar output = ''\n\n\t\tfor (var i = 0; i < length; i++)\n\t\t\toutput += collection[i](element, index, children, callback) || ''\n\n\t\treturn output\n\t}\n}\n\n/**\n * @param {function} callback\n * @return {function}\n */\nexport function rulesheet (callback) {\n\treturn function (element) {\n\t\tif (!element.root)\n\t\t\tif (element = element.return)\n\t\t\t\tcallback(element)\n\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n */\nexport function prefixer (element, index, children, callback) {\n\tif (element.length > -1)\n\t\tif (!element.return)\n\t\t\tswitch (element.type) {\n\t\t\t\tcase DECLARATION: element.return = prefix(element.value, element.length, children)\n\t\t\t\t\treturn\n\t\t\t\tcase KEYFRAMES:\n\t\t\t\t\treturn serialize([copy(element, {value: replace(element.value, '@', '@' + WEBKIT)})], callback)\n\t\t\t\tcase RULESET:\n\t\t\t\t\tif (element.length)\n\t\t\t\t\t\treturn combine(element.props, function (value) {\n\t\t\t\t\t\t\tswitch (match(value, /(::plac\\w+|:read-\\w+)/)) {\n\t\t\t\t\t\t\t\t// :read-(only|write)\n\t\t\t\t\t\t\t\tcase ':read-only': case ':read-write':\n\t\t\t\t\t\t\t\t\treturn serialize([copy(element, {props: [replace(value, /:(read-\\w+)/, ':' + MOZ + '$1')]})], callback)\n\t\t\t\t\t\t\t\t// :placeholder\n\t\t\t\t\t\t\t\tcase '::placeholder':\n\t\t\t\t\t\t\t\t\treturn serialize([\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, ':' + WEBKIT + 'input-$1')]}),\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, ':' + MOZ + '$1')]}),\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, MS + 'input-$1')]})\n\t\t\t\t\t\t\t\t\t], callback)\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn ''\n\t\t\t\t\t\t})\n\t\t\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n */\nexport function namespace (element) {\n\tswitch (element.type) {\n\t\tcase RULESET:\n\t\t\telement.props = element.props.map(function (value) {\n\t\t\t\treturn combine(tokenize(value), function (value, index, children) {\n\t\t\t\t\tswitch (charat(value, 0)) {\n\t\t\t\t\t\t// \\f\n\t\t\t\t\t\tcase 12:\n\t\t\t\t\t\t\treturn substr(value, 1, strlen(value))\n\t\t\t\t\t\t// \\0 ( + > ~\n\t\t\t\t\t\tcase 0: case 40: case 43: case 62: case 126:\n\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t// :\n\t\t\t\t\t\tcase 58:\n\t\t\t\t\t\t\tif (children[++index] === 'global')\n\t\t\t\t\t\t\t\tchildren[index] = '', children[++index] = '\\f' + substr(children[index], index = 1, -1)\n\t\t\t\t\t\t// \\s\n\t\t\t\t\t\tcase 32:\n\t\t\t\t\t\t\treturn index === 1 ? '' : value\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tswitch (index) {\n\t\t\t\t\t\t\t\tcase 0: element = value\n\t\t\t\t\t\t\t\t\treturn sizeof(children) > 1 ? '' : value\n\t\t\t\t\t\t\t\tcase index = sizeof(children) - 1: case 2:\n\t\t\t\t\t\t\t\t\treturn index === 2 ? value + element + element : value + element\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\t}\n}\n","import React, { useEffect } from 'react';\nimport { Button, IconButton, useStyles2 } from '@grafana/ui';\nimport { css } from '@emotion/css';\nimport { ChatContextItem } from '../context/types';\nimport { useAssistant } from '../hook';\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { OpenAssistantProps } from '../sidebar';\nimport { reportInteraction } from '@grafana/runtime';\n\nexport interface OpenAssistantButtonProps {\n /** Prompt to pass to the openAssistant function. */\n prompt: string;\n /** Origin of the request that opened the assistant. This is used to track the source of the request. Should be a structured string using forward slashes, with the first part as a namespace. Examples: 'grafana-datasources/prometheus/query-builder', 'grafana-slo-app/slo-editor-overview', 'grafana/trace-view-analyzer`. */\n origin: string;\n /** Context to pass to the openAssistant function. Optional, defaults to undefined. Created with `createAssistantContextItem`. */\n context?: ChatContextItem[];\n /** Whether to automatically send the prompt. Optional, defaults to true. */\n autoSend?: boolean;\n /** Text to display on the button. Optional, defaults to 'Analyze with Assistant' */\n title?: string;\n /** Button size, defaults to sm */\n size?: 'xs' | 'sm' | 'md' | 'lg';\n /** If true, the button will be Assistant icon only with name as title. Defaults to false. */\n iconOnlyButton?: boolean;\n /** Function to call when the button is clicked. Optional, defaults to undefined. */\n onClick?: () => void;\n}\n\n/**\n * A button component that opens the Grafana Assistant with configurable prompt and context.\n */\nexport function OpenAssistantButton(props: OpenAssistantButtonProps) {\n // If the assistant is not available, return empty\n const { isAvailable, openAssistant } = useAssistant();\n if (!isAvailable || !openAssistant) {\n return null;\n }\n return <OpenAssistantButtonView {...props} openAssistant={openAssistant} />;\n}\n\n/**\n * Presentational component separated from OpenAssistantButton to avoid hook dependencies in Storybook.\n * It is not exported for users of the package.\n */\nexport function OpenAssistantButtonView({\n prompt,\n origin,\n context,\n autoSend = true,\n title = 'Analyze with Assistant',\n size = 'sm',\n iconOnlyButton = false,\n openAssistant,\n onClick,\n}: OpenAssistantButtonProps & {\n openAssistant: (props: OpenAssistantProps) => void;\n}) {\n const styles = useStyles2(getStyles);\n\n useEffect(() => {\n reportInteraction('grafana_assistant_app_open_sidebar_button_displayed', {\n from: origin,\n });\n }, [origin]);\n\n return (\n <>\n {iconOnlyButton ? (\n <IconButton\n name=\"ai-sparkle\"\n onClick={() => {\n onClick?.();\n openAssistant({ prompt, context, autoSend, origin });\n }}\n variant=\"secondary\"\n size={size}\n aria-label={title}\n className={styles.icon}\n tooltip={title}\n data-testid=\"assistant-icon-button\"\n />\n ) : (\n <Button\n icon=\"ai-sparkle\"\n onClick={() => {\n onClick?.();\n openAssistant({ prompt, context, autoSend, origin });\n }}\n variant=\"secondary\"\n fill=\"solid\"\n size={size}\n title={title}\n aria-label={title}\n className={styles.button}\n data-testid=\"assistant-button\"\n >\n {title}\n </Button>\n )}\n </>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n const baseBackground = theme.colors.secondary.main;\n const elevatedBackground = theme.colors.emphasize(baseBackground, 0.05);\n\n // Canvas is what's typically underneath buttons\n const underlyingColor = theme.colors.background.canvas;\n\n const borderWidth = 1;\n const outerRadius = theme.shape.radius.default;\n // inner radius = outer radius - border width, but take at least 1px\n const innerRadius = `max(calc(${outerRadius} - ${borderWidth}px), 1px)`;\n\n // Gradient border layer (::before)\n const gradientBorderLayer = {\n content: '\"\"',\n position: 'absolute' as const,\n inset: 0,\n borderRadius: outerRadius,\n background: 'linear-gradient(90deg, rgb(168, 85, 247), rgb(249, 115, 22))',\n zIndex: -2,\n pointerEvents: 'none' as const,\n };\n\n // Solid background layer factory (::after)\n // Layer transparent color over canvas to make it opaque and mask the gradient properly\n const solidBackgroundLayer = (background: string) => ({\n content: '\"\"',\n position: 'absolute' as const,\n inset: `${borderWidth}px`,\n borderRadius: innerRadius,\n background: `linear-gradient(${background}, ${background}), ${underlyingColor}`,\n zIndex: -1,\n transition: 'none',\n pointerEvents: 'none' as const,\n });\n\n return {\n button: css({\n label: 'assistant-button',\n position: 'relative',\n isolation: 'isolate',\n border: 'none',\n transition: 'none !important',\n '&::before': gradientBorderLayer,\n '&::after': {\n ...solidBackgroundLayer(baseBackground),\n transition: 'none',\n },\n '&:hover': {\n transition: 'none !important',\n },\n '&:hover::after': {\n background: `linear-gradient(${elevatedBackground}, ${elevatedBackground}), ${underlyingColor}`,\n },\n }),\n icon: css({\n label: 'assistant-icon',\n position: 'relative',\n isolation: 'isolate',\n border: 'none',\n background: 'none',\n padding: theme.spacing(0.5),\n '&::before': { ...gradientBorderLayer, transition: 'background 0.1s ease' },\n '&:hover::after': {\n ...solidBackgroundLayer(baseBackground),\n background: `linear-gradient(${elevatedBackground}, ${elevatedBackground}), ${underlyingColor}`,\n },\n }),\n };\n};\n","export interface InlineAssistantPromptOptions {\n prompt: string;\n systemPrompt?: string;\n onStart?: () => void;\n onDelta?: (delta: string) => void;\n onComplete?: (text: string) => void;\n onError?: (error: Error) => void;\n}\n\nexport interface InlineAssistant {\n sendPrompt(options: InlineAssistantPromptOptions): Promise<void>;\n cancel(): void;\n dispose(): void;\n}\n\nexport type InlineAssistantFactory = (origin: string) => Promise<InlineAssistant>;\nexport type InlineAssistantInitializer = () => Promise<void>;\n\nlet factory: InlineAssistantFactory | null = null;\nlet initializer: InlineAssistantInitializer | null = null;\nlet initializationPromise: Promise<void> | null = null;\n\nexport function setInlineAssistantFactory(fn: InlineAssistantFactory): void {\n factory = fn;\n}\n\n/**\n * Register a lazy initializer that will be called on first use.\n * The plugin code should register this to enable lazy loading of the inline assistant.\n */\nexport function setInlineAssistantInitializer(fn: InlineAssistantInitializer): void {\n initializer = fn;\n}\n\n/**\n * Ensure the inline assistant is initialized. If an initializer is registered,\n * it will be called on first use. Otherwise, checks if factory is already registered.\n */\nexport async function ensureInlineAssistantInitialized(): Promise<void> {\n // If factory is already set, we're good\n if (factory) {\n return;\n }\n\n // If no initializer is registered, throw error\n if (!initializer) {\n throw new Error(\n 'InlineAssistant not initialized. Make sure the Grafana Assistant plugin is loaded and initialized.'\n );\n }\n\n // If initialization is in progress, wait for it\n if (initializationPromise) {\n return initializationPromise;\n }\n\n // Start initialization\n initializationPromise = (async () => {\n try {\n await initializer();\n } catch (err) {\n // Reset on error so retry is possible\n initializationPromise = null;\n throw err;\n }\n })();\n\n return initializationPromise;\n}\n\nexport function getInlineAssistantFactory(): InlineAssistantFactory {\n if (!factory) {\n throw new Error('InlineAssistant factory not initialized. Make sure the Grafana Assistant plugin is loaded.');\n }\n return factory;\n}\n","import { useState, useCallback, useRef, useEffect } from 'react';\nimport { InlineAssistantOptions, InlineAssistantResult } from './types';\nimport { getInlineAssistantFactory, InlineAssistant, ensureInlineAssistantInitialized } from './inlineAssistant';\n\n/**\n * React hook for inline assistant generation with streaming support.\n *\n * This hook enables generating content (like panel titles or descriptions) inline\n * without opening the assistant sidebar. Each hook instance creates its own chat\n * conversation, so all generations from the same instance are grouped together.\n * Generated content is ephemeral - it won't appear in the user's chat history\n * but will be tracked in the admin UI for analytics.\n *\n * Uses the full BaseMultiStepAgent infrastructure for tool execution and multi-step workflows.\n *\n * The implementation is lazy-loaded on first use to reduce initial bundle size.\n *\n * @example\n * ```typescript\n * function PanelEditor() {\n * const { generate, isGenerating, content, error, reset } = useInlineAssistant();\n * const [title, setTitle] = useState('');\n *\n * const handleGenerate = () => {\n * generate({\n * prompt: 'Generate a panel title for CPU metrics',\n * origin: 'grafana/panel-editor/title',\n * systemPrompt: 'Generate only the title text, no explanation',\n * onComplete: (text) => setTitle(text.trim()),\n * onError: (err) => console.error(err)\n * });\n * };\n *\n * return (\n * <div>\n * <input value={title} onChange={(e) => setTitle(e.target.value)} />\n * <button onClick={handleGenerate} disabled={isGenerating}>\n * {isGenerating ? 'Generating...' : 'Generate with Assistant'}\n * </button>\n * {isGenerating && <div>{content}</div>}\n * </div>\n * );\n * }\n * ```\n */\nexport function useInlineAssistant(): InlineAssistantResult {\n const [isGenerating, setIsGenerating] = useState(false);\n const [content, setContent] = useState('');\n const [error, setError] = useState<Error | null>(null);\n const assistantRef = useRef<InlineAssistant | null>(null);\n\n /**\n * Reset error and content state\n */\n const reset = useCallback(() => {\n setError(null);\n setContent('');\n }, []);\n\n /**\n * Cancel the current generation\n */\n const cancel = useCallback(() => {\n if (assistantRef.current) {\n assistantRef.current.cancel();\n }\n setIsGenerating(false);\n }, []);\n\n /**\n * Generate content with the given options\n */\n const generate = useCallback(async (options: InlineAssistantOptions): Promise<void> => {\n // Reset state\n setError(null);\n setContent('');\n setIsGenerating(true);\n\n try {\n // Ensure the inline assistant is initialized (lazy-loads on first use)\n await ensureInlineAssistantInitialized();\n\n const factory = getInlineAssistantFactory();\n\n // Create or reuse assistant for this origin\n if (!assistantRef.current) {\n assistantRef.current = await factory(options.origin);\n }\n\n await assistantRef.current.sendPrompt({\n prompt: options.prompt,\n systemPrompt: options.systemPrompt,\n onStart: () => {\n setIsGenerating(true);\n },\n onDelta: (delta) => {\n setContent((prev) => prev + delta);\n },\n onComplete: (text) => {\n setContent(text);\n setIsGenerating(false);\n options.onComplete?.(text);\n },\n onError: (err) => {\n setError(err);\n setIsGenerating(false);\n options.onError?.(err);\n },\n });\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n setError(error);\n setIsGenerating(false);\n options.onError?.(error);\n }\n }, []);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n if (assistantRef.current) {\n assistantRef.current.cancel();\n assistantRef.current.dispose();\n assistantRef.current = null;\n }\n };\n }, []);\n\n return {\n generate,\n isGenerating,\n content,\n error,\n cancel,\n reset,\n };\n}\n"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","hash","input","i","length","charCodeAt","toString","NodeData","constructor","params","text","this","id","type","formatForLLM","codeElementIds","data","name","equals","other","StructuredNodeData","super","JSON","stringify","require","pageContextRegistry","REGISTRY_SYNC_EVENT","REGISTRY_UPDATE_EVENT","REGISTRY_REMOVE_EVENT","LOCATION_CHANGE_EVENT","syncListenerAdded","providePageContext","urlPattern","initialContext","registration","generateRegistrationId","context","push","window","dispatchEvent","CustomEvent","detail","registry","setContext","newContext","index","findIndex","reg","unregister","splice","useProvidePageContext","setContextRef","useRef","undefined","latestContextRef","current","useEffect","useCallback","usePageContext","options","allowQuestions","allowComponents","pageContext","setPageContext","useState","location","useLocationService","currentPathnameRef","updateContext","currentUrl","registrations","activeContext","matchesUrlPattern","getActivePageContext","getLocation","pathname","handleRegistryChange","handleLocationChange","event","locationSub","getLocationObservable","subscribe","loc","notifyLocationChange","addEventListener","unsubscribe","removeEventListener","filteredContext","filter","item","node","prefix","Date","now","Math","random","slice","url","pattern","RegExp","test","regexPattern","replace","incomingRegistry","existingIds","Set","map","r","newRegistrations","has","update","ComponentNodeData","namespace","keys","components","join","prompt","usePageComponents","useMemo","allComponents","forEach","componentData","entries","componentName","component","provideComponents","createAssistantContextItem","DashboardNodeData","dashboardUid","dashboardTitle","folderUid","folderTitle","FolderNodeData","DatasourceNodeData","datasourceUid","datasourceType","datasourceName","img","uid","EntityNodeData","scope","env","site","Boolean","title","hidden","icon","entityType","properties","LabelNameNodeData","labelName","LabelValueNodeData","labelValue","getDatasourceMeta","datasourceInstance","getDataSourceSrv","getInstanceSettings","meta","info","logos","small","defaultIcons","datasource","label_name","label_value","dashboard","dashboard_folder","unknown","structured","entity","nodeData","console","error","createContextByType","defaultTitle","getTitleFromContextNode","getImgFromContextNode","navigable","selectable","occurrences","provideQuestions","initialQuestions","registrationId","convertQuestionsToContext","questions","question","setQuestions","newQuestions","useProvideQuestions","useQuestions","convertContextToQuestions","contextItems","CALLBACK_EXTENSION_POINT","newFunctionNamespace","functions","getExposeAssistantFunctionsConfig","namespaces","targets","fn","ASSISTANT_PLUGIN_ID","ASSISTANT_PLUGIN_TITLE","isAssistantAvailable","getObservablePluginLinks","of","extensionPointId","pipe","links","some","link","pluginId","OpenExtensionSidebarEvent","BusEventWithPayload","CloseExtensionSidebarEvent","BusEventBase","ToggleExtensionSidebarEvent","openAssistant","props","reportInteraction","from","origin","componentTitle","getAppEvents","publish","openExtensionSidebar","initialPrompt","initialAutoSend","autoSend","initialMode","mode","closeAssistant","closeExtensionSidebar","toggleAssistant","toggleExtensionSidebar","useAssistant","isAvailable","setIsAvailable","sub","available","StyleSheet","_this","_insertTag","tag","before","tags","insertionPoint","nextSibling","prepend","container","firstChild","insertBefore","isSpeedy","speedy","ctr","nonce","_proto","hydrate","nodes","insert","rule","document","createElement","setAttribute","appendChild","createTextNode","createStyleElement","sheet","styleSheets","ownerNode","sheetForTag","insertRule","cssRules","e","flush","_tag$parentNode","parentNode","removeChild","abs","String","fromCharCode","assign","trim","replacement","indexof","search","indexOf","begin","end","array","line","column","position","character","characters","root","parent","children","return","prev","next","peek","caret","token","alloc","dealloc","delimit","delimiter","whitespace","escaping","count","commenter","identifier","COMMENT","callback","output","element","compile","parse","rules","rulesets","pseudo","points","declarations","offset","atrule","property","previous","variable","scanning","ampersand","reference","comment","declaration","ruleset","post","size","j","k","x","y","z","identifierWithPointTracking","fixedElements","WeakMap","compat","isImplicitRule","set","parsed","toRules","getRules","parentRules","removeLabel","defaultStylisPlugins","exec","unitlessKeys","animationIterationCount","aspectRatio","borderImageOutset","borderImageSlice","borderImageWidth","boxFlex","boxFlexGroup","boxOrdinalGroup","columnCount","columns","flex","flexGrow","flexPositive","flexShrink","flexNegative","flexOrder","gridRow","gridRowEnd","gridRowSpan","gridRowStart","gridColumn","gridColumnEnd","gridColumnSpan","gridColumnStart","msGridRow","msGridRowSpan","msGridColumn","msGridColumnSpan","fontWeight","lineHeight","opacity","order","orphans","scale","tabSize","widows","zIndex","zoom","WebkitLineClamp","fillOpacity","floodOpacity","stopOpacity","strokeDasharray","strokeDashoffset","strokeMiterlimit","strokeOpacity","strokeWidth","memoize","cache","create","arg","hyphenateRegex","animationRegex","isCustomProperty","isProcessableValue","processStyleName","styleName","toLowerCase","processStyleValue","match","p1","p2","cursor","styles","handleInterpolation","mergedProps","registered","interpolation","componentSelector","__emotion_styles","keyframes","anim","serializedStyles","string","Array","isArray","asString","interpolated","_i","createStringFromObject","previousCursor","result","cached","labelPattern","serializeStyles","args","stringMode","strings","raw","lastIndex","identifierName","str","h","len","getRegisteredStyles","registeredStyles","classNames","rawClassName","split","className","insertWithoutScoping","serialized","inserted","merge","css","classnames","cls","toAdd","_createEmotion","ssrStyles","querySelectorAll","getAttribute","head","_insert","stylisPlugins","nodesToHydrate","attrib","currentSheet","collection","finalizingPlugins","serializer","concat","selector","shouldCache","createCache","_len","arguments","_key","registerStyles","insertStyles","cx","_len4","_key4","injectGlobal","_len3","_key3","_len2","_key2","animation","ids","bind","OpenAssistantButton","OpenAssistantButtonView","iconOnlyButton","onClick","useStyles2","getStyles","IconButton","variant","tooltip","Button","fill","button","theme","baseBackground","colors","secondary","main","elevatedBackground","emphasize","underlyingColor","background","canvas","outerRadius","shape","radius","default","innerRadius","gradientBorderLayer","content","inset","borderRadius","pointerEvents","solidBackgroundLayer","transition","label","isolation","border","padding","spacing","factory","initializer","initializationPromise","setInlineAssistantFactory","setInlineAssistantInitializer","async","ensureInlineAssistantInitialized","Error","err","getInlineAssistantFactory","useInlineAssistant","isGenerating","setIsGenerating","setContent","setError","assistantRef","reset","cancel","generate","sendPrompt","systemPrompt","onStart","onDelta","delta","onComplete","onError","dispose"],"sourceRoot":""}
@@ -0,0 +1,4 @@
1
+ export { useInlineAssistant } from './useInlineAssistant';
2
+ export type { InlineAssistantOptions, InlineAssistantResult, InlineAssistantState, StreamEvent, MessageStreamStartEvent, MessageContentDeltaEvent, MessageStreamCompleteEvent, } from './types';
3
+ export { setInlineAssistantFactory, setInlineAssistantInitializer, getInlineAssistantFactory, ensureInlineAssistantInitialized, type InlineAssistant, type InlineAssistantFactory, type InlineAssistantInitializer, type InlineAssistantPromptOptions, } from './inlineAssistant';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/inline/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,YAAY,EACV,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,EACpB,WAAW,EACX,uBAAuB,EACvB,wBAAwB,EACxB,0BAA0B,GAC3B,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,yBAAyB,EACzB,6BAA6B,EAC7B,yBAAyB,EACzB,gCAAgC,EAChC,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,KAAK,0BAA0B,EAC/B,KAAK,4BAA4B,GAClC,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,28 @@
1
+ export interface InlineAssistantPromptOptions {
2
+ prompt: string;
3
+ systemPrompt?: string;
4
+ onStart?: () => void;
5
+ onDelta?: (delta: string) => void;
6
+ onComplete?: (text: string) => void;
7
+ onError?: (error: Error) => void;
8
+ }
9
+ export interface InlineAssistant {
10
+ sendPrompt(options: InlineAssistantPromptOptions): Promise<void>;
11
+ cancel(): void;
12
+ dispose(): void;
13
+ }
14
+ export type InlineAssistantFactory = (origin: string) => Promise<InlineAssistant>;
15
+ export type InlineAssistantInitializer = () => Promise<void>;
16
+ export declare function setInlineAssistantFactory(fn: InlineAssistantFactory): void;
17
+ /**
18
+ * Register a lazy initializer that will be called on first use.
19
+ * The plugin code should register this to enable lazy loading of the inline assistant.
20
+ */
21
+ export declare function setInlineAssistantInitializer(fn: InlineAssistantInitializer): void;
22
+ /**
23
+ * Ensure the inline assistant is initialized. If an initializer is registered,
24
+ * it will be called on first use. Otherwise, checks if factory is already registered.
25
+ */
26
+ export declare function ensureInlineAssistantInitialized(): Promise<void>;
27
+ export declare function getInlineAssistantFactory(): InlineAssistantFactory;
28
+ //# sourceMappingURL=inlineAssistant.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inlineAssistant.d.ts","sourceRoot":"","sources":["../../src/inline/inlineAssistant.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,4BAA4B;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,OAAO,EAAE,4BAA4B,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjE,MAAM,IAAI,IAAI,CAAC;IACf,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,MAAM,MAAM,sBAAsB,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;AAClF,MAAM,MAAM,0BAA0B,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;AAM7D,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,sBAAsB,GAAG,IAAI,CAE1E;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,EAAE,EAAE,0BAA0B,GAAG,IAAI,CAElF;AAED;;;GAGG;AACH,wBAAsB,gCAAgC,IAAI,OAAO,CAAC,IAAI,CAAC,CA8BtE;AAED,wBAAgB,yBAAyB,IAAI,sBAAsB,CAKlE"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Options for inline assistant generation
3
+ */
4
+ export interface InlineAssistantOptions {
5
+ /** The prompt to send to the assistant */
6
+ prompt: string;
7
+ /** Origin of the request for analytics tracking (e.g., 'grafana/panel-editor/title', 'grafana-slo-app/slo-form/description') */
8
+ origin: string;
9
+ /** Optional system prompt to guide the assistant's behavior */
10
+ systemPrompt?: string;
11
+ /** Callback invoked when generation completes successfully */
12
+ onComplete?: (text: string) => void;
13
+ /** Callback invoked if an error occurs during generation */
14
+ onError?: (error: Error) => void;
15
+ }
16
+ /**
17
+ * State for the inline assistant hook
18
+ */
19
+ export interface InlineAssistantState {
20
+ /** Whether generation is currently in progress */
21
+ isGenerating: boolean;
22
+ /** Accumulated content from streaming */
23
+ content: string;
24
+ /** Error that occurred during generation, if any */
25
+ error: Error | null;
26
+ }
27
+ /**
28
+ * Return type of the useInlineAssistant hook
29
+ */
30
+ export interface InlineAssistantResult {
31
+ /** Start generating content with the given options */
32
+ generate: (options: InlineAssistantOptions) => Promise<void>;
33
+ /** Whether generation is currently in progress */
34
+ isGenerating: boolean;
35
+ /** Accumulated streaming content (updates in real-time) */
36
+ content: string;
37
+ /** Error that occurred during generation, if any */
38
+ error: Error | null;
39
+ /** Cancel the current generation */
40
+ cancel: () => void;
41
+ /** Clear error and content state */
42
+ reset: () => void;
43
+ }
44
+ /**
45
+ * Streaming event types from the backend
46
+ */
47
+ export interface MessageStreamStartEvent {
48
+ type: 'message.stream.start';
49
+ payload: {
50
+ messageId: string;
51
+ chatId: string;
52
+ role: string;
53
+ };
54
+ }
55
+ export interface MessageContentDeltaEvent {
56
+ type: 'message.content.delta';
57
+ payload: {
58
+ messageId: string;
59
+ chatId: string;
60
+ contentIndex: number;
61
+ contentType: string;
62
+ delta?: string;
63
+ toolUse?: unknown;
64
+ };
65
+ }
66
+ export interface MessageStreamCompleteEvent {
67
+ type: 'message.stream.complete';
68
+ payload: {
69
+ messageId: string;
70
+ chatId: string;
71
+ stopReason: string;
72
+ usage: {
73
+ inputTokens: number;
74
+ outputTokens: number;
75
+ };
76
+ };
77
+ }
78
+ export type StreamEvent = MessageStreamStartEvent | MessageContentDeltaEvent | MessageStreamCompleteEvent;
79
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/inline/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,0CAA0C;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,gIAAgI;IAChI,MAAM,EAAE,MAAM,CAAC;IACf,+DAA+D;IAC/D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8DAA8D;IAC9D,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,4DAA4D;IAC5D,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,kDAAkD;IAClD,YAAY,EAAE,OAAO,CAAC;IACtB,yCAAyC;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,oDAAoD;IACpD,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,sDAAsD;IACtD,QAAQ,EAAE,CAAC,OAAO,EAAE,sBAAsB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,kDAAkD;IAClD,YAAY,EAAE,OAAO,CAAC;IACtB,2DAA2D;IAC3D,OAAO,EAAE,MAAM,CAAC;IAChB,oDAAoD;IACpD,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,oCAAoC;IACpC,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,oCAAoC;IACpC,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,sBAAsB,CAAC;IAC7B,OAAO,EAAE;QACP,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,uBAAuB,CAAC;IAC9B,OAAO,EAAE;QACP,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC;CACH;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,yBAAyB,CAAC;IAChC,OAAO,EAAE;QACP,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE;YACL,WAAW,EAAE,MAAM,CAAC;YACpB,YAAY,EAAE,MAAM,CAAC;SACtB,CAAC;KACH,CAAC;CACH;AAED,MAAM,MAAM,WAAW,GAAG,uBAAuB,GAAG,wBAAwB,GAAG,0BAA0B,CAAC"}
@@ -0,0 +1,44 @@
1
+ import { InlineAssistantResult } from './types';
2
+ /**
3
+ * React hook for inline assistant generation with streaming support.
4
+ *
5
+ * This hook enables generating content (like panel titles or descriptions) inline
6
+ * without opening the assistant sidebar. Each hook instance creates its own chat
7
+ * conversation, so all generations from the same instance are grouped together.
8
+ * Generated content is ephemeral - it won't appear in the user's chat history
9
+ * but will be tracked in the admin UI for analytics.
10
+ *
11
+ * Uses the full BaseMultiStepAgent infrastructure for tool execution and multi-step workflows.
12
+ *
13
+ * The implementation is lazy-loaded on first use to reduce initial bundle size.
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * function PanelEditor() {
18
+ * const { generate, isGenerating, content, error, reset } = useInlineAssistant();
19
+ * const [title, setTitle] = useState('');
20
+ *
21
+ * const handleGenerate = () => {
22
+ * generate({
23
+ * prompt: 'Generate a panel title for CPU metrics',
24
+ * origin: 'grafana/panel-editor/title',
25
+ * systemPrompt: 'Generate only the title text, no explanation',
26
+ * onComplete: (text) => setTitle(text.trim()),
27
+ * onError: (err) => console.error(err)
28
+ * });
29
+ * };
30
+ *
31
+ * return (
32
+ * <div>
33
+ * <input value={title} onChange={(e) => setTitle(e.target.value)} />
34
+ * <button onClick={handleGenerate} disabled={isGenerating}>
35
+ * {isGenerating ? 'Generating...' : 'Generate with Assistant'}
36
+ * </button>
37
+ * {isGenerating && <div>{content}</div>}
38
+ * </div>
39
+ * );
40
+ * }
41
+ * ```
42
+ */
43
+ export declare function useInlineAssistant(): InlineAssistantResult;
44
+ //# sourceMappingURL=useInlineAssistant.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useInlineAssistant.d.ts","sourceRoot":"","sources":["../../src/inline/useInlineAssistant.ts"],"names":[],"mappings":"AACA,OAAO,EAA0B,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAGxE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,wBAAgB,kBAAkB,IAAI,qBAAqB,CA2F1D"}
package/dist/plugin.d.ts CHANGED
@@ -6,3 +6,4 @@ export declare const ASSISTANT_PLUGIN_TITLE = "Grafana Assistant";
6
6
  * @returns An observable that emits true if the assistant is available, false otherwise.
7
7
  */
8
8
  export declare function isAssistantAvailable(): Observable<boolean>;
9
+ //# sourceMappingURL=plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AACA,OAAO,EAAO,UAAU,EAAM,MAAM,MAAM,CAAC;AAE3C,eAAO,MAAM,mBAAmB,0BAA0B,CAAC;AAC3D,eAAO,MAAM,sBAAsB,sBAAsB,CAAC;AAE1D;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,UAAU,CAAC,OAAO,CAAC,CAe1D"}
package/dist/sidebar.d.ts CHANGED
@@ -4,6 +4,7 @@ export type OpenAssistantProps = {
4
4
  prompt?: string;
5
5
  context?: ChatContextItem[];
6
6
  autoSend?: boolean;
7
+ mode?: 'assistant' | 'investigation';
7
8
  };
8
9
  /**
9
10
  * Open the Grafana Assistant sidebar with a given initial prompt.
@@ -13,6 +14,7 @@ export type OpenAssistantProps = {
13
14
  * @param props.prompt - The initial prompt to display in the assistant.
14
15
  * @param props.context - The initial context to display in the assistant. Created with `createContext`.
15
16
  * @param props.autoSend - Whether to automatically send the initial prompt. When true, opens a chat and sends the initial prompt right away. When false, opens chat and updates user message without sending it. Defaults to true.
17
+ * @param props.mode - The mode to open the assistant in. Either 'assistant' or 'investigation'. Defaults to 'assistant'.
16
18
  */
17
19
  export declare function openAssistant(props: OpenAssistantProps): void;
18
20
  /**
@@ -20,3 +22,4 @@ export declare function openAssistant(props: OpenAssistantProps): void;
20
22
  */
21
23
  export declare function closeAssistant(): void;
22
24
  export declare function toggleAssistant(props: OpenAssistantProps): void;
25
+ //# sourceMappingURL=sidebar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidebar.d.ts","sourceRoot":"","sources":["../src/sidebar.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AA4ClD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,EAAE,MAAM,CAAC;IAEf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,WAAW,GAAG,eAAe,CAAC;CACtC,CAAC;AAEF;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,QAatD;AAED;;GAEG;AACH,wBAAgB,cAAc,SAE7B;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,kBAAkB,QAaxD"}
@@ -3,3 +3,4 @@
3
3
  * Uses the djb2 algorithm for simplicity and good distribution.
4
4
  */
5
5
  export declare function hash(input: string): string;
6
+ //# sourceMappingURL=hash.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../src/utils/hash.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAS1C"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@grafana/assistant",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "Type definitions and helper functions for Grafana Assistant",
5
5
  "repository": {
6
6
  "type": "git",
@@ -10,7 +10,9 @@
10
10
  "main": "dist/index.js",
11
11
  "types": "dist/index.d.ts",
12
12
  "files": [
13
- "dist"
13
+ "dist",
14
+ "!dist/**/*.test.*",
15
+ "!dist/**/*.spec.*"
14
16
  ],
15
17
  "scripts": {
16
18
  "prebuild": "rm -rf dist",