@malloydata/malloy-explorer 0.0.266-dev250425232629 → 0.0.269-dev250430213122

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 (39) hide show
  1. package/@flowtypes/components/ResizableCollapsiblePanel.flow.js +14 -0
  2. package/@flowtypes/components/ResultPanel/SubmittedQuery.flow.js +1 -0
  3. package/@flowtypes/index.flow.js +1 -1
  4. package/dist/cjs/index.cjs +732 -524
  5. package/dist/cjs/index.cjs.map +1 -1
  6. package/dist/esm/index.js +733 -525
  7. package/dist/esm/index.js.map +1 -1
  8. package/dist/malloy-explorer.css +13 -5
  9. package/dist/types/components/CollapsedPagePanel.d.ts +8 -0
  10. package/dist/types/components/QueryPanel/AddMenu/AddAggregate.d.ts +2 -1
  11. package/dist/types/components/QueryPanel/AddMenu/AddFieldItem.d.ts +2 -1
  12. package/dist/types/components/QueryPanel/AddMenu/AddGroupBy.d.ts +2 -1
  13. package/dist/types/components/QueryPanel/AddMenu/AddItem.d.ts +2 -1
  14. package/dist/types/components/QueryPanel/AddMenu/AddOrderBy.d.ts +2 -1
  15. package/dist/types/components/QueryPanel/AddMenu/AddView.d.ts +2 -1
  16. package/dist/types/components/QueryPanel/AddMenu/AddWhere.d.ts +2 -1
  17. package/dist/types/components/QueryPanel/AddMenu/FieldList.d.ts +4 -2
  18. package/dist/types/components/QueryPanel/AddMenu/colors.stylex.d.ts +2 -0
  19. package/dist/types/components/QueryPanel/AddMenu/styles.d.ts +1 -0
  20. package/dist/types/components/QueryPanel/operations/NestOperation.d.ts +6 -0
  21. package/dist/types/components/ResizableCollapsiblePanel.d.ts +30 -0
  22. package/dist/types/components/ResultPanel/SubmittedQuery.d.ts +1 -0
  23. package/dist/types/components/SourcePanel/FieldGroupList.d.ts +4 -4
  24. package/dist/types/components/primitives/index.d.ts +5 -3
  25. package/dist/types/components/primitives/lists/AccordionList.d.ts +20 -0
  26. package/dist/types/components/primitives/lists/AccordionListContext.d.ts +7 -0
  27. package/dist/types/components/primitives/lists/AccordionListItem.d.ts +32 -0
  28. package/dist/types/components/primitives/utils/icon.d.ts +6 -0
  29. package/dist/types/components/styles.d.ts +1 -0
  30. package/dist/types/components/utils/fields.d.ts +1 -1
  31. package/dist/types/contexts/ResizableCollapsiblePanelContext.d.ts +16 -0
  32. package/dist/types/index.d.ts +1 -1
  33. package/package.json +6 -6
  34. package/scripts/gen_flow.ts +1 -1
  35. package/@flowtypes/contexts/ExplorerPanelsContext.flow.js +0 -6
  36. package/dist/types/contexts/ExplorerPanelsContext.d.ts +0 -11
  37. /package/dist/types/components/primitives/{CollapsibleListItem.d.ts → lists/CollapsibleListItem.d.ts} +0 -0
  38. /package/dist/types/components/primitives/{List.d.ts → lists/List.d.ts} +0 -0
  39. /package/dist/types/components/primitives/{ListItem.d.ts → lists/ListItem.d.ts} +0 -0
@@ -8,10 +8,10 @@
8
8
  @layer priority1, priority2, priority3, priority4, priority5, priority6;
9
9
 
10
10
  @layer priority1{
11
- :root, .mlyugude9{--mly1mq821i:white;--mlyz6dflh:rgba(0, 0, 0, 0.10);--mly4a29vv:#0000000D;--mlyhoywqa:#050505;--mly1qcfjts:#A4B0BC;}
12
11
  :root, .mly16bcggl{--mly1rtpqm4:rgba(10, 19, 23, 0.2);--mlywmj25p:rgba(121, 82, 255, 0.2);--mly1f95ebd:rgba(36, 187, 94, 0.2);--mly1jva6ta:rgba(3, 167, 215, 0.2);--mly1yr7ch6:rgba(241, 244, 247, 1);--mly1bs2mf7:rgba(0, 130, 251, 0.2);--mlywj8cgu:rgba(11, 153, 31, 0.2);--mlyhsum04:rgba(226, 164, 0, 0.2);--mly19gk0g3:rgba(227, 25, 59, 0.2);--mlyrbis2b:rgba(204, 211, 219, 1);--mly1eayp21:rgba(230, 235, 239, 1);--mly1bn1nfc:rgba(37, 54, 63, 1);}
13
12
  :root, .mly182du4u{--mly231nev:rgba(10, 19, 23, 1);--mly1i3blw4:rgba(78, 96, 111, 1);--mly16ir2n5:rgba(164, 176, 188, 1);--mly883cce:rgba(0, 100, 224, 1);--mlyy3jzoq:rgba(255, 255, 255, 1);--mly7qnfvx:rgba(10, 19, 23, 1);--mly3ib3qi:rgba(62, 6, 151, 1);--mlyndhcph:rgba(9, 68, 31, 1);--mlykotp7t:rgba(1, 73, 117, 1);--mlyf25c1a:rgba(66, 133, 244, 1);}
14
13
  :root, .mlyacbved{--mly8s4nhd:rgba(10, 19, 23, 1);--mly130oqjo:rgba(78, 96, 111, 1);--mlywh4rgx:rgba(164, 176, 188, 1);--mly1gq6bli:rgba(255, 255, 255, 1);--mly1jphivy:rgba(10, 19, 23, 1);--mly6i1qgk:rgba(121, 82, 255, 1);--mly1css67u:rgba(7, 109, 41, 1);--mly1fea1fg:rgba(2, 141, 193, 1);--mlyz9tc12:rgba(233, 175, 8, 1);--mly1dryxz7:rgba(0, 100, 224, 1);--mly176ansx:rgba(13, 134, 38, 1);--mlybq1dnb:rgba(227, 25, 59, 1);}
14
+ :root, .mlyugude9{--mlyiz2tia:#0064E0;--mly1nffz32:#0082FB32;--mly1mq821i:white;--mlyz6dflh:rgba(0, 0, 0, 0.10);--mly4a29vv:#0000000D;--mlyhoywqa:#050505;--mly1qcfjts:#A4B0BC;}
15
15
  :root, .mly18uf1kx{--mlynfhokh:none;}
16
16
  :root, .mly11fl7i8{--mlyvpnzvp:none;}
17
17
  .mly10cf5cp{--mly10mhzaa:var(--mly1f95ebd)}
@@ -71,7 +71,7 @@
71
71
  .mlysu8s4a{background:var(--mly10mhzaa)}
72
72
  .mly1np9qvj{background:var(--mly1eayp21)}
73
73
  .mly1b4wx6v{background:var(--mly1mq821i)}
74
- .mly1p5yd3t{background:var(--mly4a29vv)}
74
+ .mly16o7sp0{background:var(--mly1nffz32)}
75
75
  .mlyzkdzjc{border:1px solid #CCD3DB}
76
76
  .mly2yh2zd{border:1px solid #e0e0e0}
77
77
  .mly8fuzfi{border:1px solid #efefef}
@@ -109,6 +109,7 @@
109
109
  .mly92jh8x{padding:4px 0 8px 0}
110
110
  .mlyztvwtv{padding:4px 0}
111
111
  .mly1fut7tt{padding:4px 12px 12px 12px}
112
+ .mlytdwleo{padding:4px 12px}
112
113
  .mly9cpjcd{padding:4px 8px 4px 8px}
113
114
  .mly1q44i06{padding:4px 8px 4px}
114
115
  .mlydqdrvq{padding:4px 8px}
@@ -148,12 +149,14 @@
148
149
  .mlyur7f20{border-radius:8px}
149
150
  .mly10hpsqq{border-radius:9999px}
150
151
  .mly1pjcqnp{border-radius:inherit}
152
+ .mlyfuqftd{border-right:1px solid #C8CCD2}
151
153
  .mly1roky18{border-right:1px solid rgba(204,211,219,1)}
152
154
  .mlyng3xce{border-style:none}
153
155
  .mly1y0btm7{border-style:solid}
154
156
  .mly77krkw{border-top:1px solid var(--malloy-composer-form-border,#ececec)}
155
157
  .mlyc342km{border-width:0}
156
158
  .mlymkeg23{border-width:1px}
159
+ .mly3psx0u{flex:0 0 auto}
157
160
  .mly98rzlu{flex:1}
158
161
  .mly883omv{gap:10px}
159
162
  .mlyou54vl{gap:16px}
@@ -188,10 +191,11 @@
188
191
  .mly1esw782{animation-timing-function:linear}
189
192
  .mlylp1x4z{backface-visibility:hidden}
190
193
  .mlygmb8sa{background-color:#E6EBEF}
191
- .mly1dr8pv1{background-color:#F1F4F7}
192
194
  .mly83z2og{background-color:#fff}
193
195
  .mly1vzefiq{background-color:rgb(240,246,255)}
194
196
  .mlyy9rfsq{background-color:rgba(230,235,239,1)}
197
+ .mly10cdfl8{background-color:rgba(241,244,247,1)}
198
+ .mly1gzqxud{background-color:rgba(255,255,255,1)}
195
199
  .mly1jmk7v{background-color:rgba(37,54,63,1)}
196
200
  .mlyjbqb8w{background-color:transparent}
197
201
  .mly1jjku57{background-color:var(--malloy-composer-form-disabledBackground,#f6f6f6)}
@@ -205,8 +209,6 @@
205
209
  .mly1x3oq6j{background-color:var(--mlywj8cgu)}
206
210
  .mly12peec7{background-color:white}
207
211
  .mly1mwwwfo{border-collapse:collapse}
208
- html:not([dir='rtl']) .mlyy8678h{box-shadow:-1px 0 0 0 #C8CCD2 inset}
209
- html[dir='rtl'] .mlyy8678h{box-shadow:1px 0 0 0 #C8CCD2 inset}
210
212
  html:not([dir='rtl']) .mlyn8fsvk{box-shadow:0 0 0 1px rgb(0,100,224) inset,0 0 0 3px rgba(1,113,227,.3) inset}
211
213
  html[dir='rtl'] .mlyn8fsvk{box-shadow:0 0 0 1px rgb(0,100,224) inset, 0 0 0 3px rgba(1,113,227,.3) inset}
212
214
  html:not([dir='rtl']) .mly1kmqopl{box-shadow:0 0 5px 0 rgba(0,0,0,.1),0 0 1px 0 rgba(0,0,0,.1)}
@@ -296,6 +298,7 @@ html[dir='rtl'] .mly17fq3gk{box-shadow:0 2px 12px 0 rgba(0,0,0,.1), 0 1px 2px 0
296
298
  .mly15396mt{grid-template-columns:100px auto 100px}
297
299
  .mly52fmzj{grid-template-columns:1fr auto}
298
300
  .mly1g3yg12{grid-template-columns:auto 1fr auto}
301
+ .mlybyjr8{grid-template-columns:auto}
299
302
  .mlyl56j7k{justify-content:center}
300
303
  .mly13a6bvl{justify-content:flex-end}
301
304
  .mly1nhvcw1{justify-content:flex-start}
@@ -332,6 +335,7 @@ html[dir='rtl'] .mly17fq3gk{box-shadow:0 2px 12px 0 rgba(0,0,0,.1), 0 1px 2px 0
332
335
  .mly126k92a{white-space:pre-wrap}
333
336
  .mly1so62im{will-change:transform}
334
337
  .mly1yn0g08{word-break:break-all}
338
+ .mly35i7{writing-mode:sideways-lr}
335
339
  .mly1vjfegm{z-index:1}
336
340
  .mly11uqc5h{z-index:100}
337
341
  .mlyhtitgo{z-index:2}
@@ -382,6 +386,7 @@ html[dir='rtl'] .mly17fq3gk{box-shadow:0 2px 12px 0 rgba(0,0,0,.1), 0 1px 2px 0
382
386
  .mly1xmf6yo{margin-top:8px}
383
387
  .mly1rvw3h8{max-height:136px}
384
388
  .mly1hkcv85{max-height:200px}
389
+ .mly1xyq3li{max-height:20em}
385
390
  .mlyq3t0pi{max-height:280px}
386
391
  .mlyuyqlj2{max-height:300px}
387
392
  .mly1phlbz0{max-height:400px}
@@ -402,6 +407,7 @@ html[dir='rtl'] .mly17fq3gk{box-shadow:0 2px 12px 0 rgba(0,0,0,.1), 0 1px 2px 0
402
407
  .mlylm99nl{min-width:240px}
403
408
  .mlyfvyar9{min-width:60px}
404
409
  .mly1onzeue{min-width:95px}
410
+ .mly1odjw0f{overflow-y:auto}
405
411
  .mly18d9i69{padding-bottom:0}
406
412
  .mly1l90r2v{padding-bottom:16px}
407
413
  .mlyjkvuk6{padding-bottom:4px}
@@ -421,6 +427,7 @@ html[dir='rtl'] .mly17fq3gk{box-shadow:0 2px 12px 0 rgba(0,0,0,.1), 0 1px 2px 0
421
427
  .mlynalus7{width:0}
422
428
  .mlyh8yej3{width:100%}
423
429
  .mly6jxa94{width:14px}
430
+ .mly18kybhu{width:15em}
424
431
  .mlyjxf2f8{width:16.5px}
425
432
  .mly1kky2od{width:16px}
426
433
  .mly1xp8n7a{width:18px}
@@ -429,6 +436,7 @@ html[dir='rtl'] .mly17fq3gk{box-shadow:0 2px 12px 0 rgba(0,0,0,.1), 0 1px 2px 0
429
436
  .mlyvy4d1p{width:24px}
430
437
  .mly1f1nlb9{width:25%}
431
438
  .mlyqyf9gi{width:250px}
439
+ .mly1hfn5x7{width:260px}
432
440
  .mlygd8bvy{width:28px}
433
441
  .mlybl57os{width:323px}
434
442
  .mlyxsgkw5{width:350px}
@@ -0,0 +1,8 @@
1
+ import { IconType } from './primitives';
2
+ interface CollapsedPagePanelProps {
3
+ title?: string;
4
+ icon?: IconType;
5
+ tooltip?: string;
6
+ }
7
+ export declare function CollapsedPagePanel({ icon, title, tooltip, }: CollapsedPagePanelProps): import("react/jsx-runtime").JSX.Element;
8
+ export {};
@@ -3,5 +3,6 @@ import { ViewParent } from '../../utils/fields';
3
3
  export interface AddAggregateProps {
4
4
  rootQuery: ASTQuery;
5
5
  view: ViewParent;
6
+ search: string;
6
7
  }
7
- export declare function AddAggregate({ rootQuery, view }: AddAggregateProps): import("react/jsx-runtime").JSX.Element;
8
+ export declare function AddAggregate({ rootQuery, view, search }: AddAggregateProps): import("react/jsx-runtime").JSX.Element;
@@ -13,5 +13,6 @@ export interface AddFieldItemProps {
13
13
  filter?: (view: ViewParent, field: Malloy.FieldInfo, path: string[]) => boolean;
14
14
  disabledMessage?: string;
15
15
  isFilterOperation?: boolean;
16
+ search: string;
16
17
  }
17
- export declare function AddFieldItem({ view, fields, icon, label, onAddOperation, types, filter, disabledMessage, isFilterOperation, }: AddFieldItemProps): import("react/jsx-runtime").JSX.Element;
18
+ export declare function AddFieldItem({ view, fields, onAddOperation, types, filter, isFilterOperation, search, }: AddFieldItemProps): import("react/jsx-runtime").JSX.Element;
@@ -3,5 +3,6 @@ import { ViewParent } from '../../utils/fields';
3
3
  export interface AddGroupByProps {
4
4
  rootQuery: ASTQuery;
5
5
  view: ViewParent;
6
+ search: string;
6
7
  }
7
- export declare function AddGroupBy({ rootQuery, view }: AddGroupByProps): import("react/jsx-runtime").JSX.Element;
8
+ export declare function AddGroupBy({ rootQuery, view, search }: AddGroupByProps): import("react/jsx-runtime").JSX.Element;
@@ -5,5 +5,6 @@ export interface AddItemProps {
5
5
  detail?: ReactElement;
6
6
  onClick?: () => void;
7
7
  disable?: () => boolean;
8
+ open?: boolean;
8
9
  }
9
- export declare function AddItem({ icon, label, detail, disable, onClick }: AddItemProps): import("react/jsx-runtime").JSX.Element;
10
+ export declare function AddItem({ icon, label, detail, disable, onClick, open, }: AddItemProps): import("react/jsx-runtime").JSX.Element;
@@ -3,5 +3,6 @@ import { ViewParent } from '../../utils/fields';
3
3
  export interface AddEmptyNestProps {
4
4
  rootQuery: ASTQuery;
5
5
  view: ViewParent;
6
+ search: string;
6
7
  }
7
- export declare function AddOrderBy({ rootQuery, view }: AddEmptyNestProps): import("react/jsx-runtime").JSX.Element;
8
+ export declare function AddOrderBy({ rootQuery, view, search }: AddEmptyNestProps): import("react/jsx-runtime").JSX.Element;
@@ -3,5 +3,6 @@ import { ViewParent } from '../../utils/fields';
3
3
  export interface AddViewProps {
4
4
  rootQuery: ASTQuery;
5
5
  view: ViewParent;
6
+ search: string;
6
7
  }
7
- export declare function AddView({ rootQuery, view }: AddViewProps): import("react/jsx-runtime").JSX.Element;
8
+ export declare function AddView({ rootQuery, view, search }: AddViewProps): import("react/jsx-runtime").JSX.Element;
@@ -3,5 +3,6 @@ import { ViewParent } from '../../utils/fields';
3
3
  export interface AddWhereProps {
4
4
  rootQuery: ASTQuery;
5
5
  view: ViewParent;
6
+ search: string;
6
7
  }
7
- export declare function AddWhere({ view }: AddWhereProps): import("react/jsx-runtime").JSX.Element;
8
+ export declare function AddWhere({ view, search }: AddWhereProps): import("react/jsx-runtime").JSX.Element;
@@ -1,13 +1,15 @@
1
1
  import * as Malloy from '@malloydata/malloy-interfaces';
2
+ import { StyleXStyles } from '@stylexjs/stylex';
2
3
  import { ViewParent } from '../../utils/fields';
3
4
  import { ParsedFilter } from '@malloydata/malloy-query-builder';
4
5
  export interface FieldListProps {
5
6
  view: ViewParent;
6
7
  fields: Malloy.FieldInfo[];
7
- search: string;
8
+ search?: string;
8
9
  onAddOperation: (field: Malloy.FieldInfo, path: string[], filter?: ParsedFilter) => void;
9
10
  types: Array<'dimension' | 'measure' | 'view'>;
10
11
  filter?: (view: ViewParent, field: Malloy.FieldInfo, path: string[]) => boolean;
11
12
  isFilterOperation?: boolean;
13
+ customStyle?: StyleXStyles;
12
14
  }
13
- export declare function FieldList({ view, fields, onAddOperation, search, types, filter, isFilterOperation, }: FieldListProps): import("react/jsx-runtime").JSX.Element;
15
+ export declare function FieldList({ view, fields, onAddOperation, search, types, filter, isFilterOperation, customStyle, }: FieldListProps): import("react/jsx-runtime").JSX.Element;
@@ -1,4 +1,6 @@
1
1
  export declare const colors: import("@stylexjs/stylex").VarGroup<Readonly<{
2
+ accent: string;
3
+ accentDeemphasized: string;
2
4
  background: string;
3
5
  shadowElevation: string;
4
6
  hover: string;
@@ -6,6 +6,7 @@ export declare const addMenuStyles: Readonly<{
6
6
  readonly boxShadow: import("@stylexjs/stylex/lib/StyleXTypes").StyleXClassNameFor<"boxShadow", `0px 2px 12px 0px ${import("@stylexjs/stylex/lib/StyleXTypes").StyleXVar<string>}`>;
7
7
  readonly fontFamily: import("@stylexjs/stylex/lib/StyleXTypes").StyleXClassNameFor<"fontFamily", "sans-serif">;
8
8
  readonly margin: import("@stylexjs/stylex/lib/StyleXTypes").StyleXClassNameFor<"margin", 8>;
9
+ readonly maxHeight: import("@stylexjs/stylex/lib/StyleXTypes").StyleXClassNameFor<"maxHeight", "50vh">;
9
10
  readonly display: import("@stylexjs/stylex/lib/StyleXTypes").StyleXClassNameFor<"display", "flex">;
10
11
  readonly flexDirection: import("@stylexjs/stylex/lib/StyleXTypes").StyleXClassNameFor<"flexDirection", "column">;
11
12
  }>;
@@ -6,3 +6,9 @@ export interface NestOperationsProps {
6
6
  nests: ASTNestViewOperation[];
7
7
  }
8
8
  export declare function NestOperations({ rootQuery, view, nests }: NestOperationsProps): import("react/jsx-runtime").JSX.Element | null;
9
+ export interface NestOperationProps {
10
+ rootQuery: ASTQuery;
11
+ view: ViewParent;
12
+ nest: ASTNestViewOperation;
13
+ }
14
+ export declare function NestOperation({ rootQuery, view, nest }: NestOperationProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,30 @@
1
+ import * as React from 'react';
2
+ import { IconType } from './primitives';
3
+ interface ResizableCollapsiblePanelProps {
4
+ /**
5
+ * Whether the panel is expanded by default.
6
+ */
7
+ isInitiallyExpanded?: boolean;
8
+ /**
9
+ * The initial width of the panel.
10
+ */
11
+ initialWidth: number;
12
+ /**
13
+ * The minimum allowed width of the panel.
14
+ */
15
+ minWidth: number;
16
+ /**
17
+ * The icon to display in the collapsed panel header.
18
+ */
19
+ icon?: IconType;
20
+ /**
21
+ * The title to display in the collapsed panel header.
22
+ */
23
+ title: string;
24
+ /**
25
+ * The content to render inside the panel.
26
+ */
27
+ children: React.ReactNode | React.ReactNode[];
28
+ }
29
+ export declare function ResizableCollapsiblePanel({ isInitiallyExpanded, initialWidth, minWidth, icon, title, children, }: ResizableCollapsiblePanelProps): import("react/jsx-runtime").JSX.Element;
30
+ export {};
@@ -14,6 +14,7 @@ export type SubmittedQuery = {
14
14
  response?: QueryResponse;
15
15
  };
16
16
  export type RunInfo = {
17
+ customContent?: React.ReactNode;
17
18
  queryLink?: {
18
19
  linkText: string;
19
20
  href: string;
@@ -1,10 +1,10 @@
1
1
  import * as React from 'react';
2
- import { FieldGroupByPath } from './utils';
2
+ import { FieldItem } from './utils';
3
3
  import { SourceInfo } from '@malloydata/malloy-interfaces';
4
4
  interface FieldGroupListProps {
5
5
  source: SourceInfo;
6
- title: string;
7
- items: FieldGroupByPath[];
6
+ fieldItems: FieldItem[];
7
+ fieldGroupType: 'view' | 'measure' | 'dimension';
8
8
  }
9
- export default function FieldGroupList({ source, title, items, }: FieldGroupListProps): React.ReactNode;
9
+ export default function FieldGroupList({ source, fieldItems, fieldGroupType, }: FieldGroupListProps): React.ReactNode;
10
10
  export {};
@@ -1,8 +1,8 @@
1
1
  export { default as Badge } from './Badge';
2
2
  export { default as Divider } from './Divider';
3
3
  export { default as Icon } from './Icon';
4
- export { default as List } from './List';
5
- export { default as ListItem } from './ListItem';
4
+ export { default as List } from './lists/List';
5
+ export { default as ListItem } from './lists/ListItem';
6
6
  export { default as ScrollableArea } from './ScrollableArea';
7
7
  export { default as Button } from './Button';
8
8
  export { default as Token } from './tokens/Token';
@@ -11,12 +11,14 @@ export { default as EditableToken } from './tokens/EditableToken';
11
11
  export { default as SelectorToken } from './tokens/SelectorToken';
12
12
  export { default as Card } from './Card';
13
13
  export { default as TextInput } from './TextInput';
14
- export { default as CollapsibleListItem } from './CollapsibleListItem';
14
+ export { default as CollapsibleListItem } from './lists/CollapsibleListItem';
15
15
  export { default as CodeBlock } from './CodeBlock';
16
16
  export { default as Spinner } from './Spinner';
17
17
  export { default as NumberInput } from './NumberInput';
18
18
  export { default as DatePicker } from './DatePicker';
19
19
  export { default as ResizeBar } from './ResizeBar';
20
20
  export { default as Banner } from './Banner';
21
+ export { default as AccordionList } from './lists/AccordionList';
22
+ export { default as AccordionListItem } from './lists/AccordionListItem';
21
23
  export { DropdownMenu, DropdownMenuItem, DropdownSubMenuItem, DropdownMenuLabel, } from './DropdownMenu';
22
24
  export { type IconType } from './utils/icon';
@@ -0,0 +1,20 @@
1
+ import { StyleXStyles } from '@stylexjs/stylex';
2
+ import * as React from 'react';
3
+ import AccordionListItem, { AccordionListItemProps } from './AccordionListItem';
4
+ type AccordionListChild = React.ReactElement<AccordionListItemProps, typeof AccordionListItem>;
5
+ interface AccordionListProps {
6
+ /**
7
+ * The ID of the item that should be expanded by default.
8
+ */
9
+ defaultExpandedItemId?: string;
10
+ /**
11
+ * The accordion list items to render. Can be a single item or an array of items.
12
+ */
13
+ children: AccordionListChild | AccordionListChild[];
14
+ /**
15
+ * Custom styles to apply to the component.
16
+ */
17
+ customStyle?: StyleXStyles;
18
+ }
19
+ export default function AccordionList({ defaultExpandedItemId, children, customStyle, }: AccordionListProps): import("react/jsx-runtime").JSX.Element;
20
+ export {};
@@ -0,0 +1,7 @@
1
+ import * as React from 'react';
2
+ interface AccordionListContextValue {
3
+ expandedItemId?: string;
4
+ onExpandedItemChange?: (currentItemId: string) => void;
5
+ }
6
+ export declare const AccordionListContext: React.Context<AccordionListContextValue>;
7
+ export {};
@@ -0,0 +1,32 @@
1
+ import * as React from 'react';
2
+ export interface AccordionListItemProps {
3
+ /**
4
+ * Unique identifier for the list item.
5
+ */
6
+ id: string;
7
+ /**
8
+ * The label text to display for the list item.
9
+ */
10
+ label: string;
11
+ /**
12
+ * Optional sublabel text to display for the list item.
13
+ */
14
+ sublabel?: string;
15
+ /**
16
+ * Optional icon to display at the start of the list item.
17
+ */
18
+ startIcon?: React.ReactElement;
19
+ /**
20
+ * Optional badge to display in the list item.
21
+ */
22
+ badge?: React.ReactElement;
23
+ /**
24
+ * Optional icon to display at the end of the list item.
25
+ */
26
+ endIcon?: React.ReactElement;
27
+ /**
28
+ * The children items to render. Can be a single item or an array of items.
29
+ */
30
+ children: React.ReactNode | React.ReactNode[];
31
+ }
32
+ export default function AccordionListItem({ id, label, sublabel, startIcon, badge, endIcon, children, }: AccordionListItemProps): import("react/jsx-runtime").JSX.Element;
@@ -95,6 +95,12 @@ export declare const ICON_MAP: {
95
95
  desc?: string;
96
96
  descId?: string;
97
97
  }>;
98
+ readonly filterSliders: import("react").FunctionComponent<import("react").SVGProps<SVGSVGElement> & {
99
+ title?: string;
100
+ titleId?: string;
101
+ desc?: string;
102
+ descId?: string;
103
+ }>;
98
104
  readonly aggregate: import("react").FunctionComponent<import("react").SVGProps<SVGSVGElement> & {
99
105
  title?: string;
100
106
  titleId?: string;
@@ -13,6 +13,7 @@ export declare const styles: Readonly<{
13
13
  readonly alignItems: import("@stylexjs/stylex/lib/StyleXTypes").StyleXClassNameFor<"alignItems", "center">;
14
14
  readonly whiteSpace: import("@stylexjs/stylex/lib/StyleXTypes").StyleXClassNameFor<"whiteSpace", "nowrap">;
15
15
  readonly gap: import("@stylexjs/stylex/lib/StyleXTypes").StyleXClassNameFor<"gap", 8>;
16
+ readonly overflow: import("@stylexjs/stylex/lib/StyleXTypes").StyleXClassNameFor<"overflow", "hidden">;
16
17
  }>;
17
18
  readonly label: Readonly<{}>;
18
19
  readonly heading: Readonly<{
@@ -12,4 +12,4 @@ export declare function isIndexView(field: Malloy.FieldInfoWithView): boolean;
12
12
  export declare function getViewDefinition(parent: ViewParent): import("@malloydata/malloy-query-builder").ASTViewDefinition;
13
13
  export declare function getInputSchemaFromViewParent(parent: ViewParent): Malloy.Schema;
14
14
  export declare function isNotAnnotatedFilteredField(field: Malloy.FieldInfo): boolean;
15
- export declare function findUniqueFieldName(fields: Malloy.FieldInfo[], rename: string): string;
15
+ export declare function findUniqueFieldName(fields: Malloy.FieldInfo[], rename: string, path?: string[]): string;
@@ -0,0 +1,16 @@
1
+ import * as React from 'react';
2
+ export interface ResizableCollapsiblePanelContextValue {
3
+ /**
4
+ * Optional callback to expand the panel.
5
+ */
6
+ onExpand?: () => void;
7
+ /**
8
+ * Optional callback to collapse the panel.
9
+ */
10
+ onCollapse?: () => void;
11
+ }
12
+ /**
13
+ * ResizableCollapsiblePanelContext provides a way to share expansion and collapse
14
+ * state of panels between different components in the Malloy Explorer.
15
+ */
16
+ export declare const ResizableCollapsiblePanelContext: React.Context<ResizableCollapsiblePanelContextValue>;
@@ -5,4 +5,4 @@ export { ResultPanel } from './components/ResultPanel';
5
5
  export type { EXECUTION_STATES, Message, QueryExecutionState, QueryResponse, RunInfo, SeverityLevel, SubmittedQuery, } from './components/ResultPanel/SubmittedQuery';
6
6
  export { SourcePanel } from './components/SourcePanel';
7
7
  export { ResizeBar } from './components/primitives';
8
- export { ExplorerPanelsContext } from './contexts/ExplorerPanelsContext';
8
+ export { ResizableCollapsiblePanel } from './components/ResizableCollapsiblePanel';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@malloydata/malloy-explorer",
3
- "version": "0.0.266-dev250425232629",
3
+ "version": "0.0.269-dev250430213122",
4
4
  "description": "Malloy visual query builder",
5
5
  "main": "dist/cjs/index.cjs",
6
6
  "types": "dist/types/index.d.ts",
@@ -102,11 +102,11 @@
102
102
  "vite-plugin-svgr": "^4.3.0"
103
103
  },
104
104
  "peerDependencies": {
105
- "@malloydata/malloy-filter": "^0.0.268",
106
- "@malloydata/malloy-interfaces": "^0.0.268",
107
- "@malloydata/malloy-query-builder": "^0.0.268",
108
- "@malloydata/malloy-tag": "^0.0.268",
109
- "@malloydata/render": "^0.0.268",
105
+ "@malloydata/malloy-filter": ">= 0.0.269",
106
+ "@malloydata/malloy-interfaces": ">= 0.0.269",
107
+ "@malloydata/malloy-query-builder": ">= 0.0.269",
108
+ "@malloydata/malloy-tag": ">= 0.0.269",
109
+ "@malloydata/render": ">= 0.0.269",
110
110
  "react": ">= 19.0.0",
111
111
  "react-dom": ">= 19.0.0"
112
112
  }
@@ -13,7 +13,7 @@ const files = [
13
13
  'components/ResultPanel/ResultPanel.d.ts',
14
14
  'components/ResultPanel/SubmittedQuery.d.ts',
15
15
  'components/SourcePanel/SourcePanel.d.ts',
16
- 'contexts/ExplorerPanelsContext.d.ts',
16
+ 'components/ResizableCollapsiblePanel.d.ts',
17
17
  ];
18
18
 
19
19
  async function go() {
@@ -1,6 +0,0 @@
1
- import * as React from "react";
2
- declare export interface ExplorerPanelsContextProps {
3
- isSourcePanelOpen: boolean;
4
- setIsSourcePanelOpen?: (isOpen: boolean) => void;
5
- }
6
- declare export const ExplorerPanelsContext: React.Context<ExplorerPanelsContextProps>;
@@ -1,11 +0,0 @@
1
- import * as React from 'react';
2
- export interface ExplorerPanelsContextProps {
3
- /** Manages the state of the source panel UI. */
4
- isSourcePanelOpen: boolean;
5
- setIsSourcePanelOpen?: (isOpen: boolean) => void;
6
- }
7
- /**
8
- * QueryEditorContext contains state that is shared across the different
9
- * panels of the Malloy Explorer.
10
- */
11
- export declare const ExplorerPanelsContext: React.Context<ExplorerPanelsContextProps>;