@vuu-ui/vuu-table-extras 2.1.19-beta.1 → 2.1.19-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/package.json +13 -14
  2. package/src/calculated-column/CalculatedColumnPanel.js +95 -0
  3. package/src/calculated-column/useCalculatedColumnPanel.js +60 -0
  4. package/src/calculated-column/useEditCalculatedColumn.js +104 -0
  5. package/src/cell-edit-validators/CaseValidator.js +21 -0
  6. package/src/cell-edit-validators/PatternValidator.js +23 -0
  7. package/src/cell-edit-validators/index.js +2 -0
  8. package/src/cell-renderers/background-cell/BackgroundCell.css.js +103 -0
  9. package/src/cell-renderers/background-cell/BackgroundCell.js +76 -0
  10. package/src/cell-renderers/background-cell/BackgroundCellConfigurationEditor.css.js +9 -0
  11. package/src/cell-renderers/background-cell/BackgroundCellConfigurationEditor.js +71 -0
  12. package/src/cell-renderers/background-cell/BackgroundKeyframes.css.js +187 -0
  13. package/src/cell-renderers/background-cell/index.js +2 -0
  14. package/src/cell-renderers/background-cell/useDirection.js +25 -0
  15. package/src/cell-renderers/button-cell/IconButtonCell.css.js +23 -0
  16. package/src/cell-renderers/button-cell/IconButtonCell.js +33 -0
  17. package/src/cell-renderers/dropdown-cell/DropdownCell.css.js +36 -0
  18. package/src/cell-renderers/dropdown-cell/DropdownCell.js +84 -0
  19. package/src/cell-renderers/dropdown-cell/index.js +1 -0
  20. package/src/cell-renderers/index.js +6 -0
  21. package/src/cell-renderers/lookup-cell/LookupCell.js +15 -0
  22. package/src/cell-renderers/lookup-cell/index.js +1 -0
  23. package/src/cell-renderers/pct-progress-cell/PctProgressCell.css.js +31 -0
  24. package/src/cell-renderers/pct-progress-cell/PctProgressCell.js +49 -0
  25. package/src/cell-renderers/pct-progress-cell/index.js +1 -0
  26. package/src/cell-renderers/progress-cell/ProgressCell.css.js +43 -0
  27. package/src/cell-renderers/progress-cell/ProgressCell.js +74 -0
  28. package/src/cell-renderers/progress-cell/index.js +1 -0
  29. package/src/column-expression-input/ColumnExpressionInput.css.js +94 -0
  30. package/src/column-expression-input/ColumnExpressionInput.js +28 -0
  31. package/src/column-expression-input/column-function-descriptors.js +281 -0
  32. package/src/column-expression-input/column-language-parser/ColumnExpressionLanguage.js +18 -0
  33. package/src/column-expression-input/column-language-parser/ColumnExpressionTreeWalker.js +381 -0
  34. package/src/column-expression-input/column-language-parser/column-expression-parse-utils.js +56 -0
  35. package/src/column-expression-input/column-language-parser/index.js +3 -0
  36. package/src/column-expression-input/functionDocInfo.js +24 -0
  37. package/src/column-expression-input/highlighting.js +18 -0
  38. package/src/column-expression-input/index.js +4 -0
  39. package/src/column-expression-input/theme.js +57 -0
  40. package/src/column-expression-input/useColumnAutoComplete.js +307 -0
  41. package/src/column-expression-input/useColumnExpressionEditor.js +133 -0
  42. package/src/column-expression-input/useColumnExpressionSuggestionProvider.js +211 -0
  43. package/src/column-formatting-settings/BaseNumericFormattingSettings.js +96 -0
  44. package/src/column-formatting-settings/ColumnFormattingPanel.js +112 -0
  45. package/src/column-formatting-settings/DateTimeFormattingSettings.js +116 -0
  46. package/src/column-formatting-settings/LongTypeFormattingSettings.css.js +11 -0
  47. package/src/column-formatting-settings/LongTypeFormattingSettings.js +54 -0
  48. package/src/column-formatting-settings/index.js +3 -0
  49. package/src/column-menu/ColumnMenu.css.js +25 -0
  50. package/src/column-menu/ColumnMenu.js +69 -0
  51. package/src/column-menu/column-action-types.js +0 -0
  52. package/src/column-menu/column-menu-utils.js +318 -0
  53. package/src/column-menu/useColumnActions.js +77 -0
  54. package/src/column-picker/ColumnModel.js +113 -0
  55. package/src/column-picker/ColumnPicker.css.js +96 -0
  56. package/src/column-picker/ColumnPicker.js +204 -0
  57. package/src/column-picker/ColumnPickerAction.js +24 -0
  58. package/src/column-picker/useColumnPicker.js +42 -0
  59. package/src/column-picker/useTableColumnPicker.js +27 -0
  60. package/src/column-picker/useTableColumnPickerDeprecated.js +87 -0
  61. package/src/column-settings-panel/ColumnNameLabel.css.js +18 -0
  62. package/src/column-settings-panel/ColumnNameLabel.js +54 -0
  63. package/src/column-settings-panel/ColumnSettingsPanel.css.js +70 -0
  64. package/src/column-settings-panel/ColumnSettingsPanel.js +173 -0
  65. package/src/column-settings-panel/useColumnSettings.js +205 -0
  66. package/src/csv-upload/CsvUpload.css.js +28 -0
  67. package/src/csv-upload/CsvUpload.js +95 -0
  68. package/src/csv-upload/index.js +7 -0
  69. package/src/csv-upload/parse/csv-constants.js +3 -0
  70. package/src/csv-upload/parse/csv-errors.js +54 -0
  71. package/src/csv-upload/parse/csv-parse.js +79 -0
  72. package/src/csv-upload/parse/csv-schema-validation.js +45 -0
  73. package/src/csv-upload/parse/csv-upload-utils.js +59 -0
  74. package/src/csv-upload/parse/index.js +5 -0
  75. package/src/csv-upload/useCsvUpload.js +260 -0
  76. package/src/csv-upload/useCsvUploadSessionPreview.js +70 -0
  77. package/src/datasource-stats/DatasourceStats.css.js +56 -0
  78. package/src/datasource-stats/DatasourceStats.js +89 -0
  79. package/src/datasource-stats/useDatasourceStats.js +48 -0
  80. package/src/freeze-control/FreezeControl.css.js +108 -0
  81. package/src/freeze-control/FreezeControl.js +96 -0
  82. package/src/freeze-control/FrozenBanner.css.js +16 -0
  83. package/src/freeze-control/FrozenBanner.js +48 -0
  84. package/src/freeze-control/freezeControlBadge.js +9 -0
  85. package/src/freeze-control/useFreezeControl.js +68 -0
  86. package/src/index.js +22 -0
  87. package/src/tabbed-table-config-panel/TabbedTableConfigPanel.css.js +23 -0
  88. package/src/tabbed-table-config-panel/TabbedTableConfigPanel.js +99 -0
  89. package/src/tabbed-table-config-panel/TabbedTableSettingsAction.js +28 -0
  90. package/src/tabbed-table-config-panel/useTabbedTableConfigPanel.js +29 -0
  91. package/src/table-footer/TableFooter.css.js +22 -0
  92. package/src/table-footer/TableFooter.js +30 -0
  93. package/src/table-provider/TableProvider.js +33 -0
  94. package/src/table-settings-panel/TableSettingsPanel.css.js +70 -0
  95. package/src/table-settings-panel/TableSettingsPanel.js +128 -0
  96. package/src/table-settings-panel/useTableSettings.js +50 -0
@@ -0,0 +1,204 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { useComponentCssInjection } from "@salt-ds/styles";
3
+ import { useWindow } from "@salt-ds/window";
4
+ import { DragDropProvider, getColumnLabel, isCalculatedColumn, useSortable } from "@vuu-ui/vuu-utils";
5
+ import clsx from "clsx";
6
+ import { forwardRef, useCallback, useMemo, useRef } from "react";
7
+ import { Button, Input, ListBox, Option } from "@salt-ds/core";
8
+ import { applyHighlighting } from "@vuu-ui/vuu-table";
9
+ import { Icon, IconButton } from "@vuu-ui/vuu-ui-controls";
10
+ import { ColumnChangeSource } from "./ColumnModel.js";
11
+ import { useColumnPicker } from "./useColumnPicker.js";
12
+ import ColumnPicker_0 from "./ColumnPicker.css";
13
+ const classBase = "vuuColumnPicker";
14
+ const classBaseListItem = "vuuColumnPickerListItem";
15
+ const searchIcon = /*#__PURE__*/ jsx("span", {
16
+ "data-icon": "search"
17
+ });
18
+ const NO_SELECTION = [];
19
+ const useSorting = (id, index)=>{
20
+ const { handleRef: sortableHandleRef, ref: sortableRef } = useSortable({
21
+ id,
22
+ index
23
+ });
24
+ const [handleRef, ref] = useMemo(()=>[
25
+ sortableHandleRef,
26
+ sortableRef
27
+ ], [
28
+ sortableHandleRef,
29
+ sortableRef
30
+ ]);
31
+ return {
32
+ handleRef,
33
+ ref
34
+ };
35
+ };
36
+ const SelectedColumnListItem = ({ className: classNameProp, index, column, onRemove, searchPattern = "", ...optionProps })=>{
37
+ const { handleRef, ref } = useSorting(column.name, index);
38
+ const value = getColumnLabel(column);
39
+ const valueWithHighlighting = applyHighlighting(value, searchPattern);
40
+ const handleRemoveButtonClick = useCallback((e)=>{
41
+ e.stopPropagation();
42
+ onRemove?.(e);
43
+ }, [
44
+ onRemove
45
+ ]);
46
+ return /*#__PURE__*/ jsxs(Option, {
47
+ ...optionProps,
48
+ className: clsx(classNameProp, classBaseListItem),
49
+ "data-name": column.name,
50
+ ref: ref,
51
+ children: [
52
+ /*#__PURE__*/ jsx(IconButton, {
53
+ "data-embedded": true,
54
+ appearance: "transparent",
55
+ icon: "draggable",
56
+ ref: handleRef,
57
+ size: 16
58
+ }),
59
+ isCalculatedColumn(column.name) ? /*#__PURE__*/ jsx(Icon, {
60
+ className: "vuuCalculatedColumnIcon",
61
+ name: "function"
62
+ }) : null,
63
+ /*#__PURE__*/ jsx("span", {
64
+ className: `${classBase}-text`,
65
+ children: valueWithHighlighting
66
+ }),
67
+ /*#__PURE__*/ jsx(IconButton, {
68
+ className: `${classBaseListItem}-action`,
69
+ "data-embedded": true,
70
+ appearance: "transparent",
71
+ icon: "cross",
72
+ onClick: handleRemoveButtonClick,
73
+ size: 16
74
+ })
75
+ ]
76
+ });
77
+ };
78
+ const AvailableColumnListItem = ({ className: classNameProp, index, column: item, onAdd, searchPattern = "", ...optionProps })=>{
79
+ const value = getColumnLabel(item);
80
+ const valueWithHighlighting = applyHighlighting(value, searchPattern);
81
+ return /*#__PURE__*/ jsxs(Option, {
82
+ ...optionProps,
83
+ className: clsx(classNameProp, classBaseListItem),
84
+ "data-name": item.name,
85
+ children: [
86
+ /*#__PURE__*/ jsx("span", {
87
+ className: `${classBase}-text`,
88
+ children: valueWithHighlighting
89
+ }),
90
+ /*#__PURE__*/ jsx(IconButton, {
91
+ className: `${classBaseListItem}-action`,
92
+ "data-embedded": true,
93
+ appearance: "transparent",
94
+ icon: "plus",
95
+ onClick: onAdd,
96
+ size: 16
97
+ })
98
+ ]
99
+ });
100
+ };
101
+ const ColumnPicker_ColumnPicker = /*#__PURE__*/ forwardRef(function({ allowCreateCalculatedColumn, columnModel, className, onClickCreateCalculatedColumn, onSelectionChange, selected = NO_SELECTION, ...htmlAttributes }, forwardedRef) {
102
+ const targetWindow = useWindow();
103
+ useComponentCssInjection({
104
+ testId: "vuu-column-picker",
105
+ css: ColumnPicker_0,
106
+ window: targetWindow
107
+ });
108
+ const searchCallbackRef = useCallback((el)=>{
109
+ setTimeout(()=>{
110
+ el?.querySelector("input")?.focus();
111
+ }, 100);
112
+ }, []);
113
+ const { availableColumns, onAddItemToSelectedList, onChangeSearchInput, onRemoveItemFromSelectedList, searchText, selectedColumns } = useColumnPicker({
114
+ columnModel: columnModel
115
+ });
116
+ const listRef = useRef(null);
117
+ const getOptionName = (option)=>{
118
+ if (option) {
119
+ const { name } = option.dataset;
120
+ if (name) return name;
121
+ }
122
+ throw Error("[ColumnPicker] list option has no data-name");
123
+ };
124
+ const handleDragEnd = useCallback(()=>{
125
+ setTimeout(()=>{
126
+ const listItems = listRef.current?.querySelectorAll(".saltOption");
127
+ if (listItems) {
128
+ const orderedColumnNames = Array.from(listItems).map(getOptionName);
129
+ columnModel.reorderSelectedColumns(orderedColumnNames, ColumnChangeSource.ColumnPicker);
130
+ }
131
+ }, 300);
132
+ }, [
133
+ columnModel
134
+ ]);
135
+ const oneOrMoreColumnsIsCalculated = selectedColumns.some((column)=>isCalculatedColumn(column.name));
136
+ return /*#__PURE__*/ jsxs("div", {
137
+ ...htmlAttributes,
138
+ className: clsx(classBase, className, {
139
+ [`${classBase}-withCalculated`]: oneOrMoreColumnsIsCalculated
140
+ }),
141
+ ref: forwardedRef,
142
+ children: [
143
+ /*#__PURE__*/ jsx("form", {
144
+ className: `${classBase}-search`,
145
+ role: "search",
146
+ children: /*#__PURE__*/ jsx(Input, {
147
+ startAdornment: searchIcon,
148
+ placeholder: "Find column",
149
+ ref: searchCallbackRef,
150
+ value: searchText,
151
+ onChange: onChangeSearchInput
152
+ })
153
+ }),
154
+ /*#__PURE__*/ jsxs("div", {
155
+ className: `${classBase}-scrollContainer vuuScrollable`,
156
+ children: [
157
+ /*#__PURE__*/ jsx("div", {
158
+ className: `${classBase}-sectionHeader`,
159
+ children: "Columns in view"
160
+ }),
161
+ /*#__PURE__*/ jsx(DragDropProvider, {
162
+ onDragEnd: handleDragEnd,
163
+ children: /*#__PURE__*/ jsx(ListBox, {
164
+ className: `${classBase}-selectedList`,
165
+ onSelectionChange: onSelectionChange,
166
+ ref: listRef,
167
+ selected: selected,
168
+ children: selectedColumns.map((column, index)=>/*#__PURE__*/ jsx(SelectedColumnListItem, {
169
+ column: column,
170
+ index: index,
171
+ onRemove: onRemoveItemFromSelectedList,
172
+ searchPattern: searchText.toLowerCase(),
173
+ value: column
174
+ }, column.name))
175
+ })
176
+ }),
177
+ /*#__PURE__*/ jsx("div", {
178
+ className: clsx(`${classBase}-sectionHeader`, `${classBase}-availableHeader`),
179
+ children: "Available columns"
180
+ }),
181
+ /*#__PURE__*/ jsx(ListBox, {
182
+ className: `${classBase}-availableList`,
183
+ selected: NO_SELECTION,
184
+ children: availableColumns.map((column, index)=>/*#__PURE__*/ jsx(AvailableColumnListItem, {
185
+ column: column,
186
+ index: index,
187
+ onAdd: onAddItemToSelectedList,
188
+ searchPattern: searchText.toLowerCase(),
189
+ value: column
190
+ }, column.name))
191
+ })
192
+ ]
193
+ }),
194
+ allowCreateCalculatedColumn ? /*#__PURE__*/ jsx("div", {
195
+ className: `${classBase}-column-buttons`,
196
+ children: /*#__PURE__*/ jsx(Button, {
197
+ onClick: onClickCreateCalculatedColumn,
198
+ children: "Create calculated column"
199
+ })
200
+ }) : null
201
+ ]
202
+ });
203
+ });
204
+ export { ColumnPicker_ColumnPicker as ColumnPicker, classBaseListItem };
@@ -0,0 +1,24 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { IconButton } from "@vuu-ui/vuu-ui-controls";
3
+ import { useCallback } from "react";
4
+ import { useTableColumnPicker } from "./useTableColumnPicker.js";
5
+ const ColumnPickerAction = ({ appearance = "transparent", columnModel, icon = "settings", sentiment = "neutral", ...IconButtonProps })=>{
6
+ const { showColumnPicker } = useTableColumnPicker({
7
+ columnModel
8
+ });
9
+ const handleClick = useCallback(()=>{
10
+ showColumnPicker();
11
+ }, [
12
+ showColumnPicker
13
+ ]);
14
+ return /*#__PURE__*/ jsx(IconButton, {
15
+ ...IconButtonProps,
16
+ appearance: appearance,
17
+ "data-action": "table-settings",
18
+ icon: icon,
19
+ onClick: handleClick,
20
+ sentiment: sentiment,
21
+ size: 20
22
+ });
23
+ };
24
+ export { ColumnPickerAction };
@@ -0,0 +1,42 @@
1
+ import { queryClosest } from "@vuu-ui/vuu-utils";
2
+ import { useCallback, useEffect, useState } from "react";
3
+ import { ColumnChangeSource } from "./ColumnModel.js";
4
+ const SOURCE = ColumnChangeSource.ColumnPicker;
5
+ const columnName = (target)=>{
6
+ const listItem = queryClosest(target, ".saltOption", true);
7
+ const { name } = listItem.dataset;
8
+ if (name) return name;
9
+ throw Error("[useColumnPicker] column name could not be identified, data-name attribute not found");
10
+ };
11
+ const useColumnPicker = ({ columnModel: model })=>{
12
+ const [, forceRender] = useState({});
13
+ useEffect(()=>{
14
+ model.on("render", forceRender);
15
+ return ()=>{
16
+ model.removeListener("render", forceRender);
17
+ };
18
+ }, [
19
+ model
20
+ ]);
21
+ const handleChangeSearchInput = useCallback((evt)=>{
22
+ const { value } = evt.target;
23
+ model.searchPattern = value;
24
+ }, [
25
+ model
26
+ ]);
27
+ const handleAddItemToSelectedList = useCallback((e)=>model.addItemToSelectedColumns(columnName(e.target), SOURCE), [
28
+ model
29
+ ]);
30
+ const handleRemoveItemFromSelectedList = useCallback((e)=>model.removeItemFromSelectedColumns(columnName(e.target), SOURCE), [
31
+ model
32
+ ]);
33
+ return {
34
+ availableColumns: model.availableColumns,
35
+ onAddItemToSelectedList: handleAddItemToSelectedList,
36
+ onRemoveItemFromSelectedList: handleRemoveItemFromSelectedList,
37
+ onChangeSearchInput: handleChangeSearchInput,
38
+ searchText: model.searchPattern,
39
+ selectedColumns: model.selectedColumns
40
+ };
41
+ };
42
+ export { useColumnPicker };
@@ -0,0 +1,27 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { useContextPanel, useHideContextPanel } from "@vuu-ui/vuu-ui-controls";
3
+ import { useCallback, useEffect, useRef } from "react";
4
+ import { ColumnPicker } from "./ColumnPicker.js";
5
+ const useTableColumnPicker = ({ columnModel })=>{
6
+ const showContextPanel = useContextPanel();
7
+ const hideContextPanel = useHideContextPanel();
8
+ const contextPanelShowing = useRef(false);
9
+ const showColumnPicker = useCallback((title = "Column Picker")=>{
10
+ contextPanelShowing.current = true;
11
+ showContextPanel(/*#__PURE__*/ jsx(ColumnPicker, {
12
+ columnModel: columnModel
13
+ }), title);
14
+ }, [
15
+ columnModel,
16
+ showContextPanel
17
+ ]);
18
+ useEffect(()=>()=>{
19
+ if (contextPanelShowing.current) hideContextPanel?.();
20
+ }, [
21
+ hideContextPanel
22
+ ]);
23
+ return {
24
+ showColumnPicker
25
+ };
26
+ };
27
+ export { useTableColumnPicker };
@@ -0,0 +1,87 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { ColumnChangeSource, ColumnModel, ColumnPicker, isColumnAdded, isColumnRemoved, isColumnsReordered } from "../index.js";
3
+ import { useContextPanel, useHideContextPanel } from "@vuu-ui/vuu-ui-controls";
4
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
5
+ const useTableColumnPickerDeprecated = ({ availableColumns, dataSource, onTableColumnChange, selectedColumns: initialSelectedColumns })=>{
6
+ const showContextPanel = useContextPanel();
7
+ const hideContextPanel = useHideContextPanel();
8
+ const contextPanelShowing = useRef(false);
9
+ const [selectedColumns, setSelectedColumns] = useState(initialSelectedColumns);
10
+ const columnModel = useMemo(()=>{
11
+ const available = availableColumns;
12
+ const selected = initialSelectedColumns;
13
+ return new ColumnModel(available, selected);
14
+ }, [
15
+ initialSelectedColumns,
16
+ availableColumns
17
+ ]);
18
+ const handleTableConfigChange = useCallback((_config, configChangeType)=>{
19
+ if (configChangeType?.type === "column-removed") {
20
+ columnModel.removeItemFromSelectedColumns(configChangeType.column.name, ColumnChangeSource.Table);
21
+ const idx = dataSource.columns.findIndex((col)=>col === configChangeType?.column.name);
22
+ if (idx >= 0) dataSource.columns = dataSource.columns.toSpliced(idx, 1);
23
+ setSelectedColumns((columns)=>columns.filter((col)=>col.name !== configChangeType.column.name));
24
+ }
25
+ }, [
26
+ columnModel,
27
+ dataSource
28
+ ]);
29
+ const handleChangeTableColumns = useCallback((columns, changeSource, changeDescriptor)=>{
30
+ if (changeSource === ColumnChangeSource.ColumnPicker) {
31
+ if (isColumnAdded(changeDescriptor)) dataSource.columns = dataSource.columns.concat(changeDescriptor.column.name);
32
+ if (isColumnRemoved(changeDescriptor)) {
33
+ const idx = dataSource.columns.findIndex((col)=>col === changeDescriptor?.column.name);
34
+ if (idx >= 0) dataSource.columns = dataSource.columns.toSpliced(idx, 1);
35
+ }
36
+ setSelectedColumns((columns)=>{
37
+ const getNewColumns = ()=>{
38
+ if (isColumnAdded(changeDescriptor)) return columns.concat(changeDescriptor.column);
39
+ if (isColumnRemoved(changeDescriptor)) return columns.filter((col)=>col.name !== changeDescriptor.column.name);
40
+ if (isColumnsReordered(changeDescriptor)) {
41
+ const unMatched = columns.filter((configColumn)=>!columns.some((col)=>col.name === configColumn.name));
42
+ return [
43
+ ...columns,
44
+ ...unMatched
45
+ ];
46
+ }
47
+ return columns;
48
+ };
49
+ const newColumns = getNewColumns();
50
+ onTableColumnChange?.(newColumns, changeDescriptor);
51
+ return newColumns;
52
+ });
53
+ }
54
+ }, [
55
+ dataSource,
56
+ onTableColumnChange
57
+ ]);
58
+ useEffect(()=>{
59
+ columnModel.on("change", handleChangeTableColumns);
60
+ return ()=>{
61
+ columnModel.removeListener("change", handleChangeTableColumns);
62
+ };
63
+ }, [
64
+ columnModel,
65
+ handleChangeTableColumns
66
+ ]);
67
+ const showColumnPicker = useCallback((title = "Column Picker")=>{
68
+ contextPanelShowing.current = true;
69
+ showContextPanel(/*#__PURE__*/ jsx(ColumnPicker, {
70
+ columnModel: columnModel
71
+ }), title);
72
+ }, [
73
+ columnModel,
74
+ showContextPanel
75
+ ]);
76
+ useEffect(()=>()=>{
77
+ if (contextPanelShowing.current) hideContextPanel?.();
78
+ }, [
79
+ hideContextPanel
80
+ ]);
81
+ return {
82
+ onTableConfigChange: handleTableConfigChange,
83
+ showColumnPicker,
84
+ selectedColumns
85
+ };
86
+ };
87
+ export { useTableColumnPickerDeprecated };
@@ -0,0 +1,18 @@
1
+ const css = `
2
+ .vuuColumnNameLabel-calculated {
3
+ cursor: pointer;
4
+ gap: 2px;
5
+ display: flex;
6
+ }
7
+
8
+ .vuuColumnNameLabel-edit {
9
+ margin-left: auto;
10
+ }
11
+
12
+ .vuuColumnNameLabel-placeholder {
13
+ color: var(--vuu-color-gray-35);
14
+ }
15
+
16
+
17
+ `;
18
+ export default css;
@@ -0,0 +1,54 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import clsx from "clsx";
3
+ import { useComponentCssInjection } from "@salt-ds/styles";
4
+ import { useWindow } from "@salt-ds/window";
5
+ import { getCalculatedColumnDetails, isCalculatedColumn } from "@vuu-ui/vuu-utils";
6
+ import ColumnNameLabel from "./ColumnNameLabel.css";
7
+ const classBase = "vuuColumnNameLabel";
8
+ const ColumnNameLabel_ColumnNameLabel = ({ column, onClick })=>{
9
+ const targetWindow = useWindow();
10
+ useComponentCssInjection({
11
+ testId: "vuu-column-label",
12
+ css: ColumnNameLabel,
13
+ window: targetWindow
14
+ });
15
+ if (!isCalculatedColumn(column.name)) return /*#__PURE__*/ jsx("div", {
16
+ className: classBase,
17
+ children: column.name
18
+ });
19
+ {
20
+ const { name, serverDataType, expression } = getCalculatedColumnDetails(column);
21
+ const displayName = name || "name";
22
+ const displayExpression = "=expression";
23
+ const nameClass = "name" === displayName ? `${classBase}-placeholder` : void 0;
24
+ const expressionClass = "" === expression ? `${classBase}-placeholder` : void 0;
25
+ return /*#__PURE__*/ jsxs("div", {
26
+ className: clsx(classBase, `${classBase}-calculated`),
27
+ onClick: onClick,
28
+ children: [
29
+ /*#__PURE__*/ jsx("span", {
30
+ className: nameClass,
31
+ children: displayName
32
+ }),
33
+ /*#__PURE__*/ jsx("span", {
34
+ children: ":"
35
+ }),
36
+ /*#__PURE__*/ jsx("span", {
37
+ children: serverDataType || "string"
38
+ }),
39
+ /*#__PURE__*/ jsx("span", {
40
+ children: ":"
41
+ }),
42
+ /*#__PURE__*/ jsx("span", {
43
+ className: expressionClass,
44
+ children: displayExpression
45
+ }),
46
+ /*#__PURE__*/ jsx("span", {
47
+ className: `${classBase}-edit`,
48
+ "data-icon": "edit"
49
+ })
50
+ ]
51
+ });
52
+ }
53
+ };
54
+ export { ColumnNameLabel_ColumnNameLabel as ColumnNameLabel };
@@ -0,0 +1,70 @@
1
+ const css = `
2
+ .vuuColumnSettingsPanel {
3
+ --vuu-svg-align-left: url("data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\"><path d=\"M9.33333 10H2.66667C2.3 10 2 10.3 2 10.6667C2 11.0333 2.3 11.3333 2.66667 11.3333H9.33333C9.7 11.3333 10 11.0333 10 10.6667C10 10.3 9.7 10 9.33333 10ZM9.33333 4.66667H2.66667C2.3 4.66667 2 4.96667 2 5.33333C2 5.7 2.3 6 2.66667 6H9.33333C9.7 6 10 5.7 10 5.33333C10 4.96667 9.7 4.66667 9.33333 4.66667ZM2.66667 8.66667H13.3333C13.7 8.66667 14 8.36667 14 8C14 7.63333 13.7 7.33333 13.3333 7.33333H2.66667C2.3 7.33333 2 7.63333 2 8C2 8.36667 2.3 8.66667 2.66667 8.66667ZM2.66667 14H13.3333C13.7 14 14 13.7 14 13.3333C14 12.9667 13.7 12.6667 13.3333 12.6667H2.66667C2.3 12.6667 2 12.9667 2 13.3333C2 13.7 2.3 14 2.66667 14ZM2 2.66667C2 3.03333 2.3 3.33333 2.66667 3.33333H13.3333C13.7 3.33333 14 3.03333 14 2.66667C14 2.3 13.7 2 13.3333 2H2.66667C2.3 2 2 2.3 2 2.66667Z\" /></svg>");
4
+ --vuu-svg-align-right: url("data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\"><path d=\"M2.66667 14H13.3333C13.7 14 14 13.7 14 13.3333C14 12.9667 13.7 12.6667 13.3333 12.6667H2.66667C2.3 12.6667 2 12.9667 2 13.3333C2 13.7 2.3 14 2.66667 14ZM6.66667 11.3333H13.3333C13.7 11.3333 14 11.0333 14 10.6667C14 10.3 13.7 10 13.3333 10H6.66667C6.3 10 6 10.3 6 10.6667C6 11.0333 6.3 11.3333 6.66667 11.3333ZM2.66667 8.66667H13.3333C13.7 8.66667 14 8.36667 14 8C14 7.63333 13.7 7.33333 13.3333 7.33333H2.66667C2.3 7.33333 2 7.63333 2 8C2 8.36667 2.3 8.66667 2.66667 8.66667ZM6.66667 6H13.3333C13.7 6 14 5.7 14 5.33333C14 4.96667 13.7 4.66667 13.3333 4.66667H6.66667C6.3 4.66667 6 4.96667 6 5.33333C6 5.7 6.3 6 6.66667 6ZM2 2.66667C2 3.03333 2.3 3.33333 2.66667 3.33333H13.3333C13.7 3.33333 14 3.03333 14 2.66667C14 2.3 13.7 2 13.3333 2H2.66667C2.3 2 2 2.3 2 2.66667Z\" /></svg>");
5
+ --vuu-svg-pin-left: url("data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\"><path d=\"M7.33333 9.86V8.66666H13.3333C13.7 8.66666 14 8.36666 14 8C14 7.63333 13.7 7.33333 13.3333 7.33333L7.33333 7.33333V6.14C7.33333 5.84 6.97333 5.69333 6.76667 5.90666L4.90667 7.76666C4.77333 7.89999 4.77333 8.10666 4.90667 8.24L6.76667 10.1C6.97333 10.3067 7.33333 10.16 7.33333 9.86ZM2.66667 13.3333C3.03333 13.3333 3.33333 13.0333 3.33333 12.6667L3.33333 3.33333C3.33333 2.96666 3.03333 2.66666 2.66667 2.66666C2.3 2.66666 2 2.96666 2 3.33333L2 12.6667C2 13.0333 2.3 13.3333 2.66667 13.3333Z\" /></svg>");
6
+ --vuu-svg-pin-float: url("data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\"><path d=\"M6 4.66667H4.66667V6H6V4.66667ZM6 7.33333H4.66667V8.66667H6V7.33333ZM6 2C5.26 2 4.66667 2.6 4.66667 3.33333H6V2ZM8.66667 10H7.33333V11.3333H8.66667V10ZM12.6667 2V3.33333H14C14 2.6 13.4 2 12.6667 2ZM8.66667 2H7.33333V3.33333H8.66667V2ZM6 11.3333V10H4.66667C4.66667 10.7333 5.26 11.3333 6 11.3333ZM12.6667 8.66667H14V7.33333H12.6667V8.66667ZM12.6667 6H14V4.66667H12.6667V6ZM12.6667 11.3333C13.4 11.3333 14 10.7333 14 10H12.6667V11.3333ZM2.66667 4.66667C2.3 4.66667 2 4.96667 2 5.33333V12.6667C2 13.4 2.6 14 3.33333 14H10.6667C11.0333 14 11.3333 13.7 11.3333 13.3333C11.3333 12.9667 11.0333 12.6667 10.6667 12.6667H4C3.63333 12.6667 3.33333 12.3667 3.33333 12V5.33333C3.33333 4.96667 3.03333 4.66667 2.66667 4.66667ZM10 3.33333H11.3333V2H10V3.33333ZM10 11.3333H11.3333V10H10V11.3333Z\" /></svg>");
7
+ --vuu-svg-pin-right: url("data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\"><path d=\"M8.66667 6.14V7.33333H2.66667C2.3 7.33333 2 7.63333 2 8C2 8.36666 2.3 8.66666 2.66667 8.66666H8.66667V9.86C8.66667 10.16 9.02667 10.3067 9.23333 10.0933L11.0933 8.23333C11.2267 8.1 11.2267 7.89333 11.0933 7.76L9.23333 5.9C9.02667 5.69333 8.66667 5.84 8.66667 6.14ZM13.3333 13.3333C13.7 13.3333 14 13.0333 14 12.6667V3.33333C14 2.96666 13.7 2.66666 13.3333 2.66666C12.9667 2.66666 12.6667 2.96666 12.6667 3.33333V12.6667C12.6667 13.0333 12.9667 13.3333 13.3333 13.3333Z\"/></svg>");
8
+ --vuuDropdown-height: 24px;
9
+ --vuuDropdown-width: 100%;
10
+ flex-direction: column;
11
+ gap: 24px;
12
+ height: 100%;
13
+ display: flex;
14
+ }
15
+
16
+ .vuuColumnSettingsPanel-header {
17
+ padding: 24px 2px 0;
18
+ font-size: 14px;
19
+ font-weight: 600;
20
+ }
21
+
22
+ .vuuColumnSettingsPanel-buttonBar {
23
+ justify-content: space-between;
24
+ align-items: center;
25
+ margin-top: auto;
26
+ display: flex;
27
+ }
28
+
29
+ .vuuColumnSettingsPanel-buttonBar[data-align="right"] {
30
+ justify-content: flex-end;
31
+ gap: 6px;
32
+ }
33
+
34
+ .vuuColumnSettingsPanel-buttonNavPrev {
35
+ --vuu-icon-left: 6px;
36
+ padding-left: 24px;
37
+ }
38
+
39
+ .vuuColumnSettingsPanel-buttonNavNext {
40
+ --vuu-icon-left: calc(100% - 18px);
41
+ padding-right: 24px;
42
+ }
43
+
44
+ [data-icon="align-left"] {
45
+ --vuu-icon-svg: var(--vuu-svg-align-left);
46
+ }
47
+
48
+ [data-icon="align-right"] {
49
+ --vuu-icon-svg: var(--vuu-svg-align-right);
50
+ }
51
+
52
+ [data-icon="pin-left"] {
53
+ --vuu-icon-svg: var(--vuu-svg-pin-left);
54
+ }
55
+
56
+ [data-icon="pin-float"] {
57
+ --vuu-icon-svg: var(--vuu-svg-pin-float);
58
+ }
59
+
60
+ [data-icon="pin-right"] {
61
+ --vuu-icon-svg: var(--vuu-svg-pin-right);
62
+ }
63
+
64
+ .vuuColumnSettingsPanel-editing .vuuColumnNameLabel-edit {
65
+ display: none;
66
+ }
67
+
68
+
69
+ `;
70
+ export default css;