@economic/taco 1.19.1 → 1.21.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 (183) hide show
  1. package/dist/components/AlertDialog/components/Content.d.ts +1 -1
  2. package/dist/components/Calendar/Calendar.d.ts +1 -1
  3. package/dist/components/Calendar/Calendar.stories.d.ts +1 -1
  4. package/dist/components/Datepicker/Datepicker.d.ts +1 -1
  5. package/dist/components/Datepicker/Datepicker.stories.d.ts +1 -1
  6. package/dist/components/Dialog/components/Content.d.ts +1 -1
  7. package/dist/components/Dialog/components/Drawer.d.ts +1 -1
  8. package/dist/components/IconButton/IconButton.d.ts +2 -2
  9. package/dist/components/Input/Input.d.ts +1 -1
  10. package/dist/components/Listbox/Listbox.d.ts +2 -2
  11. package/dist/components/Listbox/Listbox.stories.d.ts +1 -1
  12. package/dist/components/Listbox/ScrollableList.d.ts +1 -1
  13. package/dist/components/Menu/components/Checkbox.d.ts +1 -1
  14. package/dist/components/Menu/components/Content.d.ts +1 -1
  15. package/dist/components/Menu/components/Item.d.ts +1 -1
  16. package/dist/components/Menu/components/Link.d.ts +1 -1
  17. package/dist/components/Menu/components/Trigger.d.ts +1 -1
  18. package/dist/components/Provider/Localization.d.ts +26 -0
  19. package/dist/components/SearchInput/SearchInput.d.ts +1 -1
  20. package/dist/components/SearchInput/SearchInput.stories.d.ts +1 -1
  21. package/dist/components/Select/Select.d.ts +1 -1
  22. package/dist/components/Select/Select.stories.d.ts +1 -1
  23. package/dist/components/Select2/components/Option.d.ts +1 -1
  24. package/dist/components/Select2/components/Search.d.ts +1 -1
  25. package/dist/components/Select2/components/Trigger.d.ts +1 -1
  26. package/dist/components/Shortcut/Shortcut.d.ts +5 -0
  27. package/dist/components/Table2/Table2.d.ts +33 -0
  28. package/dist/components/Table2/Table2.stories.d.ts +50 -0
  29. package/dist/components/Table2/components/BatchActionsMenu.d.ts +10 -0
  30. package/dist/components/Table2/components/ColumnSettingsButton.d.ts +7 -0
  31. package/dist/components/Table2/components/EditModeButton.d.ts +7 -0
  32. package/dist/components/Table2/components/RowDensityButton.d.ts +7 -0
  33. package/dist/components/Table2/components/Search.d.ts +3 -0
  34. package/dist/components/Table2/components/ShortcutsGuideButton.d.ts +7 -0
  35. package/dist/components/Table2/components/column/Base.d.ts +12 -0
  36. package/dist/components/Table2/components/column/Cell.d.ts +15 -0
  37. package/dist/components/Table2/components/column/Footer.d.ts +9 -0
  38. package/dist/components/Table2/components/column/Header.d.ts +11 -0
  39. package/dist/components/Table2/components/column/Indicator.d.ts +16 -0
  40. package/dist/components/Table2/components/column/ValidationError.d.ts +5 -0
  41. package/dist/components/Table2/components/column/utils.d.ts +2 -0
  42. package/dist/components/Table2/components/filters/FiltersButton.d.ts +7 -0
  43. package/dist/components/Table2/components/filters/components/Column.d.ts +11 -0
  44. package/dist/components/Table2/components/filters/components/ColumnFilter.d.ts +9 -0
  45. package/dist/components/Table2/components/filters/components/Comparator.d.ts +11 -0
  46. package/dist/components/Table2/components/filters/components/InferredControl.d.ts +10 -0
  47. package/dist/components/Table2/components/row/Context.d.ts +16 -0
  48. package/dist/components/Table2/components/row/ExpandedRow.d.ts +6 -0
  49. package/dist/components/Table2/components/row/Row.d.ts +7 -0
  50. package/dist/components/Table2/hooks/listeners/useActiveCellStateListener.d.ts +3 -0
  51. package/dist/components/Table2/hooks/listeners/useActiveRowStateListener.d.ts +3 -0
  52. package/dist/components/Table2/hooks/listeners/useColumnOffsetStateListener.d.ts +4 -0
  53. package/dist/components/Table2/hooks/listeners/useRowSelectionListener.d.ts +3 -0
  54. package/dist/components/Table2/hooks/listeners/useSettingsStateListener.d.ts +3 -0
  55. package/dist/components/Table2/hooks/useActiveCell.d.ts +26 -0
  56. package/dist/components/Table2/hooks/useActiveRow.d.ts +10 -0
  57. package/dist/components/Table2/hooks/useColumnDefinitions.d.ts +36 -0
  58. package/dist/components/Table2/hooks/useEditMode.d.ts +28 -0
  59. package/dist/components/Table2/hooks/useGridTemplate.d.ts +2 -0
  60. package/dist/components/Table2/hooks/useSeparatedChildren.d.ts +1 -0
  61. package/dist/components/Table2/hooks/useTable.d.ts +41 -0
  62. package/dist/components/Table2/hooks/useVirtualiser.d.ts +23 -0
  63. package/dist/components/Table2/types.d.ts +139 -0
  64. package/dist/components/Table2/utilities/cell.d.ts +13 -0
  65. package/dist/components/Table2/utilities/columns.d.ts +13 -0
  66. package/dist/components/Table2/utilities/filterFn.d.ts +3 -0
  67. package/dist/components/Tag/Tag.d.ts +1 -1
  68. package/dist/components/Tooltip/Tooltip.d.ts +1 -1
  69. package/dist/components/Tooltip/Tooltip.stories.d.ts +1 -1
  70. package/dist/esm/index.css +1 -1
  71. package/dist/esm/node_modules/babel-plugin-transform-async-to-promises/helpers.mjs.js +14 -1
  72. package/dist/esm/node_modules/babel-plugin-transform-async-to-promises/helpers.mjs.js.map +1 -1
  73. package/dist/esm/packages/taco/src/components/Checkbox/Checkbox.js +13 -5
  74. package/dist/esm/packages/taco/src/components/Checkbox/Checkbox.js.map +1 -1
  75. package/dist/esm/packages/taco/src/components/Provider/Localization.js +23 -0
  76. package/dist/esm/packages/taco/src/components/Provider/Localization.js.map +1 -1
  77. package/dist/esm/packages/taco/src/components/Shortcut/Shortcut.js +18 -0
  78. package/dist/esm/packages/taco/src/components/Shortcut/Shortcut.js.map +1 -0
  79. package/dist/esm/packages/taco/src/components/Table2/Table2.js +374 -0
  80. package/dist/esm/packages/taco/src/components/Table2/Table2.js.map +1 -0
  81. package/dist/esm/packages/taco/src/components/Table2/components/BatchActionsMenu.js +83 -0
  82. package/dist/esm/packages/taco/src/components/Table2/components/BatchActionsMenu.js.map +1 -0
  83. package/dist/esm/packages/taco/src/components/Table2/components/ColumnSettingsButton.js +238 -0
  84. package/dist/esm/packages/taco/src/components/Table2/components/ColumnSettingsButton.js.map +1 -0
  85. package/dist/esm/packages/taco/src/components/Table2/components/EditModeButton.js +58 -0
  86. package/dist/esm/packages/taco/src/components/Table2/components/EditModeButton.js.map +1 -0
  87. package/dist/esm/packages/taco/src/components/Table2/components/RowDensityButton.js +31 -0
  88. package/dist/esm/packages/taco/src/components/Table2/components/RowDensityButton.js.map +1 -0
  89. package/dist/esm/packages/taco/src/components/Table2/components/Search.js +55 -0
  90. package/dist/esm/packages/taco/src/components/Table2/components/Search.js.map +1 -0
  91. package/dist/esm/packages/taco/src/components/Table2/components/ShortcutsGuideButton.js +94 -0
  92. package/dist/esm/packages/taco/src/components/Table2/components/ShortcutsGuideButton.js.map +1 -0
  93. package/dist/esm/packages/taco/src/components/Table2/components/column/Base.js +32 -0
  94. package/dist/esm/packages/taco/src/components/Table2/components/column/Base.js.map +1 -0
  95. package/dist/esm/packages/taco/src/components/Table2/components/column/Cell.js +516 -0
  96. package/dist/esm/packages/taco/src/components/Table2/components/column/Cell.js.map +1 -0
  97. package/dist/esm/packages/taco/src/components/Table2/components/column/Footer.js +27 -0
  98. package/dist/esm/packages/taco/src/components/Table2/components/column/Footer.js.map +1 -0
  99. package/dist/esm/packages/taco/src/components/Table2/components/column/Header.js +159 -0
  100. package/dist/esm/packages/taco/src/components/Table2/components/column/Header.js.map +1 -0
  101. package/dist/esm/packages/taco/src/components/Table2/components/column/Indicator.js +78 -0
  102. package/dist/esm/packages/taco/src/components/Table2/components/column/Indicator.js.map +1 -0
  103. package/dist/esm/packages/taco/src/components/Table2/components/column/ValidationError.js +30 -0
  104. package/dist/esm/packages/taco/src/components/Table2/components/column/ValidationError.js.map +1 -0
  105. package/dist/esm/packages/taco/src/components/Table2/components/column/utils.js +38 -0
  106. package/dist/esm/packages/taco/src/components/Table2/components/column/utils.js.map +1 -0
  107. package/dist/esm/packages/taco/src/components/Table2/components/filters/FiltersButton.js +89 -0
  108. package/dist/esm/packages/taco/src/components/Table2/components/filters/FiltersButton.js.map +1 -0
  109. package/dist/esm/packages/taco/src/components/Table2/components/filters/components/Column.js +31 -0
  110. package/dist/esm/packages/taco/src/components/Table2/components/filters/components/Column.js.map +1 -0
  111. package/dist/esm/packages/taco/src/components/Table2/components/filters/components/ColumnFilter.js +121 -0
  112. package/dist/esm/packages/taco/src/components/Table2/components/filters/components/ColumnFilter.js.map +1 -0
  113. package/dist/esm/packages/taco/src/components/Table2/components/filters/components/Comparator.js +60 -0
  114. package/dist/esm/packages/taco/src/components/Table2/components/filters/components/Comparator.js.map +1 -0
  115. package/dist/esm/packages/taco/src/components/Table2/components/filters/components/InferredControl.js +96 -0
  116. package/dist/esm/packages/taco/src/components/Table2/components/filters/components/InferredControl.js.map +1 -0
  117. package/dist/esm/packages/taco/src/components/Table2/components/row/Context.js +26 -0
  118. package/dist/esm/packages/taco/src/components/Table2/components/row/Context.js.map +1 -0
  119. package/dist/esm/packages/taco/src/components/Table2/components/row/ExpandedRow.js +33 -0
  120. package/dist/esm/packages/taco/src/components/Table2/components/row/ExpandedRow.js.map +1 -0
  121. package/dist/esm/packages/taco/src/components/Table2/components/row/Row.js +58 -0
  122. package/dist/esm/packages/taco/src/components/Table2/components/row/Row.js.map +1 -0
  123. package/dist/esm/packages/taco/src/components/Table2/hooks/listeners/useActiveRowStateListener.js +19 -0
  124. package/dist/esm/packages/taco/src/components/Table2/hooks/listeners/useActiveRowStateListener.js.map +1 -0
  125. package/dist/esm/packages/taco/src/components/Table2/hooks/listeners/useColumnOffsetStateListener.js +44 -0
  126. package/dist/esm/packages/taco/src/components/Table2/hooks/listeners/useColumnOffsetStateListener.js.map +1 -0
  127. package/dist/esm/packages/taco/src/components/Table2/hooks/listeners/useRowSelectionListener.js +17 -0
  128. package/dist/esm/packages/taco/src/components/Table2/hooks/listeners/useRowSelectionListener.js.map +1 -0
  129. package/dist/esm/packages/taco/src/components/Table2/hooks/listeners/useSettingsStateListener.js +25 -0
  130. package/dist/esm/packages/taco/src/components/Table2/hooks/listeners/useSettingsStateListener.js.map +1 -0
  131. package/dist/esm/packages/taco/src/components/Table2/hooks/useActiveRow.js +33 -0
  132. package/dist/esm/packages/taco/src/components/Table2/hooks/useActiveRow.js.map +1 -0
  133. package/dist/esm/packages/taco/src/components/Table2/hooks/useColumnDefinitions.js +109 -0
  134. package/dist/esm/packages/taco/src/components/Table2/hooks/useColumnDefinitions.js.map +1 -0
  135. package/dist/esm/packages/taco/src/components/Table2/hooks/useEditMode.js +112 -0
  136. package/dist/esm/packages/taco/src/components/Table2/hooks/useEditMode.js.map +1 -0
  137. package/dist/esm/packages/taco/src/components/Table2/hooks/useGridTemplate.js +36 -0
  138. package/dist/esm/packages/taco/src/components/Table2/hooks/useGridTemplate.js.map +1 -0
  139. package/dist/esm/packages/taco/src/components/Table2/hooks/useSeparatedChildren.js +21 -0
  140. package/dist/esm/packages/taco/src/components/Table2/hooks/useSeparatedChildren.js.map +1 -0
  141. package/dist/esm/packages/taco/src/components/Table2/hooks/useTable.js +202 -0
  142. package/dist/esm/packages/taco/src/components/Table2/hooks/useTable.js.map +1 -0
  143. package/dist/esm/packages/taco/src/components/Table2/hooks/useVirtualiser.js +49 -0
  144. package/dist/esm/packages/taco/src/components/Table2/hooks/useVirtualiser.js.map +1 -0
  145. package/dist/esm/packages/taco/src/components/Table2/types.js +16 -0
  146. package/dist/esm/packages/taco/src/components/Table2/types.js.map +1 -0
  147. package/dist/esm/packages/taco/src/components/Table2/utilities/cell.js +41 -0
  148. package/dist/esm/packages/taco/src/components/Table2/utilities/cell.js.map +1 -0
  149. package/dist/esm/packages/taco/src/components/Table2/utilities/columns.js +311 -0
  150. package/dist/esm/packages/taco/src/components/Table2/utilities/columns.js.map +1 -0
  151. package/dist/esm/packages/taco/src/components/Table2/utilities/filterFn.js +96 -0
  152. package/dist/esm/packages/taco/src/components/Table2/utilities/filterFn.js.map +1 -0
  153. package/dist/esm/packages/taco/src/hooks/useBoundaryOverflowDetection.js +16 -0
  154. package/dist/esm/packages/taco/src/hooks/useBoundaryOverflowDetection.js.map +1 -0
  155. package/dist/esm/packages/taco/src/hooks/useGlobalKeyboardShortcut.js +13 -0
  156. package/dist/esm/packages/taco/src/hooks/useGlobalKeyboardShortcut.js.map +1 -0
  157. package/dist/esm/packages/taco/src/index.js +4 -2
  158. package/dist/esm/packages/taco/src/index.js.map +1 -1
  159. package/dist/esm/packages/taco/src/primitives/Sortable/components/Container.js +59 -0
  160. package/dist/esm/packages/taco/src/primitives/Sortable/components/Container.js.map +1 -0
  161. package/dist/esm/packages/taco/src/primitives/Sortable/components/Item.js +47 -0
  162. package/dist/esm/packages/taco/src/primitives/Sortable/components/Item.js.map +1 -0
  163. package/dist/esm/packages/taco/src/primitives/Sortable/components/List.js +28 -0
  164. package/dist/esm/packages/taco/src/primitives/Sortable/components/List.js.map +1 -0
  165. package/dist/esm/packages/taco/src/utils/date.js +4 -1
  166. package/dist/esm/packages/taco/src/utils/date.js.map +1 -1
  167. package/dist/esm/packages/taco/src/utils/dom.js +2 -1
  168. package/dist/esm/packages/taco/src/utils/dom.js.map +1 -1
  169. package/dist/esm/packages/taco/src/utils/hooks/useTruncated.js +20 -0
  170. package/dist/esm/packages/taco/src/utils/hooks/useTruncated.js.map +1 -0
  171. package/dist/hooks/useGlobalKeyboardShortcut.d.ts +1 -0
  172. package/dist/index.css +1 -1
  173. package/dist/index.d.ts +2 -0
  174. package/dist/primitives/Sortable/Sortable.d.ts +2 -2
  175. package/dist/taco.cjs.development.js +3489 -90
  176. package/dist/taco.cjs.development.js.map +1 -1
  177. package/dist/taco.cjs.production.min.js +1 -1
  178. package/dist/taco.cjs.production.min.js.map +1 -1
  179. package/dist/utils/date.d.ts +1 -0
  180. package/dist/utils/hooks/useTruncated.d.ts +3 -0
  181. package/package.json +4 -2
  182. package/tailwind.config.js +11 -1
  183. package/types.json +1368 -2
@@ -0,0 +1,94 @@
1
+ import React__default from 'react';
2
+ import { IconButton } from '../../IconButton/IconButton.js';
3
+ import { useLocalization } from '../../Provider/Localization.js';
4
+ import { Popover } from '../../Popover/Popover.js';
5
+ import { Shortcut } from '../../Shortcut/Shortcut.js';
6
+
7
+ const ShortcutsGuideButton = ({
8
+ table
9
+ }) => {
10
+ const meta = table.options.meta;
11
+ const {
12
+ texts: {
13
+ table2: tableTexts
14
+ }
15
+ } = useLocalization();
16
+ const shortcuts = [];
17
+ if (table.options.enableGlobalFilter) {
18
+ shortcuts.push({
19
+ feature: tableTexts.shortcuts.search,
20
+ keys: ['Ctrl', 'F']
21
+ });
22
+ }
23
+ if (table.options.enableColumnFilters) {
24
+ shortcuts.push({
25
+ feature: tableTexts.shortcuts.filter,
26
+ keys: ['Ctrl', 'Shift', 'F']
27
+ });
28
+ }
29
+ shortcuts.push({
30
+ feature: tableTexts.shortcuts.previousRow,
31
+ keys: ['Up']
32
+ });
33
+ shortcuts.push({
34
+ feature: tableTexts.shortcuts.nextRow,
35
+ keys: ['Down']
36
+ });
37
+ if (meta.editMode.enableEditMode) {
38
+ shortcuts.push({
39
+ feature: tableTexts.shortcuts.editCell,
40
+ keys: ['Enter']
41
+ });
42
+ shortcuts.push({
43
+ feature: tableTexts.shortcuts.previousColumn,
44
+ keys: ['Arrow-Left']
45
+ });
46
+ shortcuts.push({
47
+ feature: tableTexts.shortcuts.nextColumn,
48
+ keys: ['Arrow-Right']
49
+ });
50
+ } else if (meta.onRowClick) {
51
+ shortcuts.push({
52
+ feature: tableTexts.shortcuts.rowClick,
53
+ keys: ['Enter']
54
+ });
55
+ }
56
+ if (table.options.enableRowSelection) {
57
+ shortcuts.push({
58
+ feature: tableTexts.shortcuts.selectRow,
59
+ keys: ['Space']
60
+ });
61
+ shortcuts.push({
62
+ feature: tableTexts.shortcuts.selectAllRows,
63
+ keys: ['Ctrl', 'A']
64
+ });
65
+ }
66
+ if (table.options.enableExpanding) {
67
+ shortcuts.push({
68
+ feature: tableTexts.shortcuts.expandRow,
69
+ keys: ['Ctrl', 'Right']
70
+ });
71
+ shortcuts.push({
72
+ feature: tableTexts.shortcuts.collapseRow,
73
+ keys: ['Ctrl', 'Left']
74
+ });
75
+ }
76
+ return /*#__PURE__*/React__default.createElement(IconButton, {
77
+ "aria-label": "View keyboard shortcuts",
78
+ icon: "shortcuts",
79
+ popover: popoverProps => /*#__PURE__*/React__default.createElement(Popover, Object.assign({}, popoverProps), /*#__PURE__*/React__default.createElement(Popover.Content, {
80
+ align: "end"
81
+ }, /*#__PURE__*/React__default.createElement("div", {
82
+ className: "flex flex-col gap-y-1"
83
+ }, shortcuts.map(shortcut => /*#__PURE__*/React__default.createElement("span", {
84
+ className: "flex items-center justify-between gap-x-8",
85
+ key: shortcut.feature
86
+ }, /*#__PURE__*/React__default.createElement("span", null, shortcut.feature), /*#__PURE__*/React__default.createElement(Shortcut, {
87
+ keys: shortcut.keys
88
+ })))))),
89
+ rounded: true
90
+ });
91
+ };
92
+
93
+ export { ShortcutsGuideButton };
94
+ //# sourceMappingURL=ShortcutsGuideButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShortcutsGuideButton.js","sources":["../../../../../../../../src/components/Table2/components/ShortcutsGuideButton.tsx"],"sourcesContent":["import React from 'react';\nimport { Table as RTTable, TableMeta } from '@tanstack/react-table';\nimport { IconButton } from '../../IconButton/IconButton';\nimport { Popover } from '../../Popover/Popover';\nimport { Shortcut } from '../../Shortcut/Shortcut';\nimport { useLocalization } from '../../Provider/Localization';\n\ntype ShortcutGuideShortcut = {\n feature: string;\n keys: string[];\n};\n\ntype ShortcutsGuideButtonProps = {\n table: RTTable<any>;\n};\n\nexport const ShortcutsGuideButton = ({ table }: ShortcutsGuideButtonProps) => {\n const meta = table.options.meta as TableMeta<any>;\n const {\n texts: { table2: tableTexts },\n } = useLocalization();\n\n const shortcuts: ShortcutGuideShortcut[] = [];\n\n if (table.options.enableGlobalFilter) {\n shortcuts.push({\n feature: tableTexts.shortcuts.search,\n keys: ['Ctrl', 'F'],\n });\n }\n\n if (table.options.enableColumnFilters) {\n shortcuts.push({\n feature: tableTexts.shortcuts.filter,\n keys: ['Ctrl', 'Shift', 'F'],\n });\n }\n\n shortcuts.push({\n feature: tableTexts.shortcuts.previousRow,\n keys: ['Up'],\n });\n shortcuts.push({\n feature: tableTexts.shortcuts.nextRow,\n keys: ['Down'],\n });\n\n if (meta.editMode.enableEditMode) {\n shortcuts.push({\n feature: tableTexts.shortcuts.editCell,\n keys: ['Enter'],\n });\n shortcuts.push({\n feature: tableTexts.shortcuts.previousColumn,\n keys: ['Arrow-Left'],\n });\n shortcuts.push({\n feature: tableTexts.shortcuts.nextColumn,\n keys: ['Arrow-Right'],\n });\n } else if (meta.onRowClick) {\n shortcuts.push({\n feature: tableTexts.shortcuts.rowClick,\n keys: ['Enter'],\n });\n }\n\n if (table.options.enableRowSelection) {\n shortcuts.push({\n feature: tableTexts.shortcuts.selectRow,\n keys: ['Space'],\n });\n shortcuts.push({\n feature: tableTexts.shortcuts.selectAllRows,\n keys: ['Ctrl', 'A'],\n });\n }\n\n if (table.options.enableExpanding) {\n shortcuts.push({\n feature: tableTexts.shortcuts.expandRow,\n keys: ['Ctrl', 'Right'],\n });\n shortcuts.push({\n feature: tableTexts.shortcuts.collapseRow,\n keys: ['Ctrl', 'Left'],\n });\n }\n\n return (\n <IconButton\n aria-label=\"View keyboard shortcuts\"\n icon=\"shortcuts\"\n popover={popoverProps => (\n <Popover {...popoverProps}>\n <Popover.Content align=\"end\">\n <div className=\"flex flex-col gap-y-1\">\n {shortcuts.map(shortcut => (\n <span className=\"flex items-center justify-between gap-x-8\" key={shortcut.feature}>\n <span>{shortcut.feature}</span>\n <Shortcut keys={shortcut.keys} />\n </span>\n ))}\n </div>\n </Popover.Content>\n </Popover>\n )}\n rounded\n />\n );\n};\n"],"names":["ShortcutsGuideButton","table","meta","options","texts","table2","tableTexts","useLocalization","shortcuts","enableGlobalFilter","push","feature","search","keys","enableColumnFilters","filter","previousRow","nextRow","editMode","enableEditMode","editCell","previousColumn","nextColumn","onRowClick","rowClick","enableRowSelection","selectRow","selectAllRows","enableExpanding","expandRow","collapseRow","React","IconButton","icon","popover","popoverProps","Popover","Content","align","className","map","shortcut","key","Shortcut","rounded"],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import React__default from 'react';
2
+ import cn from 'classnames';
3
+ import { getPinnedShadowClasses, getCellAlignmentClasses } from '../../utilities/cell.js';
4
+
5
+ const ColumnBase = /*#__PURE__*/React__default.forwardRef(function Table2ColumnBase(props, ref) {
6
+ var _column$columnDef$met;
7
+ const {
8
+ column,
9
+ scrolled,
10
+ style,
11
+ table,
12
+ ...attributes
13
+ } = props;
14
+ const pinned = !!column.getIsPinned();
15
+ const meta = table.options.meta;
16
+ const left = meta.columnOffsets[column.id];
17
+ const columnPinning = table.getLeftVisibleLeafColumns().map(c => c.id);
18
+ const className = cn('border-grey-300', getPinnedShadowClasses(column, columnPinning, scrolled), getCellAlignmentClasses((_column$columnDef$met = column.columnDef.meta) === null || _column$columnDef$met === void 0 ? void 0 : _column$columnDef$met.align), {
19
+ 'cursor-pointer': !!attributes.onClick
20
+ }, attributes.className);
21
+ return /*#__PURE__*/React__default.createElement("div", Object.assign({}, attributes, {
22
+ className: className,
23
+ style: {
24
+ ...style,
25
+ left: pinned && Number.isInteger(left) ? left : undefined
26
+ },
27
+ ref: ref
28
+ }));
29
+ });
30
+
31
+ export { ColumnBase };
32
+ //# sourceMappingURL=Base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Base.js","sources":["../../../../../../../../../src/components/Table2/components/column/Base.tsx"],"sourcesContent":["import React from 'react';\nimport cn from 'classnames';\nimport { Column as RTColumn, Table as RTTable, TableMeta } from '@tanstack/react-table';\nimport { getCellAlignmentClasses, getPinnedShadowClasses } from '../../utilities/cell';\n\nexport type ColumnBaseProps<TType = any> = React.HTMLAttributes<HTMLDivElement> & {\n column: RTColumn<TType, any>;\n scrolled: boolean;\n table: RTTable<TType>;\n};\n\nexport const ColumnBase = React.forwardRef<HTMLDivElement, ColumnBaseProps>(function Table2ColumnBase(props, ref) {\n const { column, scrolled, style, table, ...attributes } = props;\n const pinned = !!column.getIsPinned();\n const meta = table.options.meta as TableMeta<any>;\n const left = meta.columnOffsets[column.id];\n\n const columnPinning = table.getLeftVisibleLeafColumns().map(c => c.id);\n\n const className = cn(\n 'border-grey-300',\n getPinnedShadowClasses(column, columnPinning, scrolled),\n getCellAlignmentClasses(column.columnDef.meta?.align),\n {\n 'cursor-pointer': !!attributes.onClick,\n },\n attributes.className\n );\n\n return (\n <div\n {...attributes}\n className={className}\n style={{ ...style, left: pinned && Number.isInteger(left) ? left : undefined }}\n ref={ref}\n />\n );\n});\n"],"names":["ColumnBase","React","forwardRef","Table2ColumnBase","props","ref","column","scrolled","style","table","attributes","pinned","getIsPinned","meta","options","left","columnOffsets","id","columnPinning","getLeftVisibleLeafColumns","map","c","className","cn","getPinnedShadowClasses","getCellAlignmentClasses","columnDef","align","onClick","Number","isInteger","undefined"],"mappings":";;;;MAWaA,UAAU,gBAAGC,cAAK,CAACC,UAAU,CAAkC,SAASC,gBAAgB,CAACC,KAAK,EAAEC,GAAG;;EAC5G,MAAM;IAAEC,MAAM;IAAEC,QAAQ;IAAEC,KAAK;IAAEC,KAAK;IAAE,GAAGC;GAAY,GAAGN,KAAK;EAC/D,MAAMO,MAAM,GAAG,CAAC,CAACL,MAAM,CAACM,WAAW,EAAE;EACrC,MAAMC,IAAI,GAAGJ,KAAK,CAACK,OAAO,CAACD,IAAsB;EACjD,MAAME,IAAI,GAAGF,IAAI,CAACG,aAAa,CAACV,MAAM,CAACW,EAAE,CAAC;EAE1C,MAAMC,aAAa,GAAGT,KAAK,CAACU,yBAAyB,EAAE,CAACC,GAAG,CAACC,CAAC,IAAIA,CAAC,CAACJ,EAAE,CAAC;EAEtE,MAAMK,SAAS,GAAGC,EAAE,CAChB,iBAAiB,EACjBC,sBAAsB,CAAClB,MAAM,EAAEY,aAAa,EAAEX,QAAQ,CAAC,EACvDkB,uBAAuB,0BAACnB,MAAM,CAACoB,SAAS,CAACb,IAAI,0DAArB,sBAAuBc,KAAK,CAAC,EACrD;IACI,gBAAgB,EAAE,CAAC,CAACjB,UAAU,CAACkB;GAClC,EACDlB,UAAU,CAACY,SAAS,CACvB;EAED,oBACIrB,sDACQS,UAAU;IACdY,SAAS,EAAEA,SAAS;IACpBd,KAAK,EAAE;MAAE,GAAGA,KAAK;MAAEO,IAAI,EAAEJ,MAAM,IAAIkB,MAAM,CAACC,SAAS,CAACf,IAAI,CAAC,GAAGA,IAAI,GAAGgB;KAAW;IAC9E1B,GAAG,EAAEA;KACP;AAEV,CAAC;;;;"}
@@ -0,0 +1,516 @@
1
+ import React__default from 'react';
2
+ import cn from 'classnames';
3
+ import { useMergedRef } from '../../../../hooks/useMergedRef.js';
4
+ import { Input } from '../../../Input/Input.js';
5
+ import { Datepicker } from '../../../Datepicker/Datepicker.js';
6
+ import { _catch } from '../../../../../../../node_modules/babel-plugin-transform-async-to-promises/helpers.mjs.js';
7
+ import { flexRender } from '@tanstack/react-table';
8
+ import { isInternalColumn } from '../../utilities/columns.js';
9
+ import { getCellSizingClasses, isKeyboardFocusableElement, getCellAlignmentClasses } from '../../utilities/cell.js';
10
+ import { ColumnBase } from './Base.js';
11
+ import { Switch } from '../../../Switch/Switch.js';
12
+ import { globalFilterFn, columnFilterFn } from '../../utilities/filterFn.js';
13
+ import { MOVE_DIR } from '../../hooks/useEditMode.js';
14
+ import { useRowContext } from '../row/Context.js';
15
+ import { IndicatorReason, Indicator } from './Indicator.js';
16
+ import { ValidationError } from './ValidationError.js';
17
+ import { hasChanged, willRowMoveAfterSorting } from './utils.js';
18
+
19
+ const Cell = function Cell(props) {
20
+ var _cell$column$columnDe, _cell$column$columnDe2, _cell$column$columnDe3, _table$options$meta;
21
+ const {
22
+ cell,
23
+ index,
24
+ isLastRow,
25
+ rowIndex,
26
+ rows,
27
+ scrollToIndex,
28
+ scrollToOffset,
29
+ table,
30
+ tableRef,
31
+ ...columnProps
32
+ } = props;
33
+ const meta = table.options.meta;
34
+ const {
35
+ addFocussableColumnIndex,
36
+ focussableColumnIndexes: allFocussableColumnIndexes
37
+ } = meta;
38
+ const {
39
+ validationErrors,
40
+ rowMoveReason
41
+ } = useRowContext();
42
+ const hasValidationErrorsInRow = !!validationErrors;
43
+ const internalRef = React__default.useRef(null);
44
+ const controlRef = React__default.useRef(null);
45
+ const disableTruncation = (_cell$column$columnDe = cell.column.columnDef.meta) === null || _cell$column$columnDe === void 0 ? void 0 : _cell$column$columnDe.disableTruncation;
46
+ const cellClassName = (_cell$column$columnDe2 = cell.column.columnDef.meta) === null || _cell$column$columnDe2 === void 0 ? void 0 : _cell$column$columnDe2.className;
47
+ const isActiveRow = meta.activeRowIndex === rowIndex;
48
+ const isHoveredRow = meta.hoveredRowIndex === rowIndex;
49
+ const isPinned = !!cell.column.getIsPinned();
50
+ const isDragging = meta.dragging[cell.row.id];
51
+ const isSelected = cell.row.getIsSelected();
52
+ const isDataColumn = !isInternalColumn(cell.column.id);
53
+ const hasCellControl = !!((_cell$column$columnDe3 = cell.column.columnDef.meta) !== null && _cell$column$columnDe3 !== void 0 && _cell$column$columnDe3.control);
54
+ const allVisibleColumns = table.getVisibleLeafColumns();
55
+ const lastColumnIndex = allVisibleColumns.length > 0 ? allVisibleColumns.length - 1 : 0;
56
+ // editing
57
+ const isEditingThisRow = meta.editMode.isEditing && isActiveRow;
58
+ const canEditThisCell = isEditingThisRow && isDataColumn;
59
+ const isEditingThisCell = canEditThisCell && meta.editMode.columnIndex === index;
60
+ const isHoveringThisRowWhileEditing = meta.editMode.isEditing && isHoveredRow;
61
+ const isIndicatorVisible = Object.keys(rowMoveReason).length > 0;
62
+ React__default.useEffect(() => {
63
+ // Adds padding to the table so that indicator doesn't get cropped
64
+ if (isIndicatorVisible && isLastRow) {
65
+ var _tableRef$current;
66
+ (_tableRef$current = tableRef.current) === null || _tableRef$current === void 0 ? void 0 : _tableRef$current.classList.add('pb-4');
67
+ }
68
+ return () => {
69
+ var _tableRef$current2;
70
+ return (_tableRef$current2 = tableRef.current) === null || _tableRef$current2 === void 0 ? void 0 : _tableRef$current2.classList.remove('pb-4');
71
+ };
72
+ }, [isIndicatorVisible, isLastRow]);
73
+ const className = cn({
74
+ 'border-b': !isLastRow,
75
+ 'sticky z-[1]': isPinned,
76
+ // use isHoveredRow rather than css group-hover/row because we want to hide hover state when keyboard navigating
77
+ 'bg-white': !isActiveRow && !isSelected && !isHoveredRow,
78
+ 'bg-grey-100': !isActiveRow && !isSelected && isHoveredRow,
79
+ 'bg-grey-200 group-hover/row:bg-grey-200': isActiveRow && !isSelected,
80
+ 'bg-blue-100': isSelected,
81
+ '!wcag-blue-500': isDragging,
82
+ '[&>*]:!grayscale [&_.bg-white]:!bg-grey-100': !isEditingThisRow && isHoveringThisRowWhileEditing,
83
+ '!bg-red-100': hasValidationErrorsInRow,
84
+ 'z-[1]': isPinned && isActiveRow,
85
+ // First column should have higher z-index so that row indicator always show on top of the cell
86
+ // control components.
87
+ 'z-[2]': isPinned && isActiveRow && index === 0,
88
+ 'border-blue !border-y-2 border-x-0': isIndicatorVisible,
89
+ 'border-l-2 rounded-l': isIndicatorVisible && index === 0,
90
+ 'border-r-2 rounded-r': isIndicatorVisible && index === lastColumnIndex
91
+ }, getCellSizingClasses((_table$options$meta = table.options.meta) === null || _table$options$meta === void 0 ? void 0 : _table$options$meta.rowDensity, (isEditingThisRow || isHoveringThisRowWhileEditing) && hasCellControl), typeof cellClassName === 'function' ? cellClassName(cell.row) : cellClassName);
92
+ const handleMouseDown = event => {
93
+ // only detect left clicks
94
+ if (event.button === 0) {
95
+ const activeElement = document.activeElement;
96
+ const isActiveElementControl = activeElement === null || activeElement === void 0 ? void 0 : activeElement.closest('[role="cell"]');
97
+ const hasActiveRowChanged = meta.activeRowIndex !== rowIndex;
98
+ // When user clicks on a cell that is not in the active row, for some reason blur event is not called on the cell
99
+ // previous cell control element so we need to manually call it in order to save the changes in that cell
100
+ if (isActiveElementControl && hasActiveRowChanged) {
101
+ activeElement.blur();
102
+ }
103
+ meta.setActiveRowIndex(rowIndex);
104
+ if (meta.editMode.isEditing) {
105
+ if (allFocussableColumnIndexes.includes(index)) {
106
+ meta.editMode.setColumn(index);
107
+ } else {
108
+ meta.editMode.setColumn(allFocussableColumnIndexes[0]);
109
+ }
110
+ }
111
+ }
112
+ };
113
+ const attributes = {
114
+ ...columnProps,
115
+ // base props,
116
+ column: cell.column,
117
+ table,
118
+ // dom attributes
119
+ className,
120
+ 'data-column-index': index,
121
+ 'data-row-index': rowIndex,
122
+ onMouseDown: handleMouseDown,
123
+ ref: internalRef,
124
+ role: 'cell'
125
+ };
126
+ const [detailModeEditing, setDetailModeEditing] = React__default.useState(false);
127
+ const detailModeClassName = cn({
128
+ '!shadow-[0_0_0_4px_rgba(0,99,255,0.25)]': detailModeEditing
129
+ });
130
+ // reset the editing state when we move column
131
+ React__default.useEffect(() => {
132
+ if (meta.editMode.columnIndex !== index) {
133
+ setDetailModeEditing(false);
134
+ }
135
+ }, [meta.editMode.columnIndex]);
136
+ React__default.useEffect(() => {
137
+ if (isEditingThisRow && controlRef.current && isKeyboardFocusableElement(controlRef.current)) {
138
+ addFocussableColumnIndex(index);
139
+ }
140
+ }, [isEditingThisRow, allFocussableColumnIndexes, addFocussableColumnIndex, index]);
141
+ const moveRow = moveDirection => {
142
+ if (moveDirection === MOVE_DIR.PREV) {
143
+ meta.moveToPreviousRow(rows, nextIndex => scrollToIndex(nextIndex - 1));
144
+ } else if (moveDirection === MOVE_DIR.NEXT) {
145
+ meta.moveToNextRow(rows, nextIndex => scrollToIndex(nextIndex + 2));
146
+ }
147
+ };
148
+ if (meta.editMode.onSave && hasCellControl && (canEditThisCell || isHoveringThisRowWhileEditing && isDataColumn)) {
149
+ attributes.onMouseDown = event => {
150
+ handleMouseDown(event);
151
+ const target = event.target;
152
+ const isTargetInput = target !== null && target.nodeName === 'INPUT';
153
+ // event.target?.select is only truthy for input elements
154
+ // if event.target is active element, then that means we should select the text
155
+ if (isTargetInput && target !== document.activeElement) {
156
+ event.preventDefault();
157
+ setTimeout(() => {
158
+ target.select();
159
+ }, 1);
160
+ } else if (isTargetInput && target === document.activeElement) {
161
+ // if user left clicks on the input then we are into edit mode
162
+ // only detect left clicks
163
+ if (event.button === 0) {
164
+ setDetailModeEditing(true);
165
+ }
166
+ }
167
+ };
168
+ if (canEditThisCell) {
169
+ var _allFocussableColumnI, _allFocussableColumnI2;
170
+ const firstDataColumnIndex = (_allFocussableColumnI = allFocussableColumnIndexes.at(0)) !== null && _allFocussableColumnI !== void 0 ? _allFocussableColumnI : 0;
171
+ const lastDataColumnIndex = (_allFocussableColumnI2 = allFocussableColumnIndexes.at(-1)) !== null && _allFocussableColumnI2 !== void 0 ? _allFocussableColumnI2 : 0;
172
+ attributes.onKeyDown = event => {
173
+ const control = event.target;
174
+ const isControlInput = control.nodeName === 'INPUT' && (control === null || control === void 0 ? void 0 : control.getAttribute('data-inline-editing-component')) === 'true';
175
+ // For some reason, Taco Input keyboard event always return true when "event.isDefaultPrevented()" is
176
+ // called. So we need to check if the control is input or not so that we don't return early.
177
+ if (!isControlInput && (event.isDefaultPrevented() || event.isPropagationStopped())) {
178
+ return;
179
+ }
180
+ if (control.tagName === 'INPUT') {
181
+ if (event.key === 'Enter') {
182
+ event.preventDefault();
183
+ const input = control;
184
+ if (!detailModeEditing) {
185
+ var _input$setSelectionRa, _input$value, _input$value2;
186
+ (_input$setSelectionRa = input.setSelectionRange) === null || _input$setSelectionRa === void 0 ? void 0 : _input$setSelectionRa.call(input, (_input$value = input.value) === null || _input$value === void 0 ? void 0 : _input$value.length, (_input$value2 = input.value) === null || _input$value2 === void 0 ? void 0 : _input$value2.length);
187
+ setDetailModeEditing(true);
188
+ }
189
+ return;
190
+ }
191
+ }
192
+ // Don't exit edit mode if the target of the escape isn't a child of the cell (e.g. if its a popover).
193
+ if (event.key === 'Escape' && event.currentTarget.contains(control)) {
194
+ event.preventDefault();
195
+ const input = control;
196
+ if (detailModeEditing) {
197
+ var _input$select;
198
+ input === null || input === void 0 ? void 0 : (_input$select = input.select) === null || _input$select === void 0 ? void 0 : _input$select.call(input);
199
+ setDetailModeEditing(false);
200
+ } else {
201
+ var _tableRef$current3;
202
+ meta.editMode.toggleEditing(false);
203
+ (_tableRef$current3 = tableRef.current) === null || _tableRef$current3 === void 0 ? void 0 : _tableRef$current3.focus();
204
+ }
205
+ return;
206
+ }
207
+ if (!detailModeEditing && event.key === 'ArrowLeft' || event.key === 'Tab' && event.shiftKey) {
208
+ event.preventDefault();
209
+ const isFirstRow = rowIndex === 0;
210
+ const isFirstColumn = index === firstDataColumnIndex;
211
+ if (event.ctrlKey || event.metaKey) {
212
+ // If the current active column is the first column then we don't do any thing so that focus
213
+ // remains on the first column.
214
+ if (!isFirstColumn) {
215
+ control.blur();
216
+ meta.editMode.moveToFirstColumn(allFocussableColumnIndexes);
217
+ }
218
+ } else {
219
+ // If it is first row and first column, then don't move column.
220
+ if (!isFirstRow || !isFirstColumn) {
221
+ control.blur();
222
+ meta.editMode.moveToPreviousColumn(allFocussableColumnIndexes, moveRow);
223
+ }
224
+ }
225
+ return;
226
+ }
227
+ if (!detailModeEditing && event.key === 'ArrowRight' || event.key === 'Tab' && !event.shiftKey) {
228
+ event.preventDefault();
229
+ const isLastColumn = index === lastDataColumnIndex;
230
+ if (event.ctrlKey || event.metaKey) {
231
+ // If the current active column is the last column then we don't do any thing so that focus
232
+ // remains on the last column.
233
+ if (!isLastColumn) {
234
+ control.blur();
235
+ meta.editMode.moveToLastColumn(allFocussableColumnIndexes);
236
+ }
237
+ } else {
238
+ // If it is last row and last column, then don't move column.
239
+ if (!isLastRow || !isLastColumn) {
240
+ control.blur();
241
+ meta.editMode.moveToNextColumn(allFocussableColumnIndexes, moveRow);
242
+ }
243
+ }
244
+ return;
245
+ }
246
+ if (!detailModeEditing && event.key === 'ArrowUp') {
247
+ event.preventDefault();
248
+ // if it is the first row then return early, so that focus on the cell is not lost
249
+ if (rowIndex === 0) {
250
+ return;
251
+ }
252
+ control.blur();
253
+ if (event.ctrlKey || event.metaKey) {
254
+ meta.setActiveRowIndex(0);
255
+ scrollToOffset(0);
256
+ } else {
257
+ moveRow(MOVE_DIR.PREV);
258
+ }
259
+ meta.setHoveredRowIndex(undefined);
260
+ return;
261
+ }
262
+ if (!detailModeEditing && event.key === 'ArrowDown') {
263
+ event.preventDefault();
264
+ // if it is the last row then return early, so that focus on the cell is not lost
265
+ if (rowIndex === rows.length - 1) {
266
+ return;
267
+ }
268
+ control.blur();
269
+ if (event.ctrlKey || event.metaKey) {
270
+ meta.setActiveRowIndex(rows.length - 1);
271
+ scrollToIndex(rows.length + 20);
272
+ } else {
273
+ moveRow(MOVE_DIR.NEXT);
274
+ }
275
+ meta.setHoveredRowIndex(undefined);
276
+ return;
277
+ }
278
+ };
279
+ }
280
+ return /*#__PURE__*/React__default.createElement(ColumnBase, Object.assign({}, attributes), /*#__PURE__*/React__default.createElement(EditingCell, {
281
+ detailModeClassName: detailModeClassName,
282
+ cell: cell,
283
+ cellRef: internalRef,
284
+ columnIndex: index,
285
+ isEditingThisCell: isEditingThisCell,
286
+ onSave: meta.editMode.onSave,
287
+ rowIndex: rowIndex,
288
+ table: table,
289
+ ref: controlRef,
290
+ rowValues: rows[rowIndex].original,
291
+ rowsLength: rows.length
292
+ }));
293
+ } else {
294
+ if (meta.onRowClick) {
295
+ attributes.onClick = () => {
296
+ var _meta$onRowClick;
297
+ (_meta$onRowClick = meta.onRowClick) === null || _meta$onRowClick === void 0 ? void 0 : _meta$onRowClick.call(meta, cell.row.original);
298
+ };
299
+ }
300
+ }
301
+ return /*#__PURE__*/React__default.createElement(ColumnBase, Object.assign({}, attributes), /*#__PURE__*/React__default.createElement("div", {
302
+ className: disableTruncation ? '-my-[0.45rem]' : 'truncate'
303
+ }, flexRender(cell.column.columnDef.cell, cell.getContext())));
304
+ };
305
+ const EditingCell = /*#__PURE__*/React__default.memo( /*#__PURE__*/React__default.forwardRef((props, ref) => {
306
+ var _cell$column$columnDe4, _cell$column$columnDe5, _cellRef$current, _cellRef$current$pare, _rowMoveReason$cellId;
307
+ const {
308
+ cell,
309
+ cellRef,
310
+ columnIndex,
311
+ detailModeClassName,
312
+ isEditingThisCell = false,
313
+ onSave: handleSave,
314
+ rowIndex,
315
+ rowValues,
316
+ table
317
+ } = props;
318
+ const {
319
+ validationErrors,
320
+ setValidationErrors,
321
+ rowMoveReason,
322
+ setRowMoveReason
323
+ } = useRowContext();
324
+ const controlRef = useMergedRef(ref);
325
+ const cellId = cell.column.id;
326
+ const cellValidationError = validationErrors === null || validationErrors === void 0 ? void 0 : validationErrors[cellId];
327
+ const value = cell.getValue();
328
+ const ariaLabel = cell.column.columnDef.header;
329
+ const meta = table.options.meta;
330
+ const {
331
+ globalFilter
332
+ } = table.getState();
333
+ const [state, setState] = React__default.useState(value);
334
+ const isHoveringAnotherRowWhileEditing = meta.editMode.isEditing && meta.activeRowIndex !== rowIndex && meta.hoveredRowIndex === rowIndex;
335
+ const showValidationError = !isHoveringAnotherRowWhileEditing && !!cellValidationError;
336
+ // On each save, the initialValue will be set to the new value of the cell
337
+ const initialValue = React__default.useRef(value);
338
+ // It is important that we let consumers pass a newValue as an argument because when setState is called before
339
+ // onBlur then saveIfChanged method gets the stale state value. This happens because the rerender hasn't happened
340
+ // before the saveIfChanged method is called.
341
+ const saveIfChanged = function (eventOrNewValue) {
342
+ try {
343
+ let newValue = state;
344
+ // if eventOrNewValue is not an event object
345
+ if (!eventOrNewValue.target) {
346
+ newValue = eventOrNewValue;
347
+ }
348
+ const _temp2 = function () {
349
+ if (hasChanged(value, newValue)) {
350
+ const _temp = _catch(function () {
351
+ const updatedRow = {
352
+ ...cell.row.original,
353
+ [cellId]: newValue
354
+ };
355
+ return Promise.resolve(handleSave(updatedRow, cellId)).then(function () {
356
+ // If sorting is paused then update the last sorted or filtered rows to store the newly updated row
357
+ if (meta.shouldPauseSortingAndFiltering) {
358
+ meta.lastSortedOrFilteredRows.current = meta.lastSortedOrFilteredRows.current.map(row => {
359
+ if (row.id === cell.row.id) {
360
+ row.original = updatedRow;
361
+ }
362
+ return row;
363
+ });
364
+ }
365
+ // Reset error if save was successful
366
+ setValidationErrors(null);
367
+ });
368
+ }, function (error) {
369
+ setValidationErrors(error);
370
+ });
371
+ if (_temp && _temp.then) return _temp.then(function () {});
372
+ }
373
+ }();
374
+ return Promise.resolve(_temp2 && _temp2.then ? _temp2.then(function () {}) : void 0);
375
+ } catch (e) {
376
+ return Promise.reject(e);
377
+ }
378
+ };
379
+ // Ensures we "auto focus" the field if the cell is being edited.
380
+ React__default.useEffect(() => {
381
+ var _meta$tableRef$curren;
382
+ const isFocusInsideTable = (_meta$tableRef$curren = meta.tableRef.current) === null || _meta$tableRef$curren === void 0 ? void 0 : _meta$tableRef$curren.contains(document.activeElement);
383
+ // When control is blurred then body gets the focus that's why we have to make sure if activeElement
384
+ // is body then we focus the cell if it is being edited.
385
+ const isBodyFocussed = document.body === document.activeElement;
386
+ // Don't focus cell if any table popup(filter popup, column settings popup) is open.
387
+ if (isEditingThisCell && (isFocusInsideTable || isBodyFocussed)) {
388
+ var _controlRef$current, _controlRef$current$f;
389
+ (_controlRef$current = controlRef.current) === null || _controlRef$current === void 0 ? void 0 : (_controlRef$current$f = _controlRef$current.focus) === null || _controlRef$current$f === void 0 ? void 0 : _controlRef$current$f.call(_controlRef$current);
390
+ }
391
+ }, [isEditingThisCell, controlRef.current]);
392
+ // make sure the cell becomes active if the field is focused
393
+ const handleFocus = event => {
394
+ var _event$target;
395
+ meta.editMode.setColumn(columnIndex);
396
+ if ((_event$target = event.target) !== null && _event$target !== void 0 && _event$target.select) {
397
+ var _event$target2;
398
+ (_event$target2 = event.target) === null || _event$target2 === void 0 ? void 0 : _event$target2.select();
399
+ }
400
+ };
401
+ React__default.useEffect(() => {
402
+ if (hasChanged(initialValue.current, state)) {
403
+ showIndicator();
404
+ } else {
405
+ hideIndicator();
406
+ }
407
+ return hideIndicator;
408
+ }, [state]);
409
+ const showIndicator = () => {
410
+ var _table$getState$sorti;
411
+ let willRowMoveReason = null;
412
+ const isFilteredByGlobalFilter = Object.values({
413
+ ...rowValues,
414
+ [cellId]: state
415
+ }).some(cellValue =>
416
+ // Global filter can be undefined when there is no text being searched so we pass an empty string to
417
+ // globalFilterFn as query in that case.
418
+ globalFilterFn(String(cellValue), globalFilter ? String(globalFilter) : ''));
419
+ if (!isFilteredByGlobalFilter) {
420
+ willRowMoveReason = IndicatorReason.SEARCH;
421
+ } else if (cell.column.getIsFiltered() && !columnFilterFn(state, cell.column.getFilterValue())) {
422
+ willRowMoveReason = IndicatorReason.FILTER;
423
+ } else if (!willRowMoveReason && cell.column.getIsSorted() && willRowMoveAfterSorting(state, cell, rowIndex, table.getRowModel().rows, !!((_table$getState$sorti = table.getState().sorting.find(s => s.id === cell.column.id)) !== null && _table$getState$sorti !== void 0 && _table$getState$sorti.desc))) {
424
+ willRowMoveReason = IndicatorReason.SORTING;
425
+ }
426
+ if (willRowMoveReason !== null) {
427
+ meta.setShouldPauseSortingAndFiltering(true);
428
+ setRowMoveReason({
429
+ [cellId]: willRowMoveReason
430
+ });
431
+ }
432
+ };
433
+ const hideIndicator = () => {
434
+ setRowMoveReason(prevState => {
435
+ const newState = {
436
+ ...prevState
437
+ };
438
+ delete newState[cellId];
439
+ return newState;
440
+ });
441
+ };
442
+ const cellControl = (_cell$column$columnDe4 = cell.column.columnDef.meta) === null || _cell$column$columnDe4 === void 0 ? void 0 : _cell$column$columnDe4.control;
443
+ const attributes = {
444
+ 'aria-label': ariaLabel,
445
+ onBlur: saveIfChanged,
446
+ onFocus: handleFocus,
447
+ ref,
448
+ // This is a temporary fix to enable up/down arrow key shortcuts on input in quick mode. For some reason,
449
+ // the preventDefault is true on Taco Input, so the keyboard shortcuts doesn't work. By adding this
450
+ // data attribute we make sure the event is coming from a control component, and then we can make sure
451
+ // keyboard shortcut works as expected.
452
+ 'data-inline-editing-component': 'true'
453
+ };
454
+ const className = cn(getCellAlignmentClasses((_cell$column$columnDe5 = cell.column.columnDef.meta) === null || _cell$column$columnDe5 === void 0 ? void 0 : _cell$column$columnDe5.align));
455
+ const indicatorMountNode = (_cellRef$current = cellRef.current) === null || _cellRef$current === void 0 ? void 0 : (_cellRef$current$pare = _cellRef$current.parentElement) === null || _cellRef$current$pare === void 0 ? void 0 : _cellRef$current$pare.querySelector(':first-child');
456
+ let controlComponent;
457
+ if (cellControl) {
458
+ if (typeof cellControl === 'function') {
459
+ controlComponent = cellControl({
460
+ onBlur: saveIfChanged,
461
+ onFocus: handleFocus,
462
+ ref: controlRef,
463
+ setValue: setState,
464
+ value: state,
465
+ 'data-inline-editing-component': 'true',
466
+ className: detailModeClassName
467
+ }, cell.row.original);
468
+ } else {
469
+ switch (cellControl) {
470
+ case 'datepicker':
471
+ controlComponent = /*#__PURE__*/React__default.createElement(Datepicker, Object.assign({}, attributes, {
472
+ className: detailModeClassName,
473
+ onBlur: event => {
474
+ const newDate = event.detail;
475
+ saveIfChanged(newDate);
476
+ },
477
+ onChange: event => {
478
+ setState(event.detail);
479
+ },
480
+ ref: controlRef,
481
+ value: state
482
+ }));
483
+ break;
484
+ case 'switch':
485
+ controlComponent = /*#__PURE__*/React__default.createElement(Switch, Object.assign({}, attributes, {
486
+ className: cn('mx-2', detailModeClassName),
487
+ checked: Boolean(state),
488
+ onChange: setState,
489
+ ref: controlRef
490
+ }));
491
+ break;
492
+ default:
493
+ controlComponent = /*#__PURE__*/React__default.createElement(Input, Object.assign({}, attributes, {
494
+ className: cn(className, detailModeClassName),
495
+ onChange: event => {
496
+ setState(event.target.value);
497
+ },
498
+ ref: controlRef,
499
+ value: String(state !== null && state !== void 0 ? state : '')
500
+ }));
501
+ break;
502
+ }
503
+ }
504
+ }
505
+ const indicatorReason = (_rowMoveReason$cellId = rowMoveReason[cellId]) !== null && _rowMoveReason$cellId !== void 0 ? _rowMoveReason$cellId : null;
506
+ return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, indicatorReason !== null && /*#__PURE__*/React__default.createElement(Indicator, {
507
+ reason: indicatorReason,
508
+ columnName: String(cell.column.columnDef.header),
509
+ mountNode: indicatorMountNode
510
+ }), /*#__PURE__*/React__default.createElement("span", {
511
+ className: "relative flex-grow"
512
+ }, controlComponent, showValidationError && /*#__PURE__*/React__default.createElement(ValidationError, null, String(cellValidationError))));
513
+ }));
514
+
515
+ export { Cell };
516
+ //# sourceMappingURL=Cell.js.map