@softwareone/spi-sv5-library 1.9.0 → 1.10.1

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 (53) hide show
  1. package/dist/Button/Button.svelte +16 -0
  2. package/dist/Controls/Input/Input.svelte +1 -1
  3. package/dist/Controls/{Label.svelte → Label/Label.svelte} +1 -1
  4. package/dist/Controls/Select/Select.svelte +1 -1
  5. package/dist/Controls/TextArea/TextArea.svelte +1 -1
  6. package/dist/Controls/Toggle/Toggle.svelte +1 -1
  7. package/dist/ProgressWizard/ProgressWizard.svelte +3 -3
  8. package/dist/Table/ActionsColumn.svelte +203 -0
  9. package/dist/Table/ActionsColumn.svelte.d.ts +9 -0
  10. package/dist/Table/Body.svelte +90 -0
  11. package/dist/Table/Body.svelte.d.ts +27 -0
  12. package/dist/Table/ColumnVisibilityDropdown.svelte +174 -0
  13. package/dist/Table/ColumnVisibilityDropdown.svelte.d.ts +27 -0
  14. package/dist/Table/Footer.svelte +34 -0
  15. package/dist/Table/Footer.svelte.d.ts +28 -0
  16. package/dist/Table/Header.svelte +176 -0
  17. package/dist/Table/Header.svelte.d.ts +28 -0
  18. package/dist/Table/PageSize.svelte +164 -0
  19. package/dist/Table/PageSize.svelte.d.ts +28 -0
  20. package/dist/Table/Pagination.svelte +145 -0
  21. package/dist/Table/Pagination.svelte.d.ts +27 -0
  22. package/dist/Table/RowCheckBox.svelte +31 -0
  23. package/dist/Table/RowCheckBox.svelte.d.ts +9 -0
  24. package/dist/Table/Skeleton.svelte +99 -0
  25. package/dist/Table/Skeleton.svelte.d.ts +7 -0
  26. package/dist/Table/Table.svelte +351 -0
  27. package/dist/Table/Table.svelte.d.ts +45 -0
  28. package/dist/Table/adapter/flex-render.svelte +40 -0
  29. package/dist/Table/adapter/flex-render.svelte.d.ts +28 -0
  30. package/dist/Table/adapter/index.d.ts +4 -0
  31. package/dist/Table/adapter/index.js +4 -0
  32. package/dist/Table/adapter/render-component.d.ts +13 -0
  33. package/dist/Table/adapter/render-component.js +18 -0
  34. package/dist/Table/adapter/table.svelte.d.ts +6 -0
  35. package/dist/Table/adapter/table.svelte.js +66 -0
  36. package/dist/Table/consts.d.ts +4 -0
  37. package/dist/Table/consts.js +4 -0
  38. package/dist/Table/context.d.ts +4 -0
  39. package/dist/Table/context.js +15 -0
  40. package/dist/Table/excel-setting.d.ts +8 -0
  41. package/dist/Table/excel-setting.js +3 -0
  42. package/dist/Table/excel.d.ts +4 -0
  43. package/dist/Table/excel.js +66 -0
  44. package/dist/Table/index.d.ts +6 -0
  45. package/dist/Table/index.js +6 -0
  46. package/dist/Table/types.d.ts +16 -0
  47. package/dist/Table/types.js +1 -0
  48. package/dist/Table/util.d.ts +4 -0
  49. package/dist/Table/util.js +46 -0
  50. package/dist/index.d.ts +2 -1
  51. package/dist/index.js +2 -1
  52. package/package.json +21 -1
  53. /package/dist/Controls/{Label.svelte.d.ts → Label/Label.svelte.d.ts} +0 -0
@@ -0,0 +1,4 @@
1
+ export declare const DEFAULT_PAGE = 1;
2
+ export declare const DEFAULT_PAGE_LIMIT = 10;
3
+ export declare const DEFAULT_MIN_PAGE_LIMIT = 5;
4
+ export declare const DEFAULT_ITEMS_PER_PAGE_OPTIONS: number[];
@@ -0,0 +1,4 @@
1
+ export const DEFAULT_PAGE = 1;
2
+ export const DEFAULT_PAGE_LIMIT = 10;
3
+ export const DEFAULT_MIN_PAGE_LIMIT = 5;
4
+ export const DEFAULT_ITEMS_PER_PAGE_OPTIONS = [10, 25, 50, 75, 100];
@@ -0,0 +1,4 @@
1
+ import { type Writable } from 'svelte/store';
2
+ import type { Pagination } from './types.js';
3
+ export declare const setPaginationTableContext: () => Writable<Pagination>;
4
+ export declare const getPaginationTableContext: () => Writable<Pagination> | undefined;
@@ -0,0 +1,15 @@
1
+ import { getContext, setContext } from 'svelte';
2
+ import { writable } from 'svelte/store';
3
+ const paginationTableKey = Symbol('paginationTableKey');
4
+ export const setPaginationTableContext = () => {
5
+ const paginationTable = writable({
6
+ totalPages: 0,
7
+ totalItems: 0,
8
+ currentPage: 1
9
+ });
10
+ setContext(paginationTableKey, paginationTable);
11
+ return paginationTable;
12
+ };
13
+ export const getPaginationTableContext = () => {
14
+ return getContext(paginationTableKey);
15
+ };
@@ -0,0 +1,8 @@
1
+ export interface ExcelSetting {
2
+ fileName: string;
3
+ exportAllColumns: boolean;
4
+ }
5
+ export declare const ColumnFormat: {
6
+ readonly NUMBER: "#,##0.00";
7
+ };
8
+ export type ColumnFormat = typeof ColumnFormat[keyof typeof ColumnFormat];
@@ -0,0 +1,3 @@
1
+ export const ColumnFormat = {
2
+ NUMBER: '#,##0.00'
3
+ };
@@ -0,0 +1,4 @@
1
+ import type { Table } from './adapter/index.js';
2
+ import { type ExcelSetting } from './excel-setting.js';
3
+ declare const exportExcel: <T>(table: Table<T>, excelSetting: ExcelSetting) => Promise<void>;
4
+ export default exportExcel;
@@ -0,0 +1,66 @@
1
+ /// <reference path="./types.d.ts" />
2
+ import ExcelJS from 'exceljs';
3
+ import saveAs from 'file-saver';
4
+ import { ColumnFormat } from './excel-setting.js';
5
+ const exportExcel = async (table, excelSetting) => {
6
+ const workbook = new ExcelJS.Workbook();
7
+ const worksheet = workbook.addWorksheet('Sheet 1');
8
+ worksheet.columns = getColumns(table, excelSetting);
9
+ const rows = getRows(table, excelSetting);
10
+ worksheet.addRows(rows);
11
+ setStyle(worksheet);
12
+ await downloadFile(workbook, excelSetting.fileName);
13
+ };
14
+ const getColumns = (table, excelSetting) => {
15
+ return excelSetting.exportAllColumns ? getAllColumns(table) : getVisibleColumns(table);
16
+ };
17
+ const getAllColumns = (table) => {
18
+ const allColumns = table.getAllColumns().filter(shouldIncludeColumn);
19
+ return allColumns.map((column) => getColumnExcel(column.columnDef.header, column.id, column.columnDef.meta?.columnFormatExport));
20
+ };
21
+ const getVisibleColumns = (table) => {
22
+ const visibleColumns = table.getVisibleLeafColumns().filter(shouldIncludeColumn);
23
+ return visibleColumns.map((column) => getColumnExcel(column.columnDef.header, column.id, column.columnDef.meta?.columnFormatExport));
24
+ };
25
+ const shouldIncludeColumn = (column) => {
26
+ return !column.columnDef.meta?.excludeFromExport;
27
+ };
28
+ const getColumnExcel = (header, id, columnFormatExport) => {
29
+ return {
30
+ header,
31
+ key: id,
32
+ width: 20,
33
+ ...(columnFormatExport && {
34
+ style: {
35
+ numFmt: columnFormatExport
36
+ }
37
+ })
38
+ };
39
+ };
40
+ const getRows = (table, excelSetting) => {
41
+ return table.getFilteredRowModel().rows.map((row) => getValues(excelSetting, row));
42
+ };
43
+ const getValues = (excelSetting, row) => {
44
+ const cells = excelSetting.exportAllColumns ? row.getAllCells() : row.getVisibleCells();
45
+ return cells
46
+ .filter((cell) => !cell.column.columnDef.meta?.excludeFromExport)
47
+ .map((cell) => getValue(cell));
48
+ };
49
+ const getValue = (cell) => {
50
+ let value = cell.getValue() ?? '';
51
+ if (Array.isArray(value)) {
52
+ value = value.join(', ');
53
+ }
54
+ return value;
55
+ };
56
+ const setStyle = (worksheet) => {
57
+ worksheet.getRow(1).eachCell((cell) => {
58
+ cell.font = { bold: true };
59
+ });
60
+ };
61
+ const downloadFile = async (workbook, fileName) => {
62
+ const buffer = await workbook.xlsx.writeBuffer();
63
+ const blob = new Blob([buffer]);
64
+ saveAs(blob, `${fileName}.xlsx`);
65
+ };
66
+ export default exportExcel;
@@ -0,0 +1,6 @@
1
+ export * from './adapter/index.js';
2
+ export * from './consts.js';
3
+ export * from './context.js';
4
+ export { ColumnFormat, type ExcelSetting } from './excel-setting.js';
5
+ export { default as Table } from './Table.svelte';
6
+ export { createActionsColumn } from './util.js';
@@ -0,0 +1,6 @@
1
+ export * from './adapter/index.js';
2
+ export * from './consts.js';
3
+ export * from './context.js';
4
+ export { ColumnFormat } from './excel-setting.js';
5
+ export { default as Table } from './Table.svelte';
6
+ export { createActionsColumn } from './util.js';
@@ -0,0 +1,16 @@
1
+ import '@tanstack/table-core';
2
+
3
+ import { ColumnFormat } from './excel-setting.js';
4
+
5
+ declare module '@tanstack/table-core' {
6
+ interface ColumnMeta<TData extends RowData, TValue> {
7
+ alignColumn?: 'left' | 'right' | 'center';
8
+ className?: string;
9
+ columnWidth?: string;
10
+ style?: string;
11
+ isVisible?: boolean;
12
+ excludeFromExport?: boolean;
13
+ columnFormatExport?: ColumnFormat;
14
+ hideColumnFilter?: boolean;
15
+ }
16
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,4 @@
1
+ import { type Row } from './adapter/index.js';
2
+ import type { Action } from './types.js';
3
+ export declare const createCheckedColumn: <T>() => import("./adapter/index.js").DisplayColumnDef<T, unknown>;
4
+ export declare const createActionsColumn: <T>(getActions: (row: Row<T>) => Action[]) => import("./adapter/index.js").DisplayColumnDef<T, unknown>;
@@ -0,0 +1,46 @@
1
+ import ActionsColumn from './ActionsColumn.svelte';
2
+ import RowCheckBox from './RowCheckBox.svelte';
3
+ import { createColumnHelper, renderComponent } from './adapter/index.js';
4
+ export const createCheckedColumn = () => {
5
+ const columnHelper = createColumnHelper();
6
+ return columnHelper.display({
7
+ id: 'checked',
8
+ header: ({ table }) => renderComponent(RowCheckBox, {
9
+ checked: table.getIsAllRowsSelected(),
10
+ indeterminate: table.getIsSomeRowsSelected(),
11
+ onchange: table.getToggleAllRowsSelectedHandler()
12
+ }),
13
+ cell: ({ row }) => renderComponent(RowCheckBox, {
14
+ checked: row.getIsSelected(),
15
+ disabled: !row.getCanSelect(),
16
+ indeterminate: row.getIsSomeSelected(),
17
+ onchange: row.getToggleSelectedHandler()
18
+ }),
19
+ meta: {
20
+ columnWidth: '40px'
21
+ },
22
+ enableSorting: false
23
+ });
24
+ };
25
+ export const createActionsColumn = (getActions) => {
26
+ const columnHelper = createColumnHelper();
27
+ return columnHelper.display({
28
+ id: 'actions',
29
+ header: 'Actions',
30
+ enableSorting: false,
31
+ enableColumnFilter: false,
32
+ enableGlobalFilter: false,
33
+ enableHiding: false,
34
+ meta: {
35
+ alignColumn: 'center',
36
+ excludeFromExport: true,
37
+ columnWidth: '117px',
38
+ hideColumnFilter: true
39
+ },
40
+ cell: ({ row, table }) => renderComponent(ActionsColumn, {
41
+ actions: getActions(row),
42
+ isLastChild: table.getRowModel().rows.at(-1).index === row.index,
43
+ isOnlyOneRow: table.getRowModel().rows.length === 1
44
+ })
45
+ });
46
+ };
package/dist/index.d.ts CHANGED
@@ -14,6 +14,7 @@ import HeaderLogo from './Header/HeaderLogo.svelte';
14
14
  import HighlightPanel from './HighlightPanel/HighlightPanel.svelte';
15
15
  import Home from './Home/Home.svelte';
16
16
  import Input from './Controls/Input/Input.svelte';
17
+ import Label from './Controls/Label/Label.svelte';
17
18
  import Link from './Link/Link.svelte';
18
19
  import Menu from './Menu/Menu.svelte';
19
20
  import Modal from './Modal/Modal.svelte';
@@ -52,4 +53,4 @@ import type { Tab } from './Tabs/tabsState.svelte.js';
52
53
  import type { Toast } from './Toast/toastState.svelte';
53
54
  import type { WaffleItem } from './Waffle/waffleState.svelte.js';
54
55
  import type { NotificationProps } from './Notification/notificationState.svelte.js';
55
- export { Accordion, AttachFile, Avatar, Breadcrumbs, Button, Card, Chips, DeleteConfirmationModal, ErrorPage, Footer, Header, HeaderAccount, HeaderLoader, HeaderLogo, HighlightPanel, Home, Input, Link, Menu, Modal, Notification, Processing, ProgressPage, ProgressWizard, Search, Select, Sidebar, Spinner, Switcher, Tabs, TextArea, Toaster, Toggle, Tooltip, Waffle, addBreadcrumbsNameMap, addToast, getProgressWizardContext, setProgressWizardStepsContext, setStepValidity, getSubMenuItemsFromMenu, ChipType, ColumnType, ImageType, type BreadcrumbsNameMap, type HighlightPanelColumn, type HomeItem, type MainMenu, type MenuItem, type ModalProps, type ProgressWizardStep, type SelectOption, type SwitcherOption, type Tab, type Toast, type WaffleItem, type SubMenuItem, type NotificationProps };
56
+ export { Accordion, AttachFile, Avatar, Breadcrumbs, Button, Card, Chips, DeleteConfirmationModal, ErrorPage, Footer, Header, HeaderAccount, HeaderLoader, HeaderLogo, HighlightPanel, Home, Input, Label, Link, Menu, Modal, Notification, Processing, ProgressPage, ProgressWizard, Search, Select, Sidebar, Spinner, Switcher, Tabs, TextArea, Toaster, Toggle, Tooltip, Waffle, addBreadcrumbsNameMap, addToast, getProgressWizardContext, setProgressWizardStepsContext, setStepValidity, getSubMenuItemsFromMenu, ChipType, ColumnType, ImageType, type BreadcrumbsNameMap, type HighlightPanelColumn, type HomeItem, type MainMenu, type MenuItem, type ModalProps, type ProgressWizardStep, type SelectOption, type SwitcherOption, type Tab, type Toast, type WaffleItem, type SubMenuItem, type NotificationProps };
package/dist/index.js CHANGED
@@ -15,6 +15,7 @@ import HeaderLogo from './Header/HeaderLogo.svelte';
15
15
  import HighlightPanel from './HighlightPanel/HighlightPanel.svelte';
16
16
  import Home from './Home/Home.svelte';
17
17
  import Input from './Controls/Input/Input.svelte';
18
+ import Label from './Controls/Label/Label.svelte';
18
19
  import Link from './Link/Link.svelte';
19
20
  import Menu from './Menu/Menu.svelte';
20
21
  import Modal from './Modal/Modal.svelte';
@@ -44,7 +45,7 @@ import { addToast } from './Toast/toastState.svelte';
44
45
  import { getSubMenuItemsFromMenu } from './Menu/MenuState.svelte';
45
46
  export {
46
47
  // Components
47
- Accordion, AttachFile, Avatar, Breadcrumbs, Button, Card, Chips, DeleteConfirmationModal, ErrorPage, Footer, Header, HeaderAccount, HeaderLoader, HeaderLogo, HighlightPanel, Home, Input, Link, Menu, Modal, Notification, Processing, ProgressPage, ProgressWizard, Search, Select, Sidebar, Spinner, Switcher, Tabs, TextArea, Toaster, Toggle, Tooltip, Waffle,
48
+ Accordion, AttachFile, Avatar, Breadcrumbs, Button, Card, Chips, DeleteConfirmationModal, ErrorPage, Footer, Header, HeaderAccount, HeaderLoader, HeaderLogo, HighlightPanel, Home, Input, Label, Link, Menu, Modal, Notification, Processing, ProgressPage, ProgressWizard, Search, Select, Sidebar, Spinner, Switcher, Tabs, TextArea, Toaster, Toggle, Tooltip, Waffle,
48
49
  // Functions and helpers
49
50
  addBreadcrumbsNameMap, addToast, getProgressWizardContext, setProgressWizardStepsContext, setStepValidity, getSubMenuItemsFromMenu,
50
51
  // Enums
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@softwareone/spi-sv5-library",
3
- "version": "1.9.0",
3
+ "version": "1.10.1",
4
4
  "description": "Svelte components",
5
5
  "keywords": [
6
6
  "svelte",
@@ -42,10 +42,17 @@
42
42
  "./form": {
43
43
  "types": "./dist/Form/index.d.ts",
44
44
  "svelte": "./dist/Form/index.js"
45
+ },
46
+ "./table": {
47
+ "types": "./dist/Table/index.d.ts",
48
+ "svelte": "./dist/Table/index.js"
45
49
  }
46
50
  },
47
51
  "peerDependencies": {
52
+ "@tanstack/table-core": "^8.21.3",
48
53
  "adaptivecards": "^3.0.5",
54
+ "exceljs": "^4.4.0",
55
+ "file-saver": "^2.0.5",
49
56
  "svelte": "^5.0.0",
50
57
  "sveltekit-superforms": "^2.0.0",
51
58
  "zod": "^4.0.0"
@@ -59,6 +66,15 @@
59
66
  },
60
67
  "adaptivecards": {
61
68
  "optional": true
69
+ },
70
+ "@tanstack/table-core": {
71
+ "optional": true
72
+ },
73
+ "exceljs": {
74
+ "optional": true
75
+ },
76
+ "file-saver": {
77
+ "optional": true
62
78
  }
63
79
  },
64
80
  "devDependencies": {
@@ -67,7 +83,11 @@
67
83
  "@sveltejs/kit": "^2.48.4",
68
84
  "@sveltejs/package": "^2.5.4",
69
85
  "@sveltejs/vite-plugin-svelte": "^6.2.1",
86
+ "@tanstack/table-core": "^8.21.3",
87
+ "@types/file-saver": "^2.0.7",
70
88
  "adaptivecards": "^3.0.5",
89
+ "exceljs": "^4.4.0",
90
+ "file-saver": "^2.0.5",
71
91
  "prettier": "^3.6.2",
72
92
  "prettier-plugin-svelte": "^3.4.0",
73
93
  "publint": "^0.3.15",