@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.
- package/dist/AlertDialog.svelte +84 -59
- package/dist/AlertDialog.svelte.d.ts +5 -29
- package/dist/BaseButton.svelte +106 -101
- package/dist/BaseButton.svelte.d.ts +4 -34
- package/dist/BaseCard.svelte +20 -12
- package/dist/BaseCard.svelte.d.ts +4 -26
- package/dist/BaseCounter.svelte +13 -9
- package/dist/BaseCounter.svelte.d.ts +4 -17
- package/dist/BaseDropdown.svelte +54 -38
- package/dist/BaseDropdown.svelte.d.ts +6 -26
- package/dist/BaseFlag.svelte +6 -4
- package/dist/BaseFlag.svelte.d.ts +4 -17
- package/dist/BaseTable.svelte +226 -188
- package/dist/BaseTable.svelte.d.ts +4 -39
- package/dist/BaseTableActions.svelte +43 -33
- package/dist/BaseTableActions.svelte.d.ts +6 -21
- package/dist/BaseTableCellContent.svelte +19 -13
- package/dist/BaseTableCellContent.svelte.d.ts +4 -24
- package/dist/BaseTableCheckbox.svelte +19 -12
- package/dist/BaseTableCheckbox.svelte.d.ts +4 -21
- package/dist/BaseTableHeaderContent.svelte +30 -22
- package/dist/BaseTableHeaderContent.svelte.d.ts +4 -21
- package/dist/BaseTableHeaderOrderBy.svelte +24 -0
- package/dist/BaseTableHeaderOrderBy.svelte.d.ts +4 -0
- package/dist/BaseTableRow.svelte +78 -60
- package/dist/BaseTableRow.svelte.d.ts +4 -32
- package/dist/Breadcrumbs.svelte +14 -10
- package/dist/Breadcrumbs.svelte.d.ts +4 -19
- package/dist/ButtonFile.svelte +40 -29
- package/dist/ButtonFile.svelte.d.ts +4 -25
- package/dist/ButtonUuidCopy.svelte +27 -20
- package/dist/ButtonUuidCopy.svelte.d.ts +4 -22
- package/dist/CardCheckbox.svelte +28 -19
- package/dist/CardCheckbox.svelte.d.ts +4 -28
- package/dist/CardRelation.svelte +9 -8
- package/dist/CardRelation.svelte.d.ts +4 -22
- package/dist/CompanySelector.svelte +49 -43
- package/dist/CompanySelector.svelte.d.ts +4 -22
- package/dist/CounterWorkflow.svelte +12 -8
- package/dist/CounterWorkflow.svelte.d.ts +4 -17
- package/dist/DataListItem.svelte +24 -14
- package/dist/DataListItem.svelte.d.ts +4 -22
- package/dist/DatePicker.svelte +186 -386
- package/dist/DatePicker.svelte.d.ts +4 -22
- package/dist/DrawerContext.svelte +33 -22
- package/dist/DrawerContext.svelte.d.ts +4 -24
- package/dist/DrawerContextItem.svelte +69 -56
- package/dist/DrawerContextItem.svelte.d.ts +4 -23
- package/dist/DrawerContextSeparator.svelte +1 -1
- package/dist/DrawerContextSeparator.svelte.d.ts +22 -19
- package/dist/DrawerContextWorkspace.svelte +31 -32
- package/dist/DrawerContextWorkspace.svelte.d.ts +4 -20
- package/dist/DropdownSelect.svelte +93 -81
- package/dist/DropdownSelect.svelte.d.ts +4 -27
- package/dist/EmptyStateIcon.svelte +13 -7
- package/dist/EmptyStateIcon.svelte.d.ts +4 -22
- package/dist/EmptyStateIllustration.svelte +41 -33
- package/dist/EmptyStateIllustration.svelte.d.ts +4 -21
- package/dist/FeedEvents.svelte +5 -2
- package/dist/FeedEvents.svelte.d.ts +4 -17
- package/dist/FeedIconEvent.svelte +5 -3
- package/dist/FeedIconEvent.svelte.d.ts +4 -19
- package/dist/FeedIconStatus.svelte +23 -18
- package/dist/FeedIconStatus.svelte.d.ts +4 -17
- package/dist/FeedItem.svelte +33 -28
- package/dist/FeedItem.svelte.d.ts +4 -30
- package/dist/FeedItemDetail.svelte +21 -13
- package/dist/FeedItemDetail.svelte.d.ts +4 -23
- package/dist/FeedViewer.svelte +6 -13
- package/dist/FeedViewer.svelte.d.ts +4 -21
- package/dist/FormLayoutModal.svelte +9 -3
- package/dist/FormLayoutModal.svelte.d.ts +4 -29
- package/dist/GlobalSearch.svelte +38 -31
- package/dist/GlobalSearch.svelte.d.ts +4 -18
- package/dist/InputCheckbox.svelte +23 -14
- package/dist/InputCheckbox.svelte.d.ts +4 -23
- package/dist/InputError.svelte +4 -1
- package/dist/InputError.svelte.d.ts +4 -16
- package/dist/InputLabel.svelte +5 -3
- package/dist/InputLabel.svelte.d.ts +4 -18
- package/dist/InputRadio.svelte +25 -19
- package/dist/InputRadio.svelte.d.ts +4 -21
- package/dist/InputSearch.svelte +66 -46
- package/dist/InputSearch.svelte.d.ts +9 -32
- package/dist/InputSelect.svelte +36 -33
- package/dist/InputSelect.svelte.d.ts +4 -31
- package/dist/InputText.svelte +64 -48
- package/dist/InputText.svelte.d.ts +4 -28
- package/dist/InputTextarea.svelte +38 -29
- package/dist/InputTextarea.svelte.d.ts +4 -25
- package/dist/InputToggle.svelte +29 -22
- package/dist/InputToggle.svelte.d.ts +4 -20
- package/dist/MenuItem.svelte +99 -87
- package/dist/MenuItem.svelte.d.ts +5 -29
- package/dist/MenuItemCollapsible.svelte +26 -18
- package/dist/MenuItemCollapsible.svelte.d.ts +4 -24
- package/dist/Notification.svelte +35 -31
- package/dist/Notification.svelte.d.ts +4 -20
- package/dist/ProfileAvatar.svelte +26 -19
- package/dist/ProfileAvatar.svelte.d.ts +4 -21
- package/dist/ProfileSelector.svelte +25 -17
- package/dist/ProfileSelector.svelte.d.ts +4 -22
- package/dist/SectionLayout.svelte +6 -3
- package/dist/SectionLayout.svelte.d.ts +4 -18
- package/dist/SeparatorHorizontal.svelte +1 -1
- package/dist/SeparatorHorizontal.svelte.d.ts +22 -19
- package/dist/ShortcutWrapper.svelte +7 -1
- package/dist/ShortcutWrapper.svelte.d.ts +4 -27
- package/dist/StatusLabel.svelte +16 -12
- package/dist/StatusLabel.svelte.d.ts +4 -18
- package/dist/StepIconList.svelte +44 -41
- package/dist/StepIconList.svelte.d.ts +4 -17
- package/dist/TagBeta.svelte.d.ts +22 -19
- package/dist/TagSearch.svelte +19 -20
- package/dist/TagSearch.svelte.d.ts +4 -22
- package/dist/TagStatus.svelte +42 -37
- package/dist/TagStatus.svelte.d.ts +4 -19
- package/dist/TitleMain.svelte +9 -2
- package/dist/TitleMain.svelte.d.ts +4 -18
- package/dist/TitleSection.svelte +9 -2
- package/dist/TitleSection.svelte.d.ts +4 -18
- package/dist/UuidCopy.svelte +61 -48
- package/dist/UuidCopy.svelte.d.ts +4 -26
- package/dist/alert-dialog/alert-dialog-action.svelte +15 -15
- package/dist/alert-dialog/alert-dialog-action.svelte.d.ts +5 -26
- package/dist/alert-dialog/alert-dialog-cancel.svelte +13 -10
- package/dist/alert-dialog/alert-dialog-cancel.svelte.d.ts +3 -22
- package/dist/alert-dialog/alert-dialog-content.svelte +19 -15
- package/dist/alert-dialog/alert-dialog-content.svelte.d.ts +6 -15
- package/dist/alert-dialog/alert-dialog-description.svelte +11 -6
- package/dist/alert-dialog/alert-dialog-description.svelte.d.ts +3 -16
- package/dist/alert-dialog/alert-dialog-footer.svelte +11 -5
- package/dist/alert-dialog/alert-dialog-footer.svelte.d.ts +4 -16
- package/dist/alert-dialog/alert-dialog-header.svelte +14 -5
- package/dist/alert-dialog/alert-dialog-header.svelte.d.ts +4 -16
- package/dist/alert-dialog/alert-dialog-overlay.svelte +10 -13
- package/dist/alert-dialog/alert-dialog-overlay.svelte.d.ts +3 -14
- package/dist/alert-dialog/alert-dialog-title.svelte +11 -8
- package/dist/alert-dialog/alert-dialog-title.svelte.d.ts +3 -16
- package/dist/alert-dialog/alert-dialog-trigger.svelte +6 -0
- package/dist/alert-dialog/alert-dialog-trigger.svelte.d.ts +4 -0
- package/dist/alert-dialog/index.d.ts +3 -4
- package/dist/alert-dialog/index.js +2 -2
- package/dist/button/button.svelte +76 -18
- package/dist/button/button.svelte.d.ts +62 -14
- package/dist/button/index.d.ts +2 -60
- package/dist/button/index.js +1 -26
- package/dist/helpers.d.ts +4 -1
- package/dist/helpers.js +35 -0
- package/dist/index.d.ts +1 -3
- package/dist/index.js +0 -4
- package/dist/range-calendar/index.d.ts +20 -0
- package/dist/range-calendar/index.js +22 -0
- package/dist/range-calendar/range-calendar-caption.svelte +71 -0
- package/dist/range-calendar/range-calendar-caption.svelte.d.ts +19 -0
- package/dist/range-calendar/range-calendar-cell.svelte +18 -0
- package/dist/range-calendar/range-calendar-cell.svelte.d.ts +4 -0
- package/dist/range-calendar/range-calendar-day.svelte +41 -0
- package/dist/range-calendar/range-calendar-day.svelte.d.ts +4 -0
- package/dist/range-calendar/range-calendar-grid-row.svelte +11 -0
- package/dist/range-calendar/range-calendar-grid-row.svelte.d.ts +4 -0
- package/dist/range-calendar/range-calendar-grid.svelte +15 -0
- package/dist/range-calendar/range-calendar-grid.svelte.d.ts +4 -0
- package/dist/range-calendar/range-calendar-head-cell.svelte +18 -0
- package/dist/range-calendar/range-calendar-head-cell.svelte.d.ts +4 -0
- package/dist/range-calendar/range-calendar-header.svelte +18 -0
- package/dist/range-calendar/range-calendar-header.svelte.d.ts +4 -0
- package/dist/range-calendar/range-calendar-heading.svelte +15 -0
- package/dist/range-calendar/range-calendar-heading.svelte.d.ts +4 -0
- package/dist/range-calendar/range-calendar-month-select.svelte +44 -0
- package/dist/range-calendar/range-calendar-month-select.svelte.d.ts +4 -0
- package/dist/range-calendar/range-calendar-month.svelte +14 -0
- package/dist/range-calendar/range-calendar-month.svelte.d.ts +5 -0
- package/dist/range-calendar/range-calendar-months.svelte +18 -0
- package/dist/range-calendar/range-calendar-months.svelte.d.ts +5 -0
- package/dist/range-calendar/range-calendar-nav.svelte +18 -0
- package/dist/range-calendar/range-calendar-nav.svelte.d.ts +5 -0
- package/dist/range-calendar/range-calendar-next-button.svelte +30 -0
- package/dist/range-calendar/range-calendar-next-button.svelte.d.ts +8 -0
- package/dist/range-calendar/range-calendar-prev-button.svelte +30 -0
- package/dist/range-calendar/range-calendar-prev-button.svelte.d.ts +8 -0
- package/dist/range-calendar/range-calendar-year-select.svelte +43 -0
- package/dist/range-calendar/range-calendar-year-select.svelte.d.ts +4 -0
- package/dist/range-calendar/range-calendar.svelte +109 -0
- package/dist/range-calendar/range-calendar.svelte.d.ts +21 -0
- package/dist/svg/BgPattern.svelte.d.ts +22 -19
- package/dist/svg/IconContact.svelte +6 -1
- package/dist/svg/IconContact.svelte.d.ts +5 -15
- package/dist/svg/IconEmpty.svelte.d.ts +22 -19
- package/dist/svg/IconFile.svelte +6 -1
- package/dist/svg/IconFile.svelte.d.ts +5 -15
- package/dist/svg/IconInvoice.svelte +6 -1
- package/dist/svg/IconInvoice.svelte.d.ts +5 -15
- package/dist/svg/IconNoResults.svelte +6 -1
- package/dist/svg/IconNoResults.svelte.d.ts +5 -15
- package/dist/svg/IconPdf.svelte +6 -1
- package/dist/svg/IconPdf.svelte.d.ts +5 -15
- package/dist/svg/IconProduct.svelte +6 -1
- package/dist/svg/IconProduct.svelte.d.ts +5 -15
- package/dist/table/table-body.svelte +10 -5
- package/dist/table/table-body.svelte.d.ts +4 -16
- package/dist/table/table-caption.svelte +14 -5
- package/dist/table/table-caption.svelte.d.ts +4 -16
- package/dist/table/table-cell.svelte +16 -7
- package/dist/table/table-cell.svelte.d.ts +4 -19
- package/dist/table/table-footer.svelte +14 -5
- package/dist/table/table-footer.svelte.d.ts +4 -16
- package/dist/table/table-head.svelte +11 -5
- package/dist/table/table-head.svelte.d.ts +4 -16
- package/dist/table/table-header.svelte +17 -8
- package/dist/table/table-header.svelte.d.ts +4 -19
- package/dist/table/table-row.svelte +22 -8
- package/dist/table/table-row.svelte.d.ts +4 -22
- package/dist/table/table.svelte +11 -6
- package/dist/table/table.svelte.d.ts +4 -16
- package/dist/tabs/tabs-content.svelte +13 -8
- package/dist/tabs/tabs-content.svelte.d.ts +3 -16
- package/dist/tabs/tabs-list.svelte +7 -6
- package/dist/tabs/tabs-list.svelte.d.ts +3 -16
- package/dist/tabs/tabs-trigger.svelte +13 -9
- package/dist/tabs/tabs-trigger.svelte.d.ts +3 -14
- package/dist/tabs/tabs.svelte +12 -7
- package/dist/tabs/tabs.svelte.d.ts +3 -16
- package/dist/tooltip/index.d.ts +5 -3
- package/dist/tooltip/index.js +5 -3
- package/dist/tooltip/tooltip-content.svelte +42 -23
- package/dist/tooltip/tooltip-content.svelte.d.ts +5 -15
- package/dist/tooltip/tooltip-trigger.svelte +8 -0
- package/dist/tooltip/tooltip-trigger.svelte.d.ts +4 -0
- package/dist/tw.theme.d.ts +2 -9
- package/dist/tw.theme.js +0 -5
- package/dist/types.d.ts +484 -25
- package/dist/utils.d.ts +10 -1
- package/package.json +32 -41
- package/README.md +0 -234
- package/dist/BaseTableHeaderSortBy.svelte +0 -22
- package/dist/BaseTableHeaderSortBy.svelte.d.ts +0 -20
- package/dist/ComboBox.svelte +0 -12
- package/dist/ComboBox.svelte.d.ts +0 -21
- package/dist/ComboBoxContent.svelte +0 -33
- package/dist/ComboBoxContent.svelte.d.ts +0 -20
- package/dist/ProgressBar.svelte +0 -6
- package/dist/ProgressBar.svelte.d.ts +0 -16
- package/dist/alert-dialog/alert-dialog-portal.svelte +0 -6
- package/dist/alert-dialog/alert-dialog-portal.svelte.d.ts +0 -17
- package/dist/popui.css +0 -1
- package/dist/wcdispatch.d.ts +0 -1
- package/dist/wcdispatch.js +0 -9
package/dist/BaseTable.svelte
CHANGED
|
@@ -1,196 +1,234 @@
|
|
|
1
|
-
<script
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
import
|
|
9
|
-
import
|
|
10
|
-
import
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
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
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
(
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
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
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
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
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
selectedRows
|
|
118
|
-
|
|
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
|
-
|
|
121
|
-
|
|
122
|
-
|
|
93
|
+
|
|
94
|
+
function rowIsSelected(row: TableDataRow) {
|
|
95
|
+
return selectedRows.find((r) => r[selectedTrackedBy] === row[selectedTrackedBy])
|
|
123
96
|
}
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
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
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
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
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
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
|
-
|
|
149
|
-
|
|
129
|
+
|
|
130
|
+
selectionMode = 'keyboard'
|
|
131
|
+
|
|
132
|
+
if (event.key === 'Escape' || event.key === 'Esc') {
|
|
133
|
+
event.preventDefault()
|
|
134
|
+
selectedRows = []
|
|
135
|
+
lastSelected = {}
|
|
150
136
|
}
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
137
|
+
|
|
138
|
+
if ((event.code === 'Space' || event.key === ' ') && lastSelectedIndex >= 0) {
|
|
139
|
+
event.preventDefault()
|
|
140
|
+
toggleRow(lastSelected)
|
|
155
141
|
}
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
if (
|
|
161
|
-
if (
|
|
162
|
-
|
|
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
|
-
|
|
165
|
-
return;
|
|
151
|
+
return
|
|
166
152
|
}
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
lastSelected = to;
|
|
173
|
-
return;
|
|
153
|
+
|
|
154
|
+
if (event.key === 'Shift') {
|
|
155
|
+
event.preventDefault()
|
|
156
|
+
selectWithArrowPosition = lastSelectedIndex
|
|
157
|
+
return
|
|
174
158
|
}
|
|
175
|
-
|
|
176
|
-
|
|
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
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
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
|
-
|
|
227
|
+
onmousemove={() => {
|
|
190
228
|
selectionMode = 'mouse'
|
|
191
229
|
}}
|
|
192
|
-
|
|
193
|
-
|
|
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" {
|
|
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
|
-
|
|
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}
|
|
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
|
-
|
|
324
|
+
onclick={() => {
|
|
287
325
|
if (disableRowClick) return
|
|
288
326
|
|
|
289
327
|
if (metaKeyPressed) {
|
|
290
|
-
|
|
328
|
+
onRowNewTabClick?.(row)
|
|
291
329
|
} else {
|
|
292
|
-
|
|
330
|
+
onRowClick?.(row)
|
|
293
331
|
}
|
|
294
332
|
}}
|
|
295
|
-
|
|
296
|
-
|
|
333
|
+
oncontextmenu={() => {
|
|
334
|
+
onRowRightClick?.(row)
|
|
297
335
|
}}
|
|
298
|
-
|
|
299
|
-
if (
|
|
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
|
-
|
|
348
|
+
onmouseover={() => {
|
|
311
349
|
if (shiftKeyPressed) return
|
|
312
350
|
lastSelected = row
|
|
313
351
|
}}
|
|
314
|
-
|
|
315
|
-
|
|
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
|
-
|
|
365
|
+
onclick={() => {
|
|
328
366
|
if (disableRowClick) return
|
|
329
367
|
|
|
330
368
|
if (metaKeyPressed) {
|
|
331
|
-
|
|
369
|
+
onRowNewTabClick?.(row)
|
|
332
370
|
} else {
|
|
333
|
-
|
|
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
|
-
|
|
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 {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
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
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
let
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
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
|
-
|
|
30
|
-
<div class="relative group flex justify-center items-center rounded p-1
|
|
31
|
-
<span class="{overlayClasses} absolute inset-0 rounded"
|
|
32
|
-
<Icon
|
|
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
|
-
|
|
37
|
-
|
|
38
|
-
actionDropdown
|
|
46
|
+
onclick={(e) => {
|
|
47
|
+
onclick?.(e)
|
|
48
|
+
actionDropdown?.toggle()
|
|
39
49
|
}}
|
|
40
50
|
/>
|
|
41
51
|
</BaseDropdown>
|
|
@@ -1,21 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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;
|