@vuu-ui/vuu-table-extras 0.11.3 → 0.12.0

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/cjs/column-list/ColumnList.js +3 -3
  2. package/cjs/column-list/ColumnList.js.map +1 -1
  3. package/cjs/column-menu/ColumnMenu.css.js +6 -0
  4. package/cjs/column-menu/ColumnMenu.css.js.map +1 -0
  5. package/cjs/column-menu/ColumnMenu.js +83 -0
  6. package/cjs/column-menu/ColumnMenu.js.map +1 -0
  7. package/cjs/column-menu/column-menu-utils.js +479 -0
  8. package/cjs/column-menu/column-menu-utils.js.map +1 -0
  9. package/cjs/column-menu/useColumnActions.js +75 -0
  10. package/cjs/column-menu/useColumnActions.js.map +1 -0
  11. package/cjs/column-settings/ColumnSettingsPanel.js +13 -6
  12. package/cjs/column-settings/ColumnSettingsPanel.js.map +1 -1
  13. package/cjs/index.js +7 -0
  14. package/cjs/index.js.map +1 -1
  15. package/cjs/table-provider/TableProvider.js +48 -0
  16. package/cjs/table-provider/TableProvider.js.map +1 -0
  17. package/esm/column-list/ColumnList.js +3 -3
  18. package/esm/column-list/ColumnList.js.map +1 -1
  19. package/esm/column-menu/ColumnMenu.css.js +4 -0
  20. package/esm/column-menu/ColumnMenu.css.js.map +1 -0
  21. package/esm/column-menu/ColumnMenu.js +81 -0
  22. package/esm/column-menu/ColumnMenu.js.map +1 -0
  23. package/esm/column-menu/column-menu-utils.js +470 -0
  24. package/esm/column-menu/column-menu-utils.js.map +1 -0
  25. package/esm/column-menu/useColumnActions.js +73 -0
  26. package/esm/column-menu/useColumnActions.js.map +1 -0
  27. package/esm/column-settings/ColumnSettingsPanel.js +13 -6
  28. package/esm/column-settings/ColumnSettingsPanel.js.map +1 -1
  29. package/esm/index.js +3 -0
  30. package/esm/index.js.map +1 -1
  31. package/esm/table-provider/TableProvider.js +44 -0
  32. package/esm/table-provider/TableProvider.js.map +1 -0
  33. package/package.json +12 -12
  34. package/types/column-menu/ColumnMenu.d.ts +9 -0
  35. package/types/column-menu/column-action-types.d.ts +24 -0
  36. package/types/column-menu/column-menu-utils.d.ts +21 -0
  37. package/types/column-menu/useColumnActions.d.ts +18 -0
  38. package/types/index.d.ts +4 -0
  39. package/types/table-provider/TableProvider.d.ts +17 -0
@@ -1,13 +1,13 @@
1
1
  'use strict';
2
2
 
3
3
  var jsxRuntime = require('react/jsx-runtime');
4
- var vuuUiControls = require('@vuu-ui/vuu-ui-controls');
5
4
  var core = require('@salt-ds/core');
6
- var cx = require('clsx');
7
5
  var styles = require('@salt-ds/styles');
8
6
  var window = require('@salt-ds/window');
9
- var react = require('react');
7
+ var vuuUiControls = require('@vuu-ui/vuu-ui-controls');
10
8
  var vuuUtils = require('@vuu-ui/vuu-utils');
9
+ var cx = require('clsx');
10
+ var react = require('react');
11
11
  var ColumnList$1 = require('./ColumnList.css.js');
12
12
 
13
13
  const classBase = "vuuColumnList";
@@ -1 +1 @@
1
- {"version":3,"file":"ColumnList.js","sources":["../../src/column-list/ColumnList.tsx"],"sourcesContent":["import { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport {\n Icon,\n List,\n ListItem,\n ListItemProps,\n ListProps,\n} from \"@vuu-ui/vuu-ui-controls\";\nimport { Checkbox, Switch } from \"@salt-ds/core\";\nimport cx from \"clsx\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport {\n HTMLAttributes,\n MouseEventHandler,\n SyntheticEvent,\n useCallback,\n} from \"react\";\nimport { ColumnItem } from \"../table-settings\";\nimport { getColumnLabel, queryClosest } from \"@vuu-ui/vuu-utils\";\n\nimport columnList from \"./ColumnList.css\";\n\nconst classBase = \"vuuColumnList\";\nconst classBaseListItem = \"vuuColumnListItem\";\n\nexport type ColumnChangeHandler = (\n columnName: string,\n propertyName: keyof ColumnDescriptor | \"subscribed\",\n value: string | number | boolean,\n) => void;\n\nexport interface ColumnListProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n columnItems: ColumnItem[];\n onChange: ColumnChangeHandler;\n onMoveListItem: ListProps[\"onMoveListItem\"];\n onNavigateToColumn?: (columnName: string) => void;\n}\n\nconst ColumnListItem = ({\n className: classNameProp,\n item,\n ...listItemProps\n}: ListItemProps<ColumnItem>) => {\n return (\n <ListItem\n {...listItemProps}\n className={cx(classNameProp, classBaseListItem)}\n data-name={item?.name}\n >\n <Icon name=\"draggable\" size={16} />\n {item?.isCalculated ? (\n <Icon name=\"function\" />\n ) : (\n <Checkbox\n className={`${classBase}-checkBox`}\n checked={item?.subscribed}\n />\n )}\n <span className={`${classBase}-text`}>\n {getColumnLabel(item as ColumnDescriptor)}\n </span>\n <Switch\n className={`${classBase}-switch`}\n checked={item?.hidden !== true}\n disabled={item?.subscribed !== true}\n />\n </ListItem>\n );\n};\n\nexport const ColumnList = ({\n className,\n columnItems,\n onChange,\n onMoveListItem,\n onNavigateToColumn,\n ...htmlAttributes\n}: ColumnListProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-column-list\",\n css: columnList,\n window: targetWindow,\n });\n\n const handleChange = useCallback(\n ({ target }: SyntheticEvent) => {\n const input = target as HTMLInputElement;\n const listItem = queryClosest(target, `.${classBaseListItem}`);\n if (listItem) {\n const {\n dataset: { name },\n } = listItem;\n if (name) {\n const saltCheckbox = queryClosest(target, `.${classBase}-checkBox`);\n const saltSwitch = queryClosest(target, `.${classBase}-switch`);\n\n if (saltCheckbox) {\n onChange(name, \"subscribed\", input.checked);\n } else if (saltSwitch) {\n onChange(name, \"hidden\", input.checked === false);\n }\n }\n }\n },\n [onChange],\n );\n\n const handleClick = useCallback<MouseEventHandler>(\n (evt) => {\n const targetEl = evt.target as HTMLElement;\n if (targetEl.classList.contains(\"vuuColumnList-text\")) {\n const listItemEl = targetEl.closest(\".vuuListItem\") as HTMLElement;\n if (listItemEl?.dataset.name) {\n onNavigateToColumn?.(listItemEl.dataset.name);\n }\n }\n },\n [onNavigateToColumn],\n );\n\n return (\n <div\n {...htmlAttributes}\n className={cx(classBase, className, {\n [`${classBase}-withColumnNavigation`]:\n typeof onNavigateToColumn === \"function\",\n })}\n >\n <div className={`${classBase}-header`}>\n <span>Column Selection</span>\n </div>\n <div className={`${classBase}-colHeadings`}>\n <span>Column subscription</span>\n <span>Visibility</span>\n </div>\n <List<ColumnItem, \"none\">\n ListItem={ColumnListItem}\n allowDragDrop\n height=\"auto\"\n onChange={handleChange}\n onClick={handleClick}\n onMoveListItem={onMoveListItem}\n selectionStrategy=\"none\"\n source={columnItems}\n itemHeight={33}\n />\n </div>\n );\n};\n"],"names":["jsxs","ListItem","jsx","Icon","Checkbox","getColumnLabel","Switch","useWindow","useComponentCssInjection","columnList","useCallback","queryClosest","List"],"mappings":"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"}
1
+ {"version":3,"file":"ColumnList.js","sources":["../../src/column-list/ColumnList.tsx"],"sourcesContent":["import { Checkbox, Switch } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport {\n Icon,\n List,\n ListItem,\n ListItemProps,\n ListProps,\n} from \"@vuu-ui/vuu-ui-controls\";\nimport { getColumnLabel, queryClosest } from \"@vuu-ui/vuu-utils\";\nimport cx from \"clsx\";\nimport {\n HTMLAttributes,\n MouseEventHandler,\n SyntheticEvent,\n useCallback,\n} from \"react\";\nimport { ColumnItem } from \"../table-settings\";\n\nimport columnList from \"./ColumnList.css\";\n\nconst classBase = \"vuuColumnList\";\nconst classBaseListItem = \"vuuColumnListItem\";\n\nexport type ColumnChangeHandler = (\n columnName: string,\n propertyName: keyof ColumnDescriptor | \"subscribed\",\n value: string | number | boolean,\n) => void;\n\nexport interface ColumnListProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n columnItems: ColumnItem[];\n onChange: ColumnChangeHandler;\n onMoveListItem: ListProps[\"onMoveListItem\"];\n onNavigateToColumn?: (columnName: string) => void;\n}\n\nconst ColumnListItem = ({\n className: classNameProp,\n item,\n ...listItemProps\n}: ListItemProps<ColumnItem>) => {\n return (\n <ListItem\n {...listItemProps}\n className={cx(classNameProp, classBaseListItem)}\n data-name={item?.name}\n >\n <Icon name=\"draggable\" size={16} />\n {item?.isCalculated ? (\n <Icon name=\"function\" />\n ) : (\n <Checkbox\n className={`${classBase}-checkBox`}\n checked={item?.subscribed}\n />\n )}\n <span className={`${classBase}-text`}>\n {getColumnLabel(item as ColumnDescriptor)}\n </span>\n <Switch\n className={`${classBase}-switch`}\n checked={item?.hidden !== true}\n disabled={item?.subscribed !== true}\n />\n </ListItem>\n );\n};\n\nexport const ColumnList = ({\n className,\n columnItems,\n onChange,\n onMoveListItem,\n onNavigateToColumn,\n ...htmlAttributes\n}: ColumnListProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-column-list\",\n css: columnList,\n window: targetWindow,\n });\n\n const handleChange = useCallback(\n ({ target }: SyntheticEvent) => {\n const input = target as HTMLInputElement;\n const listItem = queryClosest(target, `.${classBaseListItem}`);\n if (listItem) {\n const {\n dataset: { name },\n } = listItem;\n if (name) {\n const saltCheckbox = queryClosest(target, `.${classBase}-checkBox`);\n const saltSwitch = queryClosest(target, `.${classBase}-switch`);\n\n if (saltCheckbox) {\n onChange(name, \"subscribed\", input.checked);\n } else if (saltSwitch) {\n onChange(name, \"hidden\", input.checked === false);\n }\n }\n }\n },\n [onChange],\n );\n\n const handleClick = useCallback<MouseEventHandler>(\n (evt) => {\n const targetEl = evt.target as HTMLElement;\n if (targetEl.classList.contains(\"vuuColumnList-text\")) {\n const listItemEl = targetEl.closest(\".vuuListItem\") as HTMLElement;\n if (listItemEl?.dataset.name) {\n onNavigateToColumn?.(listItemEl.dataset.name);\n }\n }\n },\n [onNavigateToColumn],\n );\n\n return (\n <div\n {...htmlAttributes}\n className={cx(classBase, className, {\n [`${classBase}-withColumnNavigation`]:\n typeof onNavigateToColumn === \"function\",\n })}\n >\n <div className={`${classBase}-header`}>\n <span>Column Selection</span>\n </div>\n <div className={`${classBase}-colHeadings`}>\n <span>Column subscription</span>\n <span>Visibility</span>\n </div>\n <List<ColumnItem, \"none\">\n ListItem={ColumnListItem}\n allowDragDrop\n height=\"auto\"\n onChange={handleChange}\n onClick={handleClick}\n onMoveListItem={onMoveListItem}\n selectionStrategy=\"none\"\n source={columnItems}\n itemHeight={33}\n />\n </div>\n );\n};\n"],"names":["jsxs","ListItem","jsx","Icon","Checkbox","getColumnLabel","Switch","useWindow","useComponentCssInjection","columnList","useCallback","queryClosest","List"],"mappings":";;;;;;;;;;;;AAuBA,MAAM,SAAY,GAAA,eAAA;AAClB,MAAM,iBAAoB,GAAA,mBAAA;AAgB1B,MAAM,iBAAiB,CAAC;AAAA,EACtB,SAAW,EAAA,aAAA;AAAA,EACX,IAAA;AAAA,EACA,GAAG;AACL,CAAiC,KAAA;AAC/B,EACE,uBAAAA,eAAA;AAAA,IAACC,sBAAA;AAAA,IAAA;AAAA,MACE,GAAG,aAAA;AAAA,MACJ,SAAA,EAAW,EAAG,CAAA,aAAA,EAAe,iBAAiB,CAAA;AAAA,MAC9C,aAAW,IAAM,EAAA,IAAA;AAAA,MAEjB,QAAA,EAAA;AAAA,wBAAAC,cAAA,CAACC,kBAAK,EAAA,EAAA,IAAA,EAAK,WAAY,EAAA,IAAA,EAAM,EAAI,EAAA,CAAA;AAAA,QAChC,MAAM,YACL,mBAAAD,cAAA,CAACC,kBAAK,EAAA,EAAA,IAAA,EAAK,YAAW,CAEtB,mBAAAD,cAAA;AAAA,UAACE,aAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,GAAG,SAAS,CAAA,SAAA,CAAA;AAAA,YACvB,SAAS,IAAM,EAAA;AAAA;AAAA,SACjB;AAAA,wBAEFF,cAAA,CAAC,UAAK,SAAW,EAAA,CAAA,EAAG,SAAS,CAC1B,KAAA,CAAA,EAAA,QAAA,EAAAG,uBAAA,CAAe,IAAwB,CAC1C,EAAA,CAAA;AAAA,wBACAH,cAAA;AAAA,UAACI,WAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,GAAG,SAAS,CAAA,OAAA,CAAA;AAAA,YACvB,OAAA,EAAS,MAAM,MAAW,KAAA,IAAA;AAAA,YAC1B,QAAA,EAAU,MAAM,UAAe,KAAA;AAAA;AAAA;AACjC;AAAA;AAAA,GACF;AAEJ,CAAA;AAEO,MAAM,aAAa,CAAC;AAAA,EACzB,SAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,cAAA;AAAA,EACA,kBAAA;AAAA,EACA,GAAG;AACL,CAAuB,KAAA;AACrB,EAAA,MAAM,eAAeC,gBAAU,EAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,iBAAA;AAAA,IACR,GAAK,EAAAC,YAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAA,MAAM,YAAe,GAAAC,iBAAA;AAAA,IACnB,CAAC,EAAE,MAAA,EAA6B,KAAA;AAC9B,MAAA,MAAM,KAAQ,GAAA,MAAA;AACd,MAAA,MAAM,QAAW,GAAAC,qBAAA,CAAa,MAAQ,EAAA,CAAA,CAAA,EAAI,iBAAiB,CAAE,CAAA,CAAA;AAC7D,MAAA,IAAI,QAAU,EAAA;AACZ,QAAM,MAAA;AAAA,UACJ,OAAA,EAAS,EAAE,IAAK;AAAA,SACd,GAAA,QAAA;AACJ,QAAA,IAAI,IAAM,EAAA;AACR,UAAA,MAAM,YAAe,GAAAA,qBAAA,CAAa,MAAQ,EAAA,CAAA,CAAA,EAAI,SAAS,CAAW,SAAA,CAAA,CAAA;AAClE,UAAA,MAAM,UAAa,GAAAA,qBAAA,CAAa,MAAQ,EAAA,CAAA,CAAA,EAAI,SAAS,CAAS,OAAA,CAAA,CAAA;AAE9D,UAAA,IAAI,YAAc,EAAA;AAChB,YAAS,QAAA,CAAA,IAAA,EAAM,YAAc,EAAA,KAAA,CAAM,OAAO,CAAA;AAAA,qBACjC,UAAY,EAAA;AACrB,YAAA,QAAA,CAAS,IAAM,EAAA,QAAA,EAAU,KAAM,CAAA,OAAA,KAAY,KAAK,CAAA;AAAA;AAClD;AACF;AACF,KACF;AAAA,IACA,CAAC,QAAQ;AAAA,GACX;AAEA,EAAA,MAAM,WAAc,GAAAD,iBAAA;AAAA,IAClB,CAAC,GAAQ,KAAA;AACP,MAAA,MAAM,WAAW,GAAI,CAAA,MAAA;AACrB,MAAA,IAAI,QAAS,CAAA,SAAA,CAAU,QAAS,CAAA,oBAAoB,CAAG,EAAA;AACrD,QAAM,MAAA,UAAA,GAAa,QAAS,CAAA,OAAA,CAAQ,cAAc,CAAA;AAClD,QAAI,IAAA,UAAA,EAAY,QAAQ,IAAM,EAAA;AAC5B,UAAqB,kBAAA,GAAA,UAAA,CAAW,QAAQ,IAAI,CAAA;AAAA;AAC9C;AACF,KACF;AAAA,IACA,CAAC,kBAAkB;AAAA,GACrB;AAEA,EACE,uBAAAV,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,cAAA;AAAA,MACJ,SAAA,EAAW,EAAG,CAAA,SAAA,EAAW,SAAW,EAAA;AAAA,QAClC,CAAC,CAAG,EAAA,SAAS,CAAuB,qBAAA,CAAA,GAClC,OAAO,kBAAuB,KAAA;AAAA,OACjC,CAAA;AAAA,MAED,QAAA,EAAA;AAAA,wBAACE,cAAA,CAAA,KAAA,EAAA,EAAI,WAAW,CAAG,EAAA,SAAS,WAC1B,QAAC,kBAAAA,cAAA,CAAA,MAAA,EAAA,EAAK,8BAAgB,CACxB,EAAA,CAAA;AAAA,wBACCF,eAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAA,CAAA,EAAG,SAAS,CAC1B,YAAA,CAAA,EAAA,QAAA,EAAA;AAAA,0BAAAE,cAAA,CAAC,UAAK,QAAmB,EAAA,qBAAA,EAAA,CAAA;AAAA,0BACzBA,cAAA,CAAC,UAAK,QAAU,EAAA,YAAA,EAAA;AAAA,SAClB,EAAA,CAAA;AAAA,wBACAA,cAAA;AAAA,UAACU,kBAAA;AAAA,UAAA;AAAA,YACC,QAAU,EAAA,cAAA;AAAA,YACV,aAAa,EAAA,IAAA;AAAA,YACb,MAAO,EAAA,MAAA;AAAA,YACP,QAAU,EAAA,YAAA;AAAA,YACV,OAAS,EAAA,WAAA;AAAA,YACT,cAAA;AAAA,YACA,iBAAkB,EAAA,MAAA;AAAA,YAClB,MAAQ,EAAA,WAAA;AAAA,YACR,UAAY,EAAA;AAAA;AAAA;AACd;AAAA;AAAA,GACF;AAEJ;;;;"}
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+
3
+ var columnMenuCss = ".vuuMenuItem {\n --vuu-svg-cog: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\"><path d=\"M12.9533 8.65331C12.98 8.43998 13 8.22665 13 7.99998C13 7.77331 12.98 7.55998 12.9533 7.34665L14.36 6.24665C14.4867 6.14665 14.52 5.96665 14.44 5.81998L13.1067 3.51331C13.0267 3.36665 12.8467 3.31331 12.7 3.36665L11.04 4.03331C10.6933 3.76665 10.32 3.54665 9.91333 3.37998L9.66 1.61331C9.64 1.45331 9.5 1.33331 9.33333 1.33331H6.66667C6.5 1.33331 6.36 1.45331 6.34 1.61331L6.08667 3.37998C5.68 3.54665 5.30667 3.77331 4.96 4.03331L3.3 3.36665C3.14667 3.30665 2.97333 3.36665 2.89333 3.51331L1.56 5.81998C1.47333 5.96665 1.51333 6.14665 1.64 6.24665L3.04667 7.34665C3.02 7.55998 3 7.77998 3 7.99998C3 8.21998 3.02 8.43998 3.04667 8.65331L1.64 9.75331C1.51333 9.85331 1.48 10.0333 1.56 10.18L2.89333 12.4866C2.97333 12.6333 3.15333 12.6866 3.3 12.6333L4.96 11.9666C5.30667 12.2333 5.68 12.4533 6.08667 12.62L6.34 14.3866C6.36 14.5466 6.5 14.6666 6.66667 14.6666H9.33333C9.5 14.6666 9.64 14.5466 9.66 14.3866L9.91333 12.62C10.32 12.4533 10.6933 12.2266 11.04 11.9666L12.7 12.6333C12.8533 12.6933 13.0267 12.6333 13.1067 12.4866L14.44 10.18C14.52 10.0333 14.4867 9.85331 14.36 9.75331L12.9533 8.65331V8.65331ZM8 10.3333C6.71333 10.3333 5.66667 9.28665 5.66667 7.99998C5.66667 6.71331 6.71333 5.66665 8 5.66665C9.28667 5.66665 10.3333 6.71331 10.3333 7.99998C10.3333 9.28665 9.28667 10.3333 8 10.3333Z\"/></svg>');\n}\n.vuuColumnMenu {\n --menu-button-size: calc(var(--salt-size-base) - var(--salt-spacing-100));\n --saltButton-padding: var(--salt-spacing-50);\n --saltButton-minWidth: var(--menu-button-size);\n --saltButton-height: var(--menu-button-size);\n --saltButton-width: var(--menu-button-size);\n\n --vuu-icon-height: var(--menu-button-size);\n --vuu-icon-left: 0px;\n --vuu-icon-top: 0px;\n --vuu-icon-width: var(--menu-button-size);\n\n border: none;\n border-radius: 4px;\n flex: 0 0 var(--menu-button-size);\n margin: var(--vuuTable-columnMenu-margin, 0);\n padding: 0;\n}\n";
4
+
5
+ module.exports = columnMenuCss;
6
+ //# sourceMappingURL=ColumnMenu.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ColumnMenu.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -0,0 +1,83 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var core = require('@salt-ds/core');
5
+ var styles = require('@salt-ds/styles');
6
+ var window = require('@salt-ds/window');
7
+ var vuuUiControls = require('@vuu-ui/vuu-ui-controls');
8
+ var TableProvider = require('../table-provider/TableProvider.js');
9
+ var cx = require('clsx');
10
+ var react = require('react');
11
+ var ColumnMenu$1 = require('./ColumnMenu.css.js');
12
+ var columnMenuUtils = require('./column-menu-utils.js');
13
+
14
+ const classBase = "vuuColumnMenu";
15
+ const ColumnMenu = ({
16
+ className,
17
+ column,
18
+ menuActionHandler: menuActionHandlerProp
19
+ }) => {
20
+ const targetWindow = window.useWindow();
21
+ styles.useComponentCssInjection({
22
+ testId: "vuu-column-menu",
23
+ css: ColumnMenu$1,
24
+ window: targetWindow
25
+ });
26
+ const { dataSource, menuActionHandler } = TableProvider.useTableContext(true);
27
+ const menuActionClickHandler = react.useCallback(
28
+ (evt) => {
29
+ const columnMenuActionType = columnMenuUtils.getColumnMenuActionType(evt.target);
30
+ if (menuActionHandlerProp?.(columnMenuActionType, column) !== true) {
31
+ return menuActionHandler(columnMenuActionType, column);
32
+ }
33
+ },
34
+ [column, menuActionHandler, menuActionHandlerProp]
35
+ );
36
+ const sortMenu = columnMenuUtils.buildSortMenu(column, dataSource, menuActionClickHandler);
37
+ const groupMenu = columnMenuUtils.buildGroupMenu(column, dataSource, menuActionClickHandler);
38
+ const aggregationMenu = columnMenuUtils.buildAggregationMenuItems(
39
+ column,
40
+ dataSource,
41
+ menuActionClickHandler
42
+ );
43
+ const visibilityMenuItems = columnMenuUtils.buildVisibilityMenuItems(
44
+ column,
45
+ menuActionClickHandler
46
+ );
47
+ const pinMenu = columnMenuUtils.buildPinMenuItems(column, menuActionClickHandler);
48
+ const settingsMenuItems = columnMenuUtils.buildSettingsMenuItems(
49
+ column,
50
+ menuActionClickHandler
51
+ );
52
+ const handleClick = react.useCallback(
53
+ (evt) => {
54
+ evt.stopPropagation();
55
+ },
56
+ []
57
+ );
58
+ return /* @__PURE__ */ jsxRuntime.jsxs(core.Menu, { children: [
59
+ /* @__PURE__ */ jsxRuntime.jsx(core.MenuTrigger, { children: /* @__PURE__ */ jsxRuntime.jsx(
60
+ vuuUiControls.IconButton,
61
+ {
62
+ appearance: "transparent",
63
+ className: cx(classBase, className),
64
+ "data-embedded": true,
65
+ icon: "more-vert",
66
+ sentiment: "neutral",
67
+ "aria-label": "Open Column Menu",
68
+ onClick: handleClick
69
+ }
70
+ ) }),
71
+ /* @__PURE__ */ jsxRuntime.jsxs(core.MenuPanel, { children: [
72
+ sortMenu,
73
+ groupMenu,
74
+ aggregationMenu,
75
+ visibilityMenuItems,
76
+ pinMenu,
77
+ settingsMenuItems
78
+ ] })
79
+ ] });
80
+ };
81
+
82
+ exports.ColumnMenu = ColumnMenu;
83
+ //# sourceMappingURL=ColumnMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ColumnMenu.js","sources":["../../src/column-menu/ColumnMenu.tsx"],"sourcesContent":["import { Menu, MenuPanel, MenuTrigger } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { IconButton } from \"@vuu-ui/vuu-ui-controls\";\nimport { useTableContext } from \"../table-provider/TableProvider\";\nimport cx from \"clsx\";\nimport { HTMLAttributes, MouseEventHandler, useCallback } from \"react\";\n\nimport columnMenuCss from \"./ColumnMenu.css\";\nimport {\n buildAggregationMenuItems,\n buildPinMenuItems,\n buildGroupMenu,\n buildSortMenu,\n buildVisibilityMenuItems,\n ColumnMenuActionType,\n getColumnMenuActionType,\n type MenuItemClickHandler,\n buildSettingsMenuItems,\n} from \"./column-menu-utils\";\nimport { MenuActionHandler } from \"@vuu-ui/vuu-context-menu\";\n\nconst classBase = \"vuuColumnMenu\";\n\nexport interface ColumnMenuProps extends HTMLAttributes<HTMLSpanElement> {\n column: ColumnDescriptor;\n menuActionHandler?: MenuActionHandler<ColumnMenuActionType, ColumnDescriptor>;\n}\n\nexport const ColumnMenu = ({\n className,\n column,\n menuActionHandler: menuActionHandlerProp,\n}: ColumnMenuProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-column-menu\",\n css: columnMenuCss,\n window: targetWindow,\n });\n\n const { dataSource, menuActionHandler } = useTableContext(true);\n\n const menuActionClickHandler = useCallback<MenuItemClickHandler>(\n (evt) => {\n const columnMenuActionType = getColumnMenuActionType(evt.target);\n if (menuActionHandlerProp?.(columnMenuActionType, column) !== true) {\n return menuActionHandler(columnMenuActionType, column);\n }\n },\n [column, menuActionHandler, menuActionHandlerProp],\n );\n\n const sortMenu = buildSortMenu(column, dataSource, menuActionClickHandler);\n const groupMenu = buildGroupMenu(column, dataSource, menuActionClickHandler);\n const aggregationMenu = buildAggregationMenuItems(\n column,\n dataSource,\n menuActionClickHandler,\n );\n const visibilityMenuItems = buildVisibilityMenuItems(\n column,\n menuActionClickHandler,\n );\n const pinMenu = buildPinMenuItems(column, menuActionClickHandler);\n const settingsMenuItems = buildSettingsMenuItems(\n column,\n menuActionClickHandler,\n );\n\n const handleClick = useCallback<MouseEventHandler<HTMLButtonElement>>(\n (evt) => {\n // Prevent sort from triggering if the click were to bubble.\n evt.stopPropagation();\n },\n [],\n );\n\n return (\n <Menu>\n <MenuTrigger>\n <IconButton\n appearance=\"transparent\"\n className={cx(classBase, className)}\n data-embedded\n icon=\"more-vert\"\n sentiment=\"neutral\"\n aria-label=\"Open Column Menu\"\n onClick={handleClick}\n />\n </MenuTrigger>\n <MenuPanel>\n {sortMenu}\n {groupMenu}\n {aggregationMenu}\n {visibilityMenuItems}\n {pinMenu}\n {settingsMenuItems}\n </MenuPanel>\n </Menu>\n );\n};\n"],"names":["useWindow","useComponentCssInjection","columnMenuCss","useTableContext","useCallback","getColumnMenuActionType","buildSortMenu","buildGroupMenu","buildAggregationMenuItems","buildVisibilityMenuItems","buildPinMenuItems","buildSettingsMenuItems","Menu","jsx","MenuTrigger","IconButton","MenuPanel"],"mappings":";;;;;;;;;;;;;AAuBA,MAAM,SAAY,GAAA,eAAA;AAOX,MAAM,aAAa,CAAC;AAAA,EACzB,SAAA;AAAA,EACA,MAAA;AAAA,EACA,iBAAmB,EAAA;AACrB,CAAuB,KAAA;AACrB,EAAA,MAAM,eAAeA,gBAAU,EAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,iBAAA;AAAA,IACR,GAAK,EAAAC,YAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAA,MAAM,EAAE,UAAA,EAAY,iBAAkB,EAAA,GAAIC,8BAAgB,IAAI,CAAA;AAE9D,EAAA,MAAM,sBAAyB,GAAAC,iBAAA;AAAA,IAC7B,CAAC,GAAQ,KAAA;AACP,MAAM,MAAA,oBAAA,GAAuBC,uCAAwB,CAAA,GAAA,CAAI,MAAM,CAAA;AAC/D,MAAA,IAAI,qBAAwB,GAAA,oBAAA,EAAsB,MAAM,CAAA,KAAM,IAAM,EAAA;AAClE,QAAO,OAAA,iBAAA,CAAkB,sBAAsB,MAAM,CAAA;AAAA;AACvD,KACF;AAAA,IACA,CAAC,MAAQ,EAAA,iBAAA,EAAmB,qBAAqB;AAAA,GACnD;AAEA,EAAA,MAAM,QAAW,GAAAC,6BAAA,CAAc,MAAQ,EAAA,UAAA,EAAY,sBAAsB,CAAA;AACzE,EAAA,MAAM,SAAY,GAAAC,8BAAA,CAAe,MAAQ,EAAA,UAAA,EAAY,sBAAsB,CAAA;AAC3E,EAAA,MAAM,eAAkB,GAAAC,yCAAA;AAAA,IACtB,MAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAM,mBAAsB,GAAAC,wCAAA;AAAA,IAC1B,MAAA;AAAA,IACA;AAAA,GACF;AACA,EAAM,MAAA,OAAA,GAAUC,iCAAkB,CAAA,MAAA,EAAQ,sBAAsB,CAAA;AAChE,EAAA,MAAM,iBAAoB,GAAAC,sCAAA;AAAA,IACxB,MAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,MAAM,WAAc,GAAAP,iBAAA;AAAA,IAClB,CAAC,GAAQ,KAAA;AAEP,MAAA,GAAA,CAAI,eAAgB,EAAA;AAAA,KACtB;AAAA,IACA;AAAC,GACH;AAEA,EAAA,uCACGQ,SACC,EAAA,EAAA,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAACC,gBACC,EAAA,EAAA,QAAA,kBAAAD,cAAA;AAAA,MAACE,wBAAA;AAAA,MAAA;AAAA,QACC,UAAW,EAAA,aAAA;AAAA,QACX,SAAA,EAAW,EAAG,CAAA,SAAA,EAAW,SAAS,CAAA;AAAA,QAClC,eAAa,EAAA,IAAA;AAAA,QACb,IAAK,EAAA,WAAA;AAAA,QACL,SAAU,EAAA,SAAA;AAAA,QACV,YAAW,EAAA,kBAAA;AAAA,QACX,OAAS,EAAA;AAAA;AAAA,KAEb,EAAA,CAAA;AAAA,oCACCC,cACE,EAAA,EAAA,QAAA,EAAA;AAAA,MAAA,QAAA;AAAA,MACA,SAAA;AAAA,MACA,eAAA;AAAA,MACA,mBAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA,KACH,EAAA;AAAA,GACF,EAAA,CAAA;AAEJ;;;;"}
@@ -0,0 +1,479 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var core = require('@salt-ds/core');
5
+ var vuuUtils = require('@vuu-ui/vuu-utils');
6
+
7
+ const isColumnMenuActionType = (value) => value !== void 0 && [
8
+ "agg-count",
9
+ "agg-distinct",
10
+ "agg-sum",
11
+ "agg-avg",
12
+ "agg-high",
13
+ "agg-low",
14
+ "sort-asc",
15
+ "sort-dsc",
16
+ "sort-add-asc",
17
+ "sort-add-dsc",
18
+ "remove-sort",
19
+ "group-column",
20
+ "remove-group",
21
+ "add-to-group",
22
+ "remove-from-group",
23
+ "pin-column-left",
24
+ "pin-column-right",
25
+ "pin-column-floating",
26
+ "unpin-column",
27
+ "hide-column",
28
+ "remove-column",
29
+ "column-settings",
30
+ "table-settings"
31
+ ].includes(value);
32
+ const getColumnMenuActionType = (target) => {
33
+ const { menuActionId } = target.dataset;
34
+ if (isColumnMenuActionType(menuActionId)) {
35
+ return menuActionId;
36
+ } else {
37
+ throw Error(
38
+ "[vuu-table-extras] column-menu-utils target element is not a valid Column MenuItem"
39
+ );
40
+ }
41
+ };
42
+ function buildSortMenu(column, dataSource, menuActionClickHandler) {
43
+ if (column.sortable === false) {
44
+ return null;
45
+ } else {
46
+ const { name, label = name } = column;
47
+ const menuItems = [];
48
+ const columnSortStatus = vuuUtils.getSortStatus(column.name, dataSource.sort);
49
+ switch (columnSortStatus) {
50
+ case "no-sort":
51
+ menuItems.push(
52
+ /* @__PURE__ */ jsxRuntime.jsx(
53
+ core.MenuItem,
54
+ {
55
+ "data-menu-action-id": "sort-asc",
56
+ onClick: menuActionClickHandler,
57
+ children: "Sort ascending"
58
+ },
59
+ "sort-asc"
60
+ )
61
+ );
62
+ menuItems.push(
63
+ /* @__PURE__ */ jsxRuntime.jsx(
64
+ core.MenuItem,
65
+ {
66
+ "data-menu-action-id": "sort-dsc",
67
+ onClick: menuActionClickHandler,
68
+ children: "Sort descending"
69
+ },
70
+ "sort-dsc"
71
+ )
72
+ );
73
+ break;
74
+ case "single-sort-asc":
75
+ menuItems.push(
76
+ /* @__PURE__ */ jsxRuntime.jsx(
77
+ core.MenuItem,
78
+ {
79
+ "data-menu-action-id": "sort-dsc",
80
+ onClick: menuActionClickHandler,
81
+ children: "Reverse Sort (DSC)"
82
+ },
83
+ "sort-dsc"
84
+ ),
85
+ /* @__PURE__ */ jsxRuntime.jsx(
86
+ core.MenuItem,
87
+ {
88
+ "data-menu-action-id": "remove-sort",
89
+ onClick: menuActionClickHandler,
90
+ children: "Remove Sort"
91
+ },
92
+ "remove-sort"
93
+ )
94
+ );
95
+ break;
96
+ case "single-sort-desc":
97
+ menuItems.push(
98
+ /* @__PURE__ */ jsxRuntime.jsx(
99
+ core.MenuItem,
100
+ {
101
+ "data-menu-action-id": "sort-asc",
102
+ onClick: menuActionClickHandler,
103
+ children: "Reverse Sort (ASC)"
104
+ },
105
+ "sort-asc"
106
+ ),
107
+ /* @__PURE__ */ jsxRuntime.jsx(
108
+ core.MenuItem,
109
+ {
110
+ "data-menu-action-id": "remove-sort",
111
+ onClick: menuActionClickHandler,
112
+ children: "Remove Sort"
113
+ },
114
+ "remove-sort"
115
+ )
116
+ );
117
+ break;
118
+ case "sort-other-column":
119
+ menuItems.push(
120
+ /* @__PURE__ */ jsxRuntime.jsx(
121
+ core.MenuItem,
122
+ {
123
+ "data-menu-action-id": "sort-add-asc",
124
+ onClick: menuActionClickHandler,
125
+ children: "Add to sort ASC"
126
+ },
127
+ "sort-add-asc"
128
+ )
129
+ );
130
+ menuItems.push(
131
+ /* @__PURE__ */ jsxRuntime.jsx(
132
+ core.MenuItem,
133
+ {
134
+ "data-menu-action-id": "sort-add-dsc",
135
+ onClick: menuActionClickHandler,
136
+ children: "Add to sort DSC"
137
+ },
138
+ "sort-add-dsc"
139
+ )
140
+ );
141
+ menuItems.push(
142
+ /* @__PURE__ */ jsxRuntime.jsx(
143
+ core.MenuItem,
144
+ {
145
+ "data-menu-action-id": "sort-asc",
146
+ onClick: menuActionClickHandler,
147
+ children: "Ascending"
148
+ },
149
+ "sort-asc"
150
+ )
151
+ );
152
+ menuItems.push(
153
+ /* @__PURE__ */ jsxRuntime.jsx(
154
+ core.MenuItem,
155
+ {
156
+ "data-menu-action-id": "sort-dsc",
157
+ onClick: menuActionClickHandler,
158
+ children: "Descending"
159
+ },
160
+ "sort-dsc"
161
+ )
162
+ );
163
+ break;
164
+ case "multi-sort-includes-column-asc":
165
+ case "multi-sort-includes-column-desc":
166
+ break;
167
+ default:
168
+ vuuUtils.logUnhandledMessage(
169
+ columnSortStatus,
170
+ "[vuu-table-extras] column-menu-utils buildSortMenu"
171
+ );
172
+ }
173
+ return /* @__PURE__ */ jsxRuntime.jsxs(core.Menu, { children: [
174
+ /* @__PURE__ */ jsxRuntime.jsx(core.MenuTrigger, { children: /* @__PURE__ */ jsxRuntime.jsx(core.MenuItem, { children: `Sort by ${label}` }) }),
175
+ /* @__PURE__ */ jsxRuntime.jsx(core.MenuPanel, { children: menuItems })
176
+ ] }, "sort-menu");
177
+ }
178
+ }
179
+ function buildGroupMenu(column, dataSource, menuActionClickHandler) {
180
+ if (column.groupable === false) {
181
+ return null;
182
+ } else {
183
+ const menuItems = [];
184
+ const columnGroupStatus = vuuUtils.getGroupStatus(column.name, dataSource.groupBy);
185
+ const { name, label = name } = column;
186
+ switch (columnGroupStatus) {
187
+ case "no-groupby":
188
+ case "single-groupby-other-column":
189
+ menuItems.push(
190
+ /* @__PURE__ */ jsxRuntime.jsx(
191
+ core.MenuItem,
192
+ {
193
+ "data-menu-action-id": "group-column",
194
+ onClick: menuActionClickHandler,
195
+ children: `Group by ${label}`
196
+ },
197
+ "group-column"
198
+ )
199
+ );
200
+ break;
201
+ case "single-groupby":
202
+ menuItems.push(
203
+ /* @__PURE__ */ jsxRuntime.jsx(
204
+ core.MenuItem,
205
+ {
206
+ "data-menu-action-id": "remove-group",
207
+ onClick: menuActionClickHandler,
208
+ children: "Remove Grouping"
209
+ },
210
+ "remove-group"
211
+ )
212
+ );
213
+ break;
214
+ case "multi-groupby-other-columns":
215
+ menuItems.push(
216
+ /* @__PURE__ */ jsxRuntime.jsx(
217
+ core.MenuItem,
218
+ {
219
+ "data-menu-action-id": "add-to-group",
220
+ onClick: menuActionClickHandler,
221
+ children: "Add to grouping"
222
+ },
223
+ "add-to-group"
224
+ )
225
+ );
226
+ break;
227
+ case "multi-groupby-includes-column":
228
+ menuItems.push(
229
+ /* @__PURE__ */ jsxRuntime.jsx(
230
+ core.MenuItem,
231
+ {
232
+ "data-menu-action-id": "remove-from-group",
233
+ onClick: menuActionClickHandler,
234
+ children: "Remove from grouping"
235
+ },
236
+ "remove-from-group"
237
+ )
238
+ );
239
+ break;
240
+ default:
241
+ vuuUtils.logUnhandledMessage(
242
+ columnGroupStatus,
243
+ "[vuu-table-extras] column-menu-utils buildGroupMenu"
244
+ );
245
+ }
246
+ return /* @__PURE__ */ jsxRuntime.jsxs(core.Menu, { children: [
247
+ /* @__PURE__ */ jsxRuntime.jsx(core.MenuTrigger, { children: /* @__PURE__ */ jsxRuntime.jsx(core.MenuItem, { children: "Group data" }) }),
248
+ /* @__PURE__ */ jsxRuntime.jsx(core.MenuPanel, { children: menuItems })
249
+ ] }, "group-menu");
250
+ }
251
+ }
252
+ const buildVisibilityMenuItems = (column, menuActionClickHandler) => {
253
+ const menuItems = [];
254
+ const { name, label = name } = column;
255
+ menuItems.push(
256
+ /* @__PURE__ */ jsxRuntime.jsx(
257
+ core.MenuItem,
258
+ {
259
+ "data-menu-action-id": "hide-column",
260
+ onClick: menuActionClickHandler,
261
+ children: `Hide ${label} column`
262
+ },
263
+ "hide-column"
264
+ )
265
+ );
266
+ menuItems.push(
267
+ /* @__PURE__ */ jsxRuntime.jsx(
268
+ core.MenuItem,
269
+ {
270
+ "data-menu-action-id": "remove-column",
271
+ onClick: menuActionClickHandler,
272
+ children: `Remove ${label} column`
273
+ },
274
+ "remove-column"
275
+ )
276
+ );
277
+ return menuItems;
278
+ };
279
+ const buildPinMenuItems = (column, menuActionClickHandler) => {
280
+ if (column === void 0) {
281
+ return [];
282
+ }
283
+ const { pin } = column;
284
+ const menuItems = [];
285
+ const pinLeft = /* @__PURE__ */ jsxRuntime.jsx(
286
+ core.MenuItem,
287
+ {
288
+ "data-menu-action-id": "pin-column-left",
289
+ onClick: menuActionClickHandler,
290
+ children: "Pin left"
291
+ },
292
+ "pin-column-left"
293
+ );
294
+ const pinFloating = /* @__PURE__ */ jsxRuntime.jsx(
295
+ core.MenuItem,
296
+ {
297
+ "data-menu-action-id": "pin-column-floating",
298
+ onClick: menuActionClickHandler,
299
+ children: "Pin floating"
300
+ },
301
+ "pin-column-floating"
302
+ );
303
+ const pinRight = /* @__PURE__ */ jsxRuntime.jsx(
304
+ core.MenuItem,
305
+ {
306
+ "data-menu-action-id": "pin-column-right",
307
+ onClick: menuActionClickHandler,
308
+ children: "Pin right"
309
+ },
310
+ "pin-column-right"
311
+ );
312
+ if (pin === void 0) {
313
+ menuItems.push(
314
+ /* @__PURE__ */ jsxRuntime.jsxs(core.Menu, { children: [
315
+ /* @__PURE__ */ jsxRuntime.jsx(core.MenuTrigger, { children: /* @__PURE__ */ jsxRuntime.jsx(core.MenuItem, { children: "Pin Column" }) }),
316
+ /* @__PURE__ */ jsxRuntime.jsxs(core.MenuPanel, { children: [
317
+ pinLeft,
318
+ pinFloating,
319
+ pinRight
320
+ ] })
321
+ ] }, "pin-menu")
322
+ );
323
+ } else {
324
+ menuItems.push(
325
+ /* @__PURE__ */ jsxRuntime.jsx(
326
+ core.MenuItem,
327
+ {
328
+ "data-menu-action-id": "unpin-column",
329
+ onClick: menuActionClickHandler,
330
+ children: "Unpin"
331
+ },
332
+ "unpin-column"
333
+ )
334
+ );
335
+ if (pin === "left") {
336
+ menuItems.push(
337
+ /* @__PURE__ */ jsxRuntime.jsxs(core.Menu, { children: [
338
+ /* @__PURE__ */ jsxRuntime.jsx(core.MenuTrigger, { children: /* @__PURE__ */ jsxRuntime.jsx(core.MenuItem, { children: "Pin Column" }) }),
339
+ /* @__PURE__ */ jsxRuntime.jsxs(core.MenuPanel, { children: [
340
+ pinFloating,
341
+ pinRight
342
+ ] })
343
+ ] }, "pin-menu")
344
+ );
345
+ } else if (pin === "floating") {
346
+ menuItems.push(
347
+ /* @__PURE__ */ jsxRuntime.jsxs(core.Menu, { children: [
348
+ /* @__PURE__ */ jsxRuntime.jsx(core.MenuTrigger, { children: /* @__PURE__ */ jsxRuntime.jsx(core.MenuItem, { children: "Pin Column" }) }),
349
+ /* @__PURE__ */ jsxRuntime.jsxs(core.MenuPanel, { children: [
350
+ pinLeft,
351
+ pinRight
352
+ ] })
353
+ ] }, "pin-menu")
354
+ );
355
+ } else {
356
+ menuItems.push(
357
+ /* @__PURE__ */ jsxRuntime.jsxs(core.Menu, { children: [
358
+ /* @__PURE__ */ jsxRuntime.jsx(core.MenuTrigger, { children: /* @__PURE__ */ jsxRuntime.jsx(core.MenuItem, { children: "Pin Column" }) }),
359
+ /* @__PURE__ */ jsxRuntime.jsxs(core.MenuPanel, { children: [
360
+ pinFloating,
361
+ pinRight
362
+ ] })
363
+ ] }, "pin-menu")
364
+ );
365
+ }
366
+ }
367
+ return menuItems;
368
+ };
369
+ const buildSettingsMenuItems = (_, menuActionClickHandler) => {
370
+ const menuItems = [];
371
+ menuItems.push(
372
+ /* @__PURE__ */ jsxRuntime.jsx(
373
+ core.MenuItem,
374
+ {
375
+ "data-icon": "settings",
376
+ "data-menu-action-id": "column-settings",
377
+ onClick: menuActionClickHandler,
378
+ children: "Column settings ..."
379
+ },
380
+ "column-settings"
381
+ )
382
+ );
383
+ menuItems.push(
384
+ /* @__PURE__ */ jsxRuntime.jsx(
385
+ core.MenuItem,
386
+ {
387
+ "data-icon": "settings",
388
+ "data-menu-action-id": "table-settings",
389
+ onClick: menuActionClickHandler,
390
+ children: "Table settings ..."
391
+ },
392
+ "table-settings"
393
+ )
394
+ );
395
+ return menuItems;
396
+ };
397
+ function buildAggregationMenuItems(column, dataSource, menuActionClickHandler) {
398
+ const { name, label = name } = column;
399
+ if (dataSource.groupBy?.length === 0) {
400
+ return [];
401
+ } else {
402
+ const menuItems = [
403
+ /* @__PURE__ */ jsxRuntime.jsx(
404
+ core.MenuItem,
405
+ {
406
+ "data-menu-action-id": "agg-count",
407
+ onClick: menuActionClickHandler,
408
+ children: "Count"
409
+ },
410
+ "agg-count"
411
+ ),
412
+ /* @__PURE__ */ jsxRuntime.jsx(
413
+ core.MenuItem,
414
+ {
415
+ "data-menu-action-id": "agg-distinct",
416
+ onClick: menuActionClickHandler,
417
+ children: "Distinct"
418
+ },
419
+ "agg-distinct"
420
+ )
421
+ ];
422
+ if (vuuUtils.isNumericColumn(column)) {
423
+ menuItems.push(
424
+ /* @__PURE__ */ jsxRuntime.jsx(
425
+ core.MenuItem,
426
+ {
427
+ "data-menu-action-id": "agg-sum",
428
+ onClick: menuActionClickHandler,
429
+ children: "Sum"
430
+ },
431
+ "agg-sum"
432
+ ),
433
+ /* @__PURE__ */ jsxRuntime.jsx(
434
+ core.MenuItem,
435
+ {
436
+ "data-menu-action-id": "agg-avg",
437
+ onClick: menuActionClickHandler,
438
+ children: "Average"
439
+ },
440
+ "agg-avg"
441
+ ),
442
+ /* @__PURE__ */ jsxRuntime.jsx(
443
+ core.MenuItem,
444
+ {
445
+ "data-menu-action-id": "agg-high",
446
+ onClick: menuActionClickHandler,
447
+ children: "High"
448
+ },
449
+ "agg-high"
450
+ ),
451
+ /* @__PURE__ */ jsxRuntime.jsx(
452
+ core.MenuItem,
453
+ {
454
+ "data-menu-action-id": "agg-low",
455
+ onClick: menuActionClickHandler,
456
+ children: "Low"
457
+ },
458
+ "agg-low"
459
+ )
460
+ );
461
+ }
462
+ return [
463
+ /* @__PURE__ */ jsxRuntime.jsxs(core.Menu, { children: [
464
+ /* @__PURE__ */ jsxRuntime.jsx(core.MenuTrigger, { children: /* @__PURE__ */ jsxRuntime.jsx(core.MenuItem, { children: `Aggregate ${label}` }) }),
465
+ /* @__PURE__ */ jsxRuntime.jsx(core.MenuPanel, { children: menuItems })
466
+ ] }, "aggregate-menu")
467
+ ];
468
+ }
469
+ }
470
+
471
+ exports.buildAggregationMenuItems = buildAggregationMenuItems;
472
+ exports.buildGroupMenu = buildGroupMenu;
473
+ exports.buildPinMenuItems = buildPinMenuItems;
474
+ exports.buildSettingsMenuItems = buildSettingsMenuItems;
475
+ exports.buildSortMenu = buildSortMenu;
476
+ exports.buildVisibilityMenuItems = buildVisibilityMenuItems;
477
+ exports.getColumnMenuActionType = getColumnMenuActionType;
478
+ exports.isColumnMenuActionType = isColumnMenuActionType;
479
+ //# sourceMappingURL=column-menu-utils.js.map