@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,70 @@
1
+ const css = `
2
+ .vuuTableSettingsPanel {
3
+ --vuuScrollable-size: 6px;
4
+ --vuu-svg-text-strikethrough: url("data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 48 24\"><path d=\"M28.3333 9.33334C28.8867 9.33334 29.3333 8.88668 29.3333 8.33334C29.3333 7.78001 28.8867 7.33334 28.3333 7.33334H20.26L22.26 9.33334H23.48L23.1133 10.1867L24.5067 11.58L25.4733 9.33334H28.3333ZM27.6267 16.5867L18.7467 7.70668C18.4867 7.44668 18.0667 7.44668 17.8067 7.70668C17.5467 7.96668 17.5467 8.38668 17.8067 8.64668L21.98 12.82L20.88 15.38C20.62 15.9933 21.0667 16.6667 21.7267 16.6667C22.0933 16.6667 22.4267 16.4467 22.5733 16.1067L23.38 14.22L26.68 17.52C26.94 17.78 27.36 17.78 27.62 17.52C27.8867 17.2667 27.8867 16.8467 27.6267 16.5867Z\"/></svg>");
5
+ --vuu-svg-text-Tt: url("data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 48 24\"><path d=\"M17.6667 7.66666C17.6667 8.21999 18.1133 8.66666 18.6667 8.66666H21V15.6667C21 16.22 21.4467 16.6667 22 16.6667C22.5533 16.6667 23 16.22 23 15.6667V8.66666H25.3333C25.8867 8.66666 26.3333 8.21999 26.3333 7.66666C26.3333 7.11332 25.8867 6.66666 25.3333 6.66666H18.6667C18.1133 6.66666 17.6667 7.11332 17.6667 7.66666ZM29.3333 9.99999H25.3333C24.78 9.99999 24.3333 10.4467 24.3333 11C24.3333 11.5533 24.78 12 25.3333 12H26.3333V15.6667C26.3333 16.22 26.78 16.6667 27.3333 16.6667C27.8867 16.6667 28.3333 16.22 28.3333 15.6667V12H29.3333C29.8867 12 30.3333 11.5533 30.3333 11C30.3333 10.4467 29.8867 9.99999 29.3333 9.99999Z\" /></svg>");
6
+ --vuu-svg-text-T: url("data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 48 24\"><path d=\"M19.3333 7.66666C19.3333 8.21999 19.78 8.66666 20.3333 8.66666H23V15.6667C23 16.22 23.4467 16.6667 24 16.6667C24.5533 16.6667 25 16.22 25 15.6667V8.66666H27.6667C28.22 8.66666 28.6667 8.21999 28.6667 7.66666C28.6667 7.11332 28.22 6.66666 27.6667 6.66666H20.3333C19.78 6.66666 19.3333 7.11332 19.3333 7.66666Z\"/></svg>");
7
+ --vuu-svg-stripes: url("data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\"><rect x=\"2\" y=\"2\" width=\"12\" height=\"2\" rx=\"0.3\"/><rect x=\"2\" y=\"5\" width=\"12\" height=\"2\" rx=\"0.3\"/><rect x=\"2\" y=\"8\" width=\"12\" height=\"2\" rx=\"0.3\"/><rect x=\"2\" y=\"11\" width=\"12\" height=\"2\" rx=\"0.3\"/></svg>");
8
+ --vuu-svg-row-lines: url("data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\"><rect x=\"2\" y=\"3\" width=\"12\" height=\"1\" rx=\"0.3\" /><rect x=\"2\" y=\"6\" width=\"12\" height=\"1\" rx=\"0.3\" /><rect x=\"2\" y=\"9\" width=\"12\" height=\"1\" rx=\"0.3\" /><rect x=\"2\" y=\"12\" width=\"12\" height=\"1\" rx=\"0.3\"/></svg>");
9
+ --vuu-svg-col-lines: url("data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\"><rect x=\"3\" y=\"14\" width=\"12\" height=\"1\" rx=\"0.3\" transform=\"rotate%28-90 3 14%29\"/><rect x=\"6\" y=\"14\" width=\"12\" height=\"1\" rx=\"0.3\" transform=\"rotate%28-90 6 14%29\"/><rect x=\"9\" y=\"14\" width=\"12\" height=\"1\" rx=\"0.3\" transform=\"rotate%28-90 9 14%29\"/><rect x=\"12\" y=\"14\" width=\"12\" height=\"1\" rx=\"0.3\" transform=\"rotate%28-90 12 14%29\"/></svg>");
10
+ max-width: 254px;
11
+ height: 100%;
12
+ padding: 12px 2px var(--salt-spacing-200) 2px;
13
+ flex-direction: column;
14
+ gap: 24px;
15
+ display: flex;
16
+ }
17
+
18
+ .vuuTableSettingsPanel [data-icon="text-strikethrough"] {
19
+ --vuu-icon-svg: var(--vuu-svg-text-strikethrough);
20
+ }
21
+
22
+ .vuuTableSettingsPanel [data-icon="text-Tt"] {
23
+ --vuu-icon-svg: var(--vuu-svg-text-Tt);
24
+ }
25
+
26
+ .vuuTableSettingsPanel [data-icon="text-T"] {
27
+ --vuu-icon-svg: var(--vuu-svg-text-T);
28
+ }
29
+
30
+ .vuuTableSettingsPanel [data-icon="col-lines"] {
31
+ --vuu-icon-svg: var(--vuu-svg-col-lines);
32
+ }
33
+
34
+ .vuuTableSettingsPanel [data-icon="row-lines"] {
35
+ --vuu-icon-svg: var(--vuu-svg-row-lines);
36
+ }
37
+
38
+ .vuuTableSettingsPanel [data-icon="row-striping"] {
39
+ --vuu-icon-svg: var(--vuu-svg-stripes);
40
+ }
41
+
42
+ .vuuTableSettingsPanel-header {
43
+ padding-top: 24px;
44
+ font-size: 14px;
45
+ font-weight: 600;
46
+ }
47
+
48
+ .vuuTableSettingsPanel-columnListContainer {
49
+ flex: 1 1 0;
50
+ position: relative;
51
+ overflow: auto;
52
+
53
+ & .vuuColumnList {
54
+ height: 100%;
55
+ }
56
+ }
57
+
58
+ .vuuTableSettingsPanel-calculatedButtonbar {
59
+ --vuu-icon-size: 16px;
60
+ --saltButton-height: 24px;
61
+ --saltButton-width: 24px;
62
+ flex: 0 0 32px;
63
+ align-items: center;
64
+ gap: 12px;
65
+ display: flex;
66
+ }
67
+
68
+
69
+ `;
70
+ export default css;
@@ -0,0 +1,128 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { FormField, FormFieldLabel, ToggleButton, ToggleButtonGroup } from "@salt-ds/core";
3
+ import { useComponentCssInjection } from "@salt-ds/styles";
4
+ import { useWindow } from "@salt-ds/window";
5
+ import { useTableSettings } from "./useTableSettings.js";
6
+ import { Icon, VuuInput } from "@vuu-ui/vuu-ui-controls";
7
+ import TableSettingsPanel from "./TableSettingsPanel.css";
8
+ const classBase = "vuuTableSettingsPanel";
9
+ const defaultTableSettingsPermissions = {
10
+ allowColumnLabelCase: true,
11
+ allowColumnDefaultWidth: true,
12
+ allowGridSeparators: true
13
+ };
14
+ const noTableSettingsPermissions = {
15
+ allowColumnLabelCase: false,
16
+ allowColumnDefaultWidth: false,
17
+ allowGridSeparators: false
18
+ };
19
+ const TableSettingsPanel_TableSettingsPanel = ({ onDisplayAttributeChange, tableDisplayAttributes: tableDisplayAttributesProp, permissions: permissionsProp })=>{
20
+ const targetWindow = useWindow();
21
+ useComponentCssInjection({
22
+ testId: "vuu-table-settings-panel",
23
+ css: TableSettingsPanel,
24
+ window: targetWindow
25
+ });
26
+ const permissions = void 0 === permissionsProp || true === permissionsProp ? defaultTableSettingsPermissions : false === permissionsProp ? noTableSettingsPermissions : permissionsProp;
27
+ const { columnLabelsValue, onChangeColumnLabels, onChangeTableAttribute, onCommitColumnWidth, tableDisplayAttributes } = useTableSettings({
28
+ onDisplayAttributeChange,
29
+ tableDisplayAttributes: tableDisplayAttributesProp
30
+ });
31
+ const { allowColumnLabelCase = true, allowColumnDefaultWidth = true, allowGridSeparators = true } = permissions;
32
+ return /*#__PURE__*/ jsxs("div", {
33
+ className: classBase,
34
+ children: [
35
+ allowColumnDefaultWidth ? /*#__PURE__*/ jsxs(FormField, {
36
+ children: [
37
+ /*#__PURE__*/ jsx(FormFieldLabel, {
38
+ children: "Column Width"
39
+ }),
40
+ /*#__PURE__*/ jsx(VuuInput, {
41
+ bordered: true,
42
+ className: "vuuInput",
43
+ "data-embedded": true,
44
+ onCommit: onCommitColumnWidth
45
+ })
46
+ ]
47
+ }) : null,
48
+ allowColumnLabelCase ? /*#__PURE__*/ jsxs(FormField, {
49
+ children: [
50
+ /*#__PURE__*/ jsx(FormFieldLabel, {
51
+ children: "Column Labels"
52
+ }),
53
+ /*#__PURE__*/ jsxs(ToggleButtonGroup, {
54
+ className: "vuuToggleButtonGroup",
55
+ onChange: onChangeColumnLabels,
56
+ value: columnLabelsValue,
57
+ children: [
58
+ /*#__PURE__*/ jsx(ToggleButton, {
59
+ className: "vuuIconToggleButton",
60
+ value: 0,
61
+ children: /*#__PURE__*/ jsx(Icon, {
62
+ name: "text-strikethrough",
63
+ size: 48
64
+ })
65
+ }),
66
+ /*#__PURE__*/ jsx(ToggleButton, {
67
+ className: "vuuIconToggleButton",
68
+ value: 1,
69
+ children: /*#__PURE__*/ jsx(Icon, {
70
+ name: "text-Tt",
71
+ size: 48
72
+ })
73
+ }),
74
+ /*#__PURE__*/ jsx(ToggleButton, {
75
+ className: "vuuIconToggleButton",
76
+ value: 2,
77
+ children: /*#__PURE__*/ jsx(Icon, {
78
+ name: "text-T",
79
+ size: 48
80
+ })
81
+ })
82
+ ]
83
+ })
84
+ ]
85
+ }) : null,
86
+ allowGridSeparators ? /*#__PURE__*/ jsxs(FormField, {
87
+ children: [
88
+ /*#__PURE__*/ jsx(FormFieldLabel, {
89
+ children: "Grid separators"
90
+ }),
91
+ /*#__PURE__*/ jsxs("div", {
92
+ className: "saltToggleButtonGroup vuuStateButtonGroup saltToggleButtonGroup-horizontal",
93
+ children: [
94
+ /*#__PURE__*/ jsx(ToggleButton, {
95
+ selected: tableDisplayAttributes.zebraStripes ?? false,
96
+ onChange: onChangeTableAttribute,
97
+ value: "zebraStripes",
98
+ children: /*#__PURE__*/ jsx(Icon, {
99
+ name: "row-striping",
100
+ size: 16
101
+ })
102
+ }),
103
+ /*#__PURE__*/ jsx(ToggleButton, {
104
+ selected: tableDisplayAttributes.rowSeparators ?? false,
105
+ onChange: onChangeTableAttribute,
106
+ value: "rowSeparators",
107
+ children: /*#__PURE__*/ jsx(Icon, {
108
+ name: "row-lines",
109
+ size: 16
110
+ })
111
+ }),
112
+ /*#__PURE__*/ jsx(ToggleButton, {
113
+ selected: tableDisplayAttributes.columnSeparators ?? false,
114
+ onChange: onChangeTableAttribute,
115
+ value: "columnSeparators",
116
+ children: /*#__PURE__*/ jsx(Icon, {
117
+ name: "col-lines",
118
+ size: 16
119
+ })
120
+ })
121
+ ]
122
+ })
123
+ ]
124
+ }) : null
125
+ ]
126
+ });
127
+ };
128
+ export { TableSettingsPanel_TableSettingsPanel as TableSettingsPanel, defaultTableSettingsPermissions, noTableSettingsPermissions };
@@ -0,0 +1,50 @@
1
+ import { queryClosest, useLayoutEffectSkipFirst } from "@vuu-ui/vuu-utils";
2
+ import { useCallback, useState } from "react";
3
+ const useTableSettings = ({ onDisplayAttributeChange, tableDisplayAttributes: tableDisplayAttributesProp })=>{
4
+ const [tableDisplayAttributes, setDisplayTableAttributes] = useState(tableDisplayAttributesProp);
5
+ const handleChangeColumnLabels = useCallback((evt)=>{
6
+ const button = queryClosest(evt.target, "button");
7
+ if (button) {
8
+ const value = parseInt(button.value);
9
+ const columnFormatHeader = 0 === value ? void 0 : 1 === value ? "capitalize" : "uppercase";
10
+ setDisplayTableAttributes((state)=>({
11
+ ...state,
12
+ columnFormatHeader
13
+ }));
14
+ }
15
+ }, []);
16
+ const handleChangeTableAttribute = useCallback((evt)=>{
17
+ const button = queryClosest(evt.target, "button");
18
+ if (button) {
19
+ const { ariaPressed, value } = button;
20
+ setDisplayTableAttributes((state)=>({
21
+ ...state,
22
+ [value]: "true" !== ariaPressed
23
+ }));
24
+ }
25
+ }, []);
26
+ const handleCommitColumnWidth = useCallback((_, value)=>{
27
+ if ("string" == typeof value) {
28
+ const columnDefaultWidth = parseInt(value);
29
+ if (!isNaN(columnDefaultWidth)) setDisplayTableAttributes((state)=>({
30
+ ...state,
31
+ columnDefaultWidth
32
+ }));
33
+ }
34
+ }, []);
35
+ useLayoutEffectSkipFirst(()=>{
36
+ onDisplayAttributeChange?.(tableDisplayAttributes);
37
+ }, [
38
+ onDisplayAttributeChange,
39
+ tableDisplayAttributes
40
+ ]);
41
+ const columnLabelsValue = void 0 === tableDisplayAttributes.columnFormatHeader ? 0 : "capitalize" === tableDisplayAttributes.columnFormatHeader ? 1 : 2;
42
+ return {
43
+ columnLabelsValue,
44
+ onChangeColumnLabels: handleChangeColumnLabels,
45
+ onChangeTableAttribute: handleChangeTableAttribute,
46
+ onCommitColumnWidth: handleCommitColumnWidth,
47
+ tableDisplayAttributes
48
+ };
49
+ };
50
+ export { useTableSettings };