@invopop/popui 0.0.108 → 0.1.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 (248) hide show
  1. package/dist/AlertDialog.svelte +84 -59
  2. package/dist/AlertDialog.svelte.d.ts +5 -29
  3. package/dist/BaseButton.svelte +106 -101
  4. package/dist/BaseButton.svelte.d.ts +4 -34
  5. package/dist/BaseCard.svelte +20 -12
  6. package/dist/BaseCard.svelte.d.ts +4 -26
  7. package/dist/BaseCounter.svelte +13 -9
  8. package/dist/BaseCounter.svelte.d.ts +4 -17
  9. package/dist/BaseDropdown.svelte +54 -38
  10. package/dist/BaseDropdown.svelte.d.ts +6 -26
  11. package/dist/BaseFlag.svelte +6 -4
  12. package/dist/BaseFlag.svelte.d.ts +4 -17
  13. package/dist/BaseTable.svelte +226 -188
  14. package/dist/BaseTable.svelte.d.ts +4 -39
  15. package/dist/BaseTableActions.svelte +43 -33
  16. package/dist/BaseTableActions.svelte.d.ts +6 -21
  17. package/dist/BaseTableCellContent.svelte +19 -13
  18. package/dist/BaseTableCellContent.svelte.d.ts +4 -24
  19. package/dist/BaseTableCheckbox.svelte +19 -12
  20. package/dist/BaseTableCheckbox.svelte.d.ts +4 -21
  21. package/dist/BaseTableHeaderContent.svelte +30 -22
  22. package/dist/BaseTableHeaderContent.svelte.d.ts +4 -21
  23. package/dist/BaseTableHeaderOrderBy.svelte +24 -0
  24. package/dist/BaseTableHeaderOrderBy.svelte.d.ts +4 -0
  25. package/dist/BaseTableRow.svelte +78 -60
  26. package/dist/BaseTableRow.svelte.d.ts +4 -32
  27. package/dist/Breadcrumbs.svelte +14 -10
  28. package/dist/Breadcrumbs.svelte.d.ts +4 -19
  29. package/dist/ButtonFile.svelte +40 -29
  30. package/dist/ButtonFile.svelte.d.ts +4 -25
  31. package/dist/ButtonUuidCopy.svelte +27 -20
  32. package/dist/ButtonUuidCopy.svelte.d.ts +4 -22
  33. package/dist/CardCheckbox.svelte +28 -19
  34. package/dist/CardCheckbox.svelte.d.ts +4 -28
  35. package/dist/CardRelation.svelte +9 -8
  36. package/dist/CardRelation.svelte.d.ts +4 -22
  37. package/dist/CompanySelector.svelte +49 -43
  38. package/dist/CompanySelector.svelte.d.ts +4 -22
  39. package/dist/CounterWorkflow.svelte +12 -8
  40. package/dist/CounterWorkflow.svelte.d.ts +4 -17
  41. package/dist/DataListItem.svelte +24 -14
  42. package/dist/DataListItem.svelte.d.ts +4 -22
  43. package/dist/DatePicker.svelte +186 -386
  44. package/dist/DatePicker.svelte.d.ts +4 -22
  45. package/dist/DrawerContext.svelte +33 -22
  46. package/dist/DrawerContext.svelte.d.ts +4 -24
  47. package/dist/DrawerContextItem.svelte +69 -56
  48. package/dist/DrawerContextItem.svelte.d.ts +4 -23
  49. package/dist/DrawerContextSeparator.svelte +1 -1
  50. package/dist/DrawerContextSeparator.svelte.d.ts +22 -19
  51. package/dist/DrawerContextWorkspace.svelte +31 -32
  52. package/dist/DrawerContextWorkspace.svelte.d.ts +4 -20
  53. package/dist/DropdownSelect.svelte +93 -81
  54. package/dist/DropdownSelect.svelte.d.ts +4 -27
  55. package/dist/EmptyStateIcon.svelte +13 -7
  56. package/dist/EmptyStateIcon.svelte.d.ts +4 -22
  57. package/dist/EmptyStateIllustration.svelte +41 -33
  58. package/dist/EmptyStateIllustration.svelte.d.ts +4 -21
  59. package/dist/FeedEvents.svelte +5 -2
  60. package/dist/FeedEvents.svelte.d.ts +4 -17
  61. package/dist/FeedIconEvent.svelte +5 -3
  62. package/dist/FeedIconEvent.svelte.d.ts +4 -19
  63. package/dist/FeedIconStatus.svelte +23 -18
  64. package/dist/FeedIconStatus.svelte.d.ts +4 -17
  65. package/dist/FeedItem.svelte +33 -28
  66. package/dist/FeedItem.svelte.d.ts +4 -30
  67. package/dist/FeedItemDetail.svelte +21 -13
  68. package/dist/FeedItemDetail.svelte.d.ts +4 -23
  69. package/dist/FeedViewer.svelte +6 -13
  70. package/dist/FeedViewer.svelte.d.ts +4 -21
  71. package/dist/FormLayoutModal.svelte +9 -3
  72. package/dist/FormLayoutModal.svelte.d.ts +4 -29
  73. package/dist/GlobalSearch.svelte +38 -31
  74. package/dist/GlobalSearch.svelte.d.ts +4 -18
  75. package/dist/InputCheckbox.svelte +23 -14
  76. package/dist/InputCheckbox.svelte.d.ts +4 -23
  77. package/dist/InputError.svelte +4 -1
  78. package/dist/InputError.svelte.d.ts +4 -16
  79. package/dist/InputLabel.svelte +5 -3
  80. package/dist/InputLabel.svelte.d.ts +4 -18
  81. package/dist/InputRadio.svelte +25 -19
  82. package/dist/InputRadio.svelte.d.ts +4 -21
  83. package/dist/InputSearch.svelte +66 -46
  84. package/dist/InputSearch.svelte.d.ts +9 -32
  85. package/dist/InputSelect.svelte +36 -33
  86. package/dist/InputSelect.svelte.d.ts +4 -31
  87. package/dist/InputText.svelte +64 -48
  88. package/dist/InputText.svelte.d.ts +4 -28
  89. package/dist/InputTextarea.svelte +38 -29
  90. package/dist/InputTextarea.svelte.d.ts +4 -25
  91. package/dist/InputToggle.svelte +29 -22
  92. package/dist/InputToggle.svelte.d.ts +4 -20
  93. package/dist/MenuItem.svelte +99 -87
  94. package/dist/MenuItem.svelte.d.ts +5 -29
  95. package/dist/MenuItemCollapsible.svelte +26 -18
  96. package/dist/MenuItemCollapsible.svelte.d.ts +4 -24
  97. package/dist/Notification.svelte +35 -31
  98. package/dist/Notification.svelte.d.ts +4 -20
  99. package/dist/ProfileAvatar.svelte +26 -19
  100. package/dist/ProfileAvatar.svelte.d.ts +4 -21
  101. package/dist/ProfileSelector.svelte +25 -17
  102. package/dist/ProfileSelector.svelte.d.ts +4 -22
  103. package/dist/SectionLayout.svelte +6 -3
  104. package/dist/SectionLayout.svelte.d.ts +4 -18
  105. package/dist/SeparatorHorizontal.svelte +1 -1
  106. package/dist/SeparatorHorizontal.svelte.d.ts +22 -19
  107. package/dist/ShortcutWrapper.svelte +7 -1
  108. package/dist/ShortcutWrapper.svelte.d.ts +4 -27
  109. package/dist/StatusLabel.svelte +16 -12
  110. package/dist/StatusLabel.svelte.d.ts +4 -18
  111. package/dist/StepIconList.svelte +44 -41
  112. package/dist/StepIconList.svelte.d.ts +4 -17
  113. package/dist/TagBeta.svelte.d.ts +22 -19
  114. package/dist/TagSearch.svelte +19 -20
  115. package/dist/TagSearch.svelte.d.ts +4 -22
  116. package/dist/TagStatus.svelte +42 -37
  117. package/dist/TagStatus.svelte.d.ts +4 -19
  118. package/dist/TitleMain.svelte +9 -2
  119. package/dist/TitleMain.svelte.d.ts +4 -18
  120. package/dist/TitleSection.svelte +9 -2
  121. package/dist/TitleSection.svelte.d.ts +4 -18
  122. package/dist/UuidCopy.svelte +61 -48
  123. package/dist/UuidCopy.svelte.d.ts +4 -26
  124. package/dist/alert-dialog/alert-dialog-action.svelte +15 -15
  125. package/dist/alert-dialog/alert-dialog-action.svelte.d.ts +5 -26
  126. package/dist/alert-dialog/alert-dialog-cancel.svelte +13 -10
  127. package/dist/alert-dialog/alert-dialog-cancel.svelte.d.ts +3 -22
  128. package/dist/alert-dialog/alert-dialog-content.svelte +19 -15
  129. package/dist/alert-dialog/alert-dialog-content.svelte.d.ts +6 -15
  130. package/dist/alert-dialog/alert-dialog-description.svelte +11 -6
  131. package/dist/alert-dialog/alert-dialog-description.svelte.d.ts +3 -16
  132. package/dist/alert-dialog/alert-dialog-footer.svelte +11 -5
  133. package/dist/alert-dialog/alert-dialog-footer.svelte.d.ts +4 -16
  134. package/dist/alert-dialog/alert-dialog-header.svelte +14 -5
  135. package/dist/alert-dialog/alert-dialog-header.svelte.d.ts +4 -16
  136. package/dist/alert-dialog/alert-dialog-overlay.svelte +10 -13
  137. package/dist/alert-dialog/alert-dialog-overlay.svelte.d.ts +3 -14
  138. package/dist/alert-dialog/alert-dialog-title.svelte +11 -8
  139. package/dist/alert-dialog/alert-dialog-title.svelte.d.ts +3 -16
  140. package/dist/alert-dialog/alert-dialog-trigger.svelte +6 -0
  141. package/dist/alert-dialog/alert-dialog-trigger.svelte.d.ts +4 -0
  142. package/dist/alert-dialog/index.d.ts +3 -4
  143. package/dist/alert-dialog/index.js +2 -2
  144. package/dist/button/button.svelte +76 -18
  145. package/dist/button/button.svelte.d.ts +62 -14
  146. package/dist/button/index.d.ts +2 -60
  147. package/dist/button/index.js +1 -26
  148. package/dist/helpers.d.ts +4 -1
  149. package/dist/helpers.js +35 -0
  150. package/dist/index.d.ts +1 -3
  151. package/dist/index.js +0 -4
  152. package/dist/range-calendar/index.d.ts +20 -0
  153. package/dist/range-calendar/index.js +22 -0
  154. package/dist/range-calendar/range-calendar-caption.svelte +71 -0
  155. package/dist/range-calendar/range-calendar-caption.svelte.d.ts +19 -0
  156. package/dist/range-calendar/range-calendar-cell.svelte +18 -0
  157. package/dist/range-calendar/range-calendar-cell.svelte.d.ts +4 -0
  158. package/dist/range-calendar/range-calendar-day.svelte +41 -0
  159. package/dist/range-calendar/range-calendar-day.svelte.d.ts +4 -0
  160. package/dist/range-calendar/range-calendar-grid-row.svelte +11 -0
  161. package/dist/range-calendar/range-calendar-grid-row.svelte.d.ts +4 -0
  162. package/dist/range-calendar/range-calendar-grid.svelte +15 -0
  163. package/dist/range-calendar/range-calendar-grid.svelte.d.ts +4 -0
  164. package/dist/range-calendar/range-calendar-head-cell.svelte +18 -0
  165. package/dist/range-calendar/range-calendar-head-cell.svelte.d.ts +4 -0
  166. package/dist/range-calendar/range-calendar-header.svelte +18 -0
  167. package/dist/range-calendar/range-calendar-header.svelte.d.ts +4 -0
  168. package/dist/range-calendar/range-calendar-heading.svelte +15 -0
  169. package/dist/range-calendar/range-calendar-heading.svelte.d.ts +4 -0
  170. package/dist/range-calendar/range-calendar-month-select.svelte +44 -0
  171. package/dist/range-calendar/range-calendar-month-select.svelte.d.ts +4 -0
  172. package/dist/range-calendar/range-calendar-month.svelte +14 -0
  173. package/dist/range-calendar/range-calendar-month.svelte.d.ts +5 -0
  174. package/dist/range-calendar/range-calendar-months.svelte +18 -0
  175. package/dist/range-calendar/range-calendar-months.svelte.d.ts +5 -0
  176. package/dist/range-calendar/range-calendar-nav.svelte +18 -0
  177. package/dist/range-calendar/range-calendar-nav.svelte.d.ts +5 -0
  178. package/dist/range-calendar/range-calendar-next-button.svelte +30 -0
  179. package/dist/range-calendar/range-calendar-next-button.svelte.d.ts +8 -0
  180. package/dist/range-calendar/range-calendar-prev-button.svelte +30 -0
  181. package/dist/range-calendar/range-calendar-prev-button.svelte.d.ts +8 -0
  182. package/dist/range-calendar/range-calendar-year-select.svelte +43 -0
  183. package/dist/range-calendar/range-calendar-year-select.svelte.d.ts +4 -0
  184. package/dist/range-calendar/range-calendar.svelte +109 -0
  185. package/dist/range-calendar/range-calendar.svelte.d.ts +21 -0
  186. package/dist/svg/BgPattern.svelte.d.ts +22 -19
  187. package/dist/svg/IconContact.svelte +6 -1
  188. package/dist/svg/IconContact.svelte.d.ts +5 -15
  189. package/dist/svg/IconEmpty.svelte.d.ts +22 -19
  190. package/dist/svg/IconFile.svelte +6 -1
  191. package/dist/svg/IconFile.svelte.d.ts +5 -15
  192. package/dist/svg/IconInvoice.svelte +6 -1
  193. package/dist/svg/IconInvoice.svelte.d.ts +5 -15
  194. package/dist/svg/IconNoResults.svelte +6 -1
  195. package/dist/svg/IconNoResults.svelte.d.ts +5 -15
  196. package/dist/svg/IconPdf.svelte +6 -1
  197. package/dist/svg/IconPdf.svelte.d.ts +5 -15
  198. package/dist/svg/IconProduct.svelte +6 -1
  199. package/dist/svg/IconProduct.svelte.d.ts +5 -15
  200. package/dist/table/table-body.svelte +10 -5
  201. package/dist/table/table-body.svelte.d.ts +4 -16
  202. package/dist/table/table-caption.svelte +14 -5
  203. package/dist/table/table-caption.svelte.d.ts +4 -16
  204. package/dist/table/table-cell.svelte +16 -7
  205. package/dist/table/table-cell.svelte.d.ts +4 -19
  206. package/dist/table/table-footer.svelte +14 -5
  207. package/dist/table/table-footer.svelte.d.ts +4 -16
  208. package/dist/table/table-head.svelte +11 -5
  209. package/dist/table/table-head.svelte.d.ts +4 -16
  210. package/dist/table/table-header.svelte +17 -8
  211. package/dist/table/table-header.svelte.d.ts +4 -19
  212. package/dist/table/table-row.svelte +22 -8
  213. package/dist/table/table-row.svelte.d.ts +4 -22
  214. package/dist/table/table.svelte +11 -6
  215. package/dist/table/table.svelte.d.ts +4 -16
  216. package/dist/tabs/tabs-content.svelte +13 -8
  217. package/dist/tabs/tabs-content.svelte.d.ts +3 -16
  218. package/dist/tabs/tabs-list.svelte +7 -6
  219. package/dist/tabs/tabs-list.svelte.d.ts +3 -16
  220. package/dist/tabs/tabs-trigger.svelte +13 -9
  221. package/dist/tabs/tabs-trigger.svelte.d.ts +3 -14
  222. package/dist/tabs/tabs.svelte +12 -7
  223. package/dist/tabs/tabs.svelte.d.ts +3 -16
  224. package/dist/tooltip/index.d.ts +5 -3
  225. package/dist/tooltip/index.js +5 -3
  226. package/dist/tooltip/tooltip-content.svelte +42 -23
  227. package/dist/tooltip/tooltip-content.svelte.d.ts +5 -15
  228. package/dist/tooltip/tooltip-trigger.svelte +8 -0
  229. package/dist/tooltip/tooltip-trigger.svelte.d.ts +4 -0
  230. package/dist/tw.theme.d.ts +2 -9
  231. package/dist/tw.theme.js +0 -5
  232. package/dist/types.d.ts +484 -25
  233. package/dist/utils.d.ts +10 -1
  234. package/package.json +32 -41
  235. package/README.md +0 -234
  236. package/dist/BaseTableHeaderSortBy.svelte +0 -22
  237. package/dist/BaseTableHeaderSortBy.svelte.d.ts +0 -20
  238. package/dist/ComboBox.svelte +0 -12
  239. package/dist/ComboBox.svelte.d.ts +0 -21
  240. package/dist/ComboBoxContent.svelte +0 -33
  241. package/dist/ComboBoxContent.svelte.d.ts +0 -20
  242. package/dist/ProgressBar.svelte +0 -6
  243. package/dist/ProgressBar.svelte.d.ts +0 -16
  244. package/dist/alert-dialog/alert-dialog-portal.svelte +0 -6
  245. package/dist/alert-dialog/alert-dialog-portal.svelte.d.ts +0 -17
  246. package/dist/popui.css +0 -1
  247. package/dist/wcdispatch.d.ts +0 -1
  248. package/dist/wcdispatch.js +0 -9
@@ -1,196 +1,234 @@
1
- <script>import { intersect } from "svelte-intersection-observer-action";
2
- import { createEventDispatcher } from "svelte";
3
- import BaseCounter from "./BaseCounter.svelte";
4
- import BaseTableRow from "./BaseTableRow.svelte";
5
- import { isInputFocused } from "./helpers.js";
6
- import BaseTableCellContent from "./BaseTableCellContent.svelte";
7
- import { Table, TableHead, TableHeader, TableRow } from "./table/index.js";
8
- import BaseTableCheckbox from "./BaseTableCheckbox.svelte";
9
- import BaseTableHeaderContent from "./BaseTableHeaderContent.svelte";
10
- import TableBody from "./table/table-body.svelte";
11
- const dispatch = createEventDispatcher();
12
- const callback = (entry) => {
13
- if (entry.intersectionRatio && entry.isIntersecting) {
14
- dispatch("tableEndReached");
15
- }
16
- };
17
- const intersectOptions = { callback };
18
- let metaKeyPressed = false;
19
- let shiftKeyPressed = false;
20
- let lastSelected = {};
21
- let lastSelectedForShift = {};
22
- let selectWithArrowPosition = -1;
23
- let selectionMode = "keyboard";
24
- export let sortBy = "";
25
- export let sortDirection = "";
26
- export let fields = [];
27
- export let data = [];
28
- export let getActions = void 0;
29
- export let groupLabel = void 0;
30
- export let disableRowClick = false;
31
- export let hideCounter = false;
32
- export let selectable = false;
33
- export let selectedRows = [];
34
- export let selectedTrackedBy = "id";
35
- export let hideSelectAll = false;
36
- export let disableKeyboardNavigation = false;
37
- $:
38
- groupedData = groupData(data);
39
- $:
40
- addExtraCell = getActions instanceof Function;
41
- $:
42
- indeterminate = selectedRows.length > 0 && selectedRows.length < data.length;
43
- $:
44
- allChecked = selectedRows.length === data.length;
45
- $:
46
- flattedData = groupedData.flatMap((d) => d.rows);
47
- $:
48
- lastSelectedIndex = flattedData.findIndex(
49
- (d) => d[selectedTrackedBy] === lastSelected[selectedTrackedBy]
50
- );
51
- function groupData(rows) {
52
- if (rows.length === 0)
53
- return [];
54
- const groups = [];
55
- rows.forEach((row) => {
56
- const rowLabel = groupLabel instanceof Function ? groupLabel(row) : "";
57
- const groupExist = groups.find((g) => g.label === rowLabel);
58
- if (groupExist) {
59
- groupExist.rows.push(row);
60
- } else {
61
- groups.push({ label: rowLabel, rows: [row] });
1
+ <script lang="ts">
2
+ import { intersect } from 'svelte-intersection-observer-action'
3
+ import type { BaseTableProps, TableDataRow, TableGroup } from './types.js'
4
+ import BaseCounter from './BaseCounter.svelte'
5
+ import BaseTableRow from './BaseTableRow.svelte'
6
+ import { isInputFocused } from './helpers.js'
7
+ import BaseTableCellContent from './BaseTableCellContent.svelte'
8
+ import { Table, TableHead, TableHeader, TableRow } from './table/index.js'
9
+ import BaseTableCheckbox from './BaseTableCheckbox.svelte'
10
+ import BaseTableHeaderContent from './BaseTableHeaderContent.svelte'
11
+ import TableBody from './table/table-body.svelte'
12
+
13
+ const callback = (entry: IntersectionObserverEntry) => {
14
+ if (entry.intersectionRatio && entry.isIntersecting) {
15
+ ontableEndReached?.()
62
16
  }
63
- });
64
- return groups;
65
- }
66
- function toggleAllSelected(selected) {
67
- selectedRows = [];
68
- lastSelected = {};
69
- dispatch("selectAll", selected);
70
- if (!selected)
71
- return;
72
- selectedRows = data;
73
- }
74
- function selectRow(row) {
75
- lastSelectedForShift = row;
76
- selectedRows = [.../* @__PURE__ */ new Set([...selectedRows, row])];
77
- }
78
- function unselectRow(row) {
79
- selectedRows = selectedRows.filter((r) => r[selectedTrackedBy] !== row[selectedTrackedBy]);
80
- if (!selectedRows.length) {
81
- lastSelected = {};
82
17
  }
83
- }
84
- function rowIsSelected(row) {
85
- return selectedRows.find((r) => r[selectedTrackedBy] === row[selectedTrackedBy]);
86
- }
87
- function toggleRow(row) {
88
- if (rowIsSelected(row)) {
89
- unselectRow(row);
90
- } else {
91
- selectRow(row);
18
+ const intersectOptions = { callback }
19
+
20
+ let metaKeyPressed = $state(false)
21
+ let shiftKeyPressed = $state(false)
22
+ let lastSelected: TableDataRow = $state({})
23
+ let lastSelectedForShift: TableDataRow = {}
24
+ let selectWithArrowPosition = $state(-1)
25
+ let selectionMode = $state('keyboard')
26
+
27
+ let {
28
+ sortBy = '',
29
+ sortDirection = '',
30
+ fields = [],
31
+ data = [],
32
+ getActions = undefined,
33
+ groupLabel = undefined,
34
+ disableRowClick = false,
35
+ hideCounter = false,
36
+ selectable = false,
37
+ selectedRows = $bindable([]),
38
+ selectedTrackedBy = 'id',
39
+ hideSelectAll = false,
40
+ disableKeyboardNavigation = false,
41
+ ontableEndReached,
42
+ onSelectAllRows,
43
+ onRowClick,
44
+ onRowNewTabClick,
45
+ onRowRightClick,
46
+ onCopied,
47
+ onOrderBy,
48
+ onClickAction,
49
+ ...rest
50
+ }: BaseTableProps = $props()
51
+
52
+ function groupData(rows: TableDataRow[]): TableGroup[] {
53
+ if (rows.length === 0) return []
54
+
55
+ const groups: TableGroup[] = []
56
+
57
+ rows.forEach((row) => {
58
+ const rowLabel = groupLabel instanceof Function ? groupLabel(row) : ''
59
+ const groupExist = groups.find((g) => g.label === rowLabel)
60
+
61
+ if (groupExist) {
62
+ groupExist.rows.push(row)
63
+ } else {
64
+ groups.push({ label: rowLabel, rows: [row] })
65
+ }
66
+ })
67
+
68
+ return groups
92
69
  }
93
- }
94
- function selectRange(to) {
95
- if (lastSelectedIndex < 0)
96
- return;
97
- let fromIndex = flattedData.findIndex(
98
- (d) => d[selectedTrackedBy] === lastSelectedForShift[selectedTrackedBy]
99
- );
100
- let toIndex = flattedData.findIndex((d) => d[selectedTrackedBy] === to[selectedTrackedBy]);
101
- if (fromIndex > toIndex) {
102
- ;
103
- [fromIndex, toIndex] = [toIndex, fromIndex];
70
+
71
+ function toggleAllSelected(selected: boolean) {
72
+ selectedRows = []
73
+ lastSelected = {}
74
+
75
+ onSelectAllRows?.(selected)
76
+
77
+ if (!selected) return
78
+
79
+ selectedRows = data
104
80
  }
105
- const itemsToSelect = flattedData.slice(fromIndex, toIndex + 1);
106
- selectedRows = [.../* @__PURE__ */ new Set([...selectedRows, ...itemsToSelect])];
107
- }
108
- function handleKeydown(event) {
109
- if (disableKeyboardNavigation)
110
- return;
111
- if (isInputFocused()) {
112
- return;
81
+
82
+ function selectRow(row: TableDataRow) {
83
+ lastSelectedForShift = row
84
+ selectedRows = [...new Set([...selectedRows, row])]
113
85
  }
114
- selectionMode = "keyboard";
115
- if (event.key === "Escape" || event.key === "Esc") {
116
- event.preventDefault();
117
- selectedRows = [];
118
- lastSelected = {};
86
+
87
+ function unselectRow(row: TableDataRow) {
88
+ selectedRows = selectedRows.filter((r) => r[selectedTrackedBy] !== row[selectedTrackedBy])
89
+ if (!selectedRows.length) {
90
+ lastSelected = {}
91
+ }
119
92
  }
120
- if ((event.code === "Space" || event.key === " ") && lastSelectedIndex >= 0) {
121
- event.preventDefault();
122
- toggleRow(lastSelected);
93
+
94
+ function rowIsSelected(row: TableDataRow) {
95
+ return selectedRows.find((r) => r[selectedTrackedBy] === row[selectedTrackedBy])
123
96
  }
124
- metaKeyPressed = event.metaKey;
125
- shiftKeyPressed = event.shiftKey;
126
- if (event.key === "Enter") {
127
- if (lastSelectedIndex >= 0) {
128
- event.preventDefault();
129
- dispatch("rowClick", lastSelected);
97
+
98
+ function toggleRow(row: TableDataRow) {
99
+ if (rowIsSelected(row)) {
100
+ unselectRow(row)
101
+ } else {
102
+ selectRow(row)
130
103
  }
131
- return;
132
104
  }
133
- if (event.key === "Shift") {
134
- event.preventDefault();
135
- selectWithArrowPosition = lastSelectedIndex;
136
- return;
105
+
106
+ function selectRange(to: TableDataRow) {
107
+ if (lastSelectedIndex < 0) return
108
+
109
+ let fromIndex = flattedData.findIndex(
110
+ (d) => d[selectedTrackedBy] === lastSelectedForShift[selectedTrackedBy]
111
+ )
112
+ let toIndex = flattedData.findIndex((d) => d[selectedTrackedBy] === to[selectedTrackedBy])
113
+ if (fromIndex > toIndex) {
114
+ ;[fromIndex, toIndex] = [toIndex, fromIndex]
115
+ }
116
+
117
+ const itemsToSelect = flattedData.slice(fromIndex, toIndex + 1)
118
+
119
+ selectedRows = [...new Set([...selectedRows, ...itemsToSelect])]
137
120
  }
138
- if (event.key === "ArrowUp") {
139
- event.preventDefault();
140
- const toIndex = lastSelectedIndex - 1;
141
- const to = flattedData[toIndex];
142
- if (!to)
143
- return;
144
- if (!shiftKeyPressed) {
145
- lastSelected = to;
146
- return;
121
+
122
+ function handleKeydown(event: KeyboardEvent) {
123
+ if (disableKeyboardNavigation) return
124
+
125
+ // If any input is focused on the rest of the window we dont want to break the default behavior
126
+ if (isInputFocused()) {
127
+ return
147
128
  }
148
- if (!rowIsSelected(lastSelected)) {
149
- selectRow(lastSelected);
129
+
130
+ selectionMode = 'keyboard'
131
+
132
+ if (event.key === 'Escape' || event.key === 'Esc') {
133
+ event.preventDefault()
134
+ selectedRows = []
135
+ lastSelected = {}
150
136
  }
151
- if (toIndex < selectWithArrowPosition) {
152
- selectRow(to);
153
- } else {
154
- unselectRow(lastSelected);
137
+
138
+ if ((event.code === 'Space' || event.key === ' ') && lastSelectedIndex >= 0) {
139
+ event.preventDefault()
140
+ toggleRow(lastSelected)
155
141
  }
156
- lastSelected = to;
157
- }
158
- if (event.key === "ArrowDown") {
159
- event.preventDefault();
160
- if (lastSelectedIndex < 0) {
161
- if (shiftKeyPressed) {
162
- selectRow(flattedData[0]);
142
+
143
+ metaKeyPressed = event.metaKey
144
+ shiftKeyPressed = event.shiftKey
145
+
146
+ if (event.key === 'Enter') {
147
+ if (lastSelectedIndex >= 0) {
148
+ event.preventDefault()
149
+ onRowClick?.(lastSelected)
163
150
  }
164
- lastSelected = flattedData[0];
165
- return;
151
+ return
166
152
  }
167
- const toIndex = lastSelectedIndex + 1;
168
- const to = flattedData[toIndex];
169
- if (!to)
170
- return;
171
- if (!shiftKeyPressed) {
172
- lastSelected = to;
173
- return;
153
+
154
+ if (event.key === 'Shift') {
155
+ event.preventDefault()
156
+ selectWithArrowPosition = lastSelectedIndex
157
+ return
174
158
  }
175
- if (!rowIsSelected(lastSelected)) {
176
- selectRow(lastSelected);
159
+
160
+ if (event.key === 'ArrowUp') {
161
+ event.preventDefault()
162
+ const toIndex = lastSelectedIndex - 1
163
+ const to = flattedData[toIndex]
164
+
165
+ if (!to) return
166
+
167
+ if (!shiftKeyPressed) {
168
+ lastSelected = to
169
+ return
170
+ }
171
+
172
+ if (!rowIsSelected(lastSelected)) {
173
+ selectRow(lastSelected)
174
+ }
175
+
176
+ if (toIndex < selectWithArrowPosition) {
177
+ selectRow(to)
178
+ } else {
179
+ unselectRow(lastSelected)
180
+ }
181
+ lastSelected = to
177
182
  }
178
- if (toIndex > selectWithArrowPosition) {
179
- selectRow(to);
180
- } else {
181
- unselectRow(lastSelected);
183
+
184
+ if (event.key === 'ArrowDown') {
185
+ event.preventDefault()
186
+ if (lastSelectedIndex < 0) {
187
+ if (shiftKeyPressed) {
188
+ selectRow(flattedData[0])
189
+ }
190
+ lastSelected = flattedData[0]
191
+ return
192
+ }
193
+
194
+ const toIndex = lastSelectedIndex + 1
195
+ const to = flattedData[toIndex]
196
+
197
+ if (!to) return
198
+
199
+ if (!shiftKeyPressed) {
200
+ lastSelected = to
201
+ return
202
+ }
203
+
204
+ if (!rowIsSelected(lastSelected)) {
205
+ selectRow(lastSelected)
206
+ }
207
+
208
+ if (toIndex > selectWithArrowPosition) {
209
+ selectRow(to)
210
+ } else {
211
+ unselectRow(lastSelected)
212
+ }
213
+ lastSelected = to
182
214
  }
183
- lastSelected = to;
184
215
  }
185
- }
216
+ let groupedData = $derived(groupData(data))
217
+ let addExtraCell = $derived(getActions instanceof Function)
218
+ let indeterminate = $derived(selectedRows.length > 0 && selectedRows.length < data.length)
219
+ let allChecked = $derived(selectedRows.length === data.length)
220
+ let flattedData = $derived(groupedData.flatMap((d) => d.rows))
221
+ let lastSelectedIndex = $derived(
222
+ flattedData.findIndex((d) => d[selectedTrackedBy] === lastSelected[selectedTrackedBy])
223
+ )
186
224
  </script>
187
225
 
188
226
  <svelte:window
189
- on:mousemove={() => {
227
+ onmousemove={() => {
190
228
  selectionMode = 'mouse'
191
229
  }}
192
- on:keydown={handleKeydown}
193
- on:keyup={(event) => {
230
+ onkeydown={handleKeydown}
231
+ onkeyup={(event) => {
194
232
  metaKeyPressed = false
195
233
  shiftKeyPressed = false
196
234
 
@@ -201,7 +239,7 @@ function handleKeydown(event) {
201
239
  />
202
240
 
203
241
  <div class="w-full font-sans border rounded-md border-neutral-100">
204
- <Table class="hidden md:table" {...$$restProps}>
242
+ <Table class="hidden md:table" {...rest}>
205
243
  <colgroup>
206
244
  {#if selectable}
207
245
  <col style="width: 38px" />
@@ -223,7 +261,7 @@ function handleKeydown(event) {
223
261
  hidden={!selectedRows.length}
224
262
  {indeterminate}
225
263
  checked={allChecked}
226
- on:checked={() => {
264
+ onChecked={() => {
227
265
  toggleAllSelected(!selectedRows.length)
228
266
  }}
229
267
  />
@@ -236,13 +274,13 @@ function handleKeydown(event) {
236
274
  ? 'pl-3'
237
275
  : 'pl-0'} {i === fields.length - 1 && !addExtraCell ? 'pr-3' : 'pr-0'}"
238
276
  >
239
- <BaseTableHeaderContent {sortBy} {sortDirection} {field} on:orderBy />
277
+ <BaseTableHeaderContent {sortBy} {sortDirection} {field} {onOrderBy} />
240
278
  </TableHead>
241
279
  {/each}
242
280
  {#if addExtraCell}
243
281
  <!-- if table has actions cell we need to add an extra header -->
244
282
  <th scope="col" class="bg-white sticky top-0 z-10 rounded-tr-md">
245
- <div class="border-b border-neutral-100 h-9" />
283
+ <div class="border-b border-neutral-100 h-9"></div>
246
284
  </th>
247
285
  {/if}
248
286
  </TableRow>
@@ -283,20 +321,20 @@ function handleKeydown(event) {
283
321
  selected={selectable &&
284
322
  lastSelected &&
285
323
  row[selectedTrackedBy] === lastSelected[selectedTrackedBy]}
286
- on:click={() => {
324
+ onclick={() => {
287
325
  if (disableRowClick) return
288
326
 
289
327
  if (metaKeyPressed) {
290
- dispatch('rowNewTabClick', row)
328
+ onRowNewTabClick?.(row)
291
329
  } else {
292
- dispatch('rowClick', row)
330
+ onRowClick?.(row)
293
331
  }
294
332
  }}
295
- on:contextmenu={() => {
296
- dispatch('rowRightClick', row)
333
+ oncontextmenu={() => {
334
+ onRowRightClick?.(row)
297
335
  }}
298
- on:checked={(event) => {
299
- if (event.detail) {
336
+ onChecked={(checked) => {
337
+ if (checked) {
300
338
  if (shiftKeyPressed) {
301
339
  selectRange(row)
302
340
  } else {
@@ -307,12 +345,12 @@ function handleKeydown(event) {
307
345
  unselectRow(row)
308
346
  }
309
347
  }}
310
- on:hover={() => {
348
+ onmouseover={() => {
311
349
  if (shiftKeyPressed) return
312
350
  lastSelected = row
313
351
  }}
314
- on:action
315
- on:copied
352
+ {onClickAction}
353
+ {onCopied}
316
354
  />
317
355
  {/each}
318
356
  {/each}
@@ -324,13 +362,13 @@ function handleKeydown(event) {
324
362
  <button
325
363
  class:cursor-default={disableRowClick}
326
364
  class="w-full text-left border border-neutral-200 rounded"
327
- on:click={() => {
365
+ onclick={() => {
328
366
  if (disableRowClick) return
329
367
 
330
368
  if (metaKeyPressed) {
331
- dispatch('rowNewTabClick', row)
369
+ onRowNewTabClick?.(row)
332
370
  } else {
333
- dispatch('rowClick', row)
371
+ onRowClick?.(row)
334
372
  }
335
373
  }}
336
374
  >
@@ -341,7 +379,7 @@ function handleKeydown(event) {
341
379
  badge={field.helperBadge ? field.helperBadge(row) : null}
342
380
  status={field.helperStatus ? field.helperStatus(row) : null}
343
381
  data={field.formatter ? field.formatter(row) : row[field.slug] || ''}
344
- on:copied
382
+ {onCopied}
345
383
  />
346
384
  </div>
347
385
  {/each}
@@ -349,5 +387,5 @@ function handleKeydown(event) {
349
387
  {/each}
350
388
  {/each}
351
389
  </div>
352
- <div use:intersect={intersectOptions} />
390
+ <div use:intersect={intersectOptions}></div>
353
391
  </div>
@@ -1,39 +1,4 @@
1
- import { SvelteComponent } from "svelte";
2
- import type { TableActionProp, TableDataRow, TableField, TableGroupLabelProp, TableSortBy } from './types.js';
3
- declare const __propDef: {
4
- props: {
5
- [x: string]: any;
6
- sortBy?: string | undefined;
7
- sortDirection?: TableSortBy | undefined;
8
- fields?: TableField[] | undefined;
9
- data?: TableDataRow[] | undefined;
10
- getActions?: TableActionProp;
11
- groupLabel?: TableGroupLabelProp;
12
- disableRowClick?: boolean | undefined;
13
- hideCounter?: boolean | undefined;
14
- selectable?: boolean | undefined;
15
- selectedRows?: TableDataRow[] | undefined;
16
- selectedTrackedBy?: string | undefined;
17
- hideSelectAll?: boolean | undefined;
18
- disableKeyboardNavigation?: boolean | undefined;
19
- };
20
- events: {
21
- orderBy: CustomEvent<any>;
22
- action: CustomEvent<any>;
23
- copied: CustomEvent<any>;
24
- rowNewTabClick: CustomEvent<any>;
25
- rowClick: CustomEvent<any>;
26
- rowRightClick: CustomEvent<any>;
27
- tableEndReached: CustomEvent<any>;
28
- selectAll: CustomEvent<any>;
29
- } & {
30
- [evt: string]: CustomEvent<any>;
31
- };
32
- slots: {};
33
- };
34
- export type BaseTableProps = typeof __propDef.props;
35
- export type BaseTableEvents = typeof __propDef.events;
36
- export type BaseTableSlots = typeof __propDef.slots;
37
- export default class BaseTable extends SvelteComponent<BaseTableProps, BaseTableEvents, BaseTableSlots> {
38
- }
39
- export {};
1
+ import type { BaseTableProps } from './types.js';
2
+ declare const BaseTable: import("svelte").Component<BaseTableProps, {}, "selectedRows">;
3
+ type BaseTable = ReturnType<typeof BaseTable>;
4
+ export default BaseTable;
@@ -1,41 +1,51 @@
1
- <script>import { Icon } from "@steeze-ui/svelte-icon";
2
- import BaseDropdown from "./BaseDropdown.svelte";
3
- import { createEventDispatcher } from "svelte";
4
- import DrawerContext from "./DrawerContext.svelte";
5
- import { Options } from "@invopop/ui-icons";
6
- import clsx from "clsx";
7
- const dispatch = createEventDispatcher();
8
- export let actions;
9
- let actionDropdown;
10
- let isOpen = false;
11
- $:
12
- items = actions.map((a) => ({
13
- label: a.label,
14
- value: a,
15
- icon: a.icon,
16
- separator: a.separator,
17
- destructive: a.destructive
18
- }));
19
- $:
20
- overlayClasses = clsx({
21
- "group-hover:bg-neutral-800/[.05]": !isOpen,
22
- "bg-neutral-800/[.1]": isOpen
23
- });
24
- export const toggle = () => {
25
- actionDropdown.toggle();
26
- };
1
+ <script lang="ts">
2
+ import { Icon } from '@steeze-ui/svelte-icon'
3
+ import type { DrawerOption, BaseTableActionsProps } from './types.js'
4
+ import BaseDropdown from './BaseDropdown.svelte'
5
+ import DrawerContext from './DrawerContext.svelte'
6
+ import { Options } from '@invopop/ui-icons'
7
+ import clsx from 'clsx'
8
+
9
+ let { actions, onclick }: BaseTableActionsProps = $props()
10
+
11
+ let actionDropdown: BaseDropdown | undefined = $state()
12
+ let isOpen = $state(false)
13
+
14
+ let items = $derived(
15
+ actions.map((a) => ({
16
+ label: a.label,
17
+ value: a,
18
+ icon: a.icon,
19
+ separator: a.separator,
20
+ destructive: a.destructive
21
+ })) as DrawerOption[]
22
+ )
23
+
24
+ let overlayClasses = $derived(
25
+ clsx({
26
+ 'group-hover:bg-neutral-800/[.05]': !isOpen,
27
+ 'bg-neutral-800/[.1]': isOpen
28
+ })
29
+ )
30
+
31
+ export const toggle = () => {
32
+ actionDropdown?.toggle()
33
+ }
27
34
  </script>
28
35
 
29
- <BaseDropdown bind:isOpen bind:this={actionDropdown}>
30
- <div class="relative group flex justify-center items-center rounded p-1" slot="trigger">
31
- <span class="{overlayClasses} absolute inset-0 rounded" />
32
- <Icon slot="trigger" src={Options} class="w-4 text-neutral-500" />
36
+ {#snippet trigger()}
37
+ <div class="relative group flex justify-center items-center rounded p-1 cursor-pointer">
38
+ <span class="{overlayClasses} absolute inset-0 rounded"></span>
39
+ <Icon src={Options} class="w-4 text-neutral-500" />
33
40
  </div>
41
+ {/snippet}
42
+
43
+ <BaseDropdown bind:isOpen bind:this={actionDropdown} {trigger}>
34
44
  <DrawerContext
35
45
  {items}
36
- on:click={(e) => {
37
- dispatch('clickAction', e.detail)
38
- actionDropdown.toggle()
46
+ onclick={(e) => {
47
+ onclick?.(e)
48
+ actionDropdown?.toggle()
39
49
  }}
40
50
  />
41
51
  </BaseDropdown>
@@ -1,21 +1,6 @@
1
- import { SvelteComponent } from "svelte";
2
- import type { TableAction } from './types.js';
3
- declare const __propDef: {
4
- props: {
5
- actions: TableAction[];
6
- toggle?: (() => void) | undefined;
7
- };
8
- events: {
9
- clickAction: CustomEvent<any>;
10
- } & {
11
- [evt: string]: CustomEvent<any>;
12
- };
13
- slots: {};
14
- };
15
- export type BaseTableActionsProps = typeof __propDef.props;
16
- export type BaseTableActionsEvents = typeof __propDef.events;
17
- export type BaseTableActionsSlots = typeof __propDef.slots;
18
- export default class BaseTableActions extends SvelteComponent<BaseTableActionsProps, BaseTableActionsEvents, BaseTableActionsSlots> {
19
- get toggle(): () => void;
20
- }
21
- export {};
1
+ import type { BaseTableActionsProps } from './types.js';
2
+ declare const BaseTableActions: import("svelte").Component<BaseTableActionsProps, {
3
+ toggle: () => void;
4
+ }, "">;
5
+ type BaseTableActions = ReturnType<typeof BaseTableActions>;
6
+ export default BaseTableActions;