@humanspeak/svelte-headless-table 5.1.0 → 6.0.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.
package/README.md CHANGED
@@ -1,10 +1,13 @@
1
- <p align="center">
2
- <img src="https://user-images.githubusercontent.com/42545742/169733428-295e2678-e509-4175-aeb3-cb3a9c9894e1.svg" alt="svelte-headless-table" width="400px"/>
3
- </p>
4
- <h1 align="center">Svelte Headless Table</h1>
5
-
1
+ <!-- trunk-ignore-all(markdownlint/MD033) -->
2
+ <!-- trunk-ignore(markdownlint/MD041) -->
6
3
  <div align="center">
7
4
 
5
+ <img src="https://user-images.githubusercontent.com/42545742/169733428-295e2678-e509-4175-aeb3-cb3a9c9894e1.svg" alt="svelte-headless-table" width="400" />
6
+
7
+ # Svelte Headless Table
8
+
9
+ </div>
10
+
8
11
  [![NPM version](https://img.shields.io/npm/v/@humanspeak/svelte-headless-table.svg)](https://www.npmjs.com/package/@humanspeak/svelte-headless-table)
9
12
  [![Build Status](https://github.com/humanspeak/svelte-headless-table/actions/workflows/npm-publish.yml/badge.svg)](https://github.com/humanspeak/svelte-headless-table/actions/workflows/npm-publish.yml)
10
13
  [![Coverage Status](https://coveralls.io/repos/github/humanspeak/svelte-headless-table/badge.svg?branch=main)](https://coveralls.io/github/humanspeak/svelte-headless-table?branch=main)
@@ -1,10 +1,10 @@
1
- import type { RenderConfig } from '@humanspeak/svelte-render';
2
- import { type Readable } from 'svelte/store';
3
1
  import type { BodyRow } from './bodyRows.js';
4
2
  import type { DataColumn, DisplayColumn, FlatColumn } from './columns.js';
5
3
  import { TableComponent } from './tableComponent.js';
6
4
  import type { DataLabel, DisplayLabel } from './types/Label.js';
7
5
  import type { AnyPlugins } from './types/TablePlugin.js';
6
+ import type { RenderConfig } from '@humanspeak/svelte-render';
7
+ import { type Readable } from 'svelte/store';
8
8
  export type BodyCellInit<Item, Plugins extends AnyPlugins = AnyPlugins> = {
9
9
  id: string;
10
10
  row: BodyRow<Item, Plugins>;
package/dist/bodyCells.js CHANGED
@@ -1,5 +1,5 @@
1
- import { derived } from 'svelte/store';
2
1
  import { TableComponent } from './tableComponent.js';
2
+ import { derived } from 'svelte/store';
3
3
  export class BodyCell extends TableComponent {
4
4
  row;
5
5
  constructor({ id, row }) {
@@ -1,8 +1,8 @@
1
- import { type Readable } from 'svelte/store';
2
1
  import { BodyCell } from './bodyCells.js';
3
2
  import type { FlatColumn } from './columns.js';
4
3
  import { TableComponent } from './tableComponent.js';
5
4
  import type { AnyPlugins } from './types/TablePlugin.js';
5
+ import { type Readable } from 'svelte/store';
6
6
  export type BodyRowInit<Item, Plugins extends AnyPlugins = AnyPlugins> = {
7
7
  id: string;
8
8
  cells: BodyCell<Item, Plugins>[];
@@ -64,7 +64,7 @@ export declare const getBodyRows: <Item, Plugins extends AnyPlugins = AnyPlugins
64
64
  /**
65
65
  * Flat columns before column transformations.
66
66
  */
67
- flatColumns: FlatColumn<Item, Plugins>[], { rowDataId }?: BodyRowsOptions<Item>) => BodyRow<Item, Plugins>[];
67
+ flatColumns: FlatColumn<Item, Plugins>[], { rowDataId }?: BodyRowsOptions<Item>) => DataBodyRow<Item, Plugins>[];
68
68
  /**
69
69
  * Arranges and hides columns in an array of `BodyRow`s based on
70
70
  * `columnIdOrder` by transforming the `cells` property of each row.
@@ -75,7 +75,7 @@ flatColumns: FlatColumn<Item, Plugins>[], { rowDataId }?: BodyRowsOptions<Item>)
75
75
  * @param columnIdOrder The column order to transform to.
76
76
  * @returns A new array of `BodyRow`s with corrected row references.
77
77
  */
78
- export declare const getColumnedBodyRows: <Item, Plugins extends AnyPlugins = AnyPlugins>(rows: BodyRow<Item, Plugins>[], columnIdOrder: string[]) => BodyRow<Item, Plugins>[];
78
+ export declare const getColumnedBodyRows: <Item, Plugins extends AnyPlugins = AnyPlugins>(rows: DataBodyRow<Item, Plugins>[], columnIdOrder: string[]) => DataBodyRow<Item, Plugins>[];
79
79
  /**
80
80
  * Converts an array of items into an array of table `BodyRow`s based on a parent row.
81
81
  * @param subItems The sub data to display.
package/dist/bodyRows.js CHANGED
@@ -1,7 +1,7 @@
1
- import { derived } from 'svelte/store';
2
1
  import { BodyCell, DataBodyCell, DisplayBodyCell } from './bodyCells.js';
3
2
  import { TableComponent } from './tableComponent.js';
4
3
  import { nonUndefined } from './utils/filter.js';
4
+ import { derived } from 'svelte/store';
5
5
  export class BodyRow extends TableComponent {
6
6
  cells;
7
7
  /**
package/dist/columns.js CHANGED
@@ -40,6 +40,7 @@ export class DataColumn extends FlatColumn {
40
40
  __data = true;
41
41
  cell;
42
42
  accessorKey;
43
+ /* trunk-ignore(eslint/no-unused-vars) */
43
44
  accessorFn;
44
45
  constructor({ header, footer, plugins, cell, accessor, id }) {
45
46
  super({ header, footer, plugins, id: 'Initialization not complete' });
@@ -56,7 +57,7 @@ export class DataColumn extends FlatColumn {
56
57
  const accessorKeyId = typeof this.accessorKey === 'string' ? this.accessorKey : null;
57
58
  this.id = (id ?? accessorKeyId ?? String(header));
58
59
  }
59
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
60
+ /* trunk-ignore(eslint/@typescript-eslint/no-explicit-any) */
60
61
  getValue(item) {
61
62
  if (this.accessorFn !== undefined) {
62
63
  return this.accessorFn(item);
@@ -1,9 +1,9 @@
1
- import { type Readable, type Writable } from 'svelte/store';
2
- import { BodyRow } from './bodyRows.js';
1
+ import { BodyRow, DataBodyRow } from './bodyRows.js';
3
2
  import { FlatColumn, type Column } from './columns.js';
4
3
  import type { Table } from './createTable.js';
5
4
  import { HeaderRow } from './headerRows.js';
6
5
  import type { AnyPlugins, PluginStates } from './types/TablePlugin.js';
6
+ import { type Readable, type Writable } from 'svelte/store';
7
7
  export type TableAttributes<Item, Plugins extends AnyPlugins = AnyPlugins> = Record<string, unknown> & {
8
8
  role: 'table';
9
9
  };
@@ -19,8 +19,8 @@ export interface TableViewModel<Item, Plugins extends AnyPlugins = AnyPlugins> {
19
19
  visibleColumns: Readable<FlatColumn<Item, Plugins>[]>;
20
20
  headerRows: Readable<HeaderRow<Item, Plugins>[]>;
21
21
  originalRows: Readable<BodyRow<Item, Plugins>[]>;
22
- rows: Readable<BodyRow<Item, Plugins>[]>;
23
- pageRows: Readable<BodyRow<Item, Plugins>[]>;
22
+ rows: Readable<DataBodyRow<Item, Plugins>[]>;
23
+ pageRows: Readable<DataBodyRow<Item, Plugins>[]>;
24
24
  pluginStates: PluginStates<Plugins>;
25
25
  }
26
26
  export type ReadOrWritable<T> = Readable<T> | Writable<T>;
@@ -1,9 +1,9 @@
1
- import { derived, readable, writable } from 'svelte/store';
2
- import { BodyRow, getBodyRows, getColumnedBodyRows } from './bodyRows.js';
1
+ import { BodyRow, DataBodyRow, getBodyRows, getColumnedBodyRows } from './bodyRows.js';
3
2
  import { FlatColumn, getFlatColumns } from './columns.js';
4
3
  import { getHeaderRows, HeaderRow } from './headerRows.js';
5
4
  import { finalizeAttributes } from './utils/attributes.js';
6
5
  import { nonUndefined } from './utils/filter.js';
6
+ import { derived, readable, writable } from 'svelte/store';
7
7
  export const createViewModel = (table, columns, { rowDataId } = {}) => {
8
8
  const { data, plugins } = table;
9
9
  const $flatColumns = getFlatColumns(columns);
@@ -1,7 +1,7 @@
1
- import type { RenderConfig } from '@humanspeak/svelte-render';
2
1
  import { TableComponent } from './tableComponent.js';
3
2
  import type { HeaderLabel } from './types/Label.js';
4
3
  import type { AnyPlugins } from './types/TablePlugin.js';
4
+ import type { RenderConfig } from '@humanspeak/svelte-render';
5
5
  export type HeaderCellInit<Item, Plugins extends AnyPlugins = AnyPlugins> = {
6
6
  id: string;
7
7
  label: HeaderLabel<Item, Plugins>;
@@ -1,6 +1,6 @@
1
- import { derived } from 'svelte/store';
2
1
  import { NBSP } from './constants.js';
3
2
  import { TableComponent } from './tableComponent.js';
3
+ import { derived } from 'svelte/store';
4
4
  export class HeaderCell extends TableComponent {
5
5
  label;
6
6
  colspan;
@@ -16,7 +16,6 @@ export class HeaderCell extends TableComponent {
16
16
  if (this.state === undefined) {
17
17
  throw new Error('Missing `state` reference');
18
18
  }
19
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
20
19
  return this.label(this, this.state);
21
20
  }
22
21
  return this.label;
@@ -69,6 +68,7 @@ export class DataHeaderCell extends FlatHeaderCell {
69
68
  // TODO Workaround for https://github.com/vitejs/vite/issues/9528
70
69
  __data = true;
71
70
  accessorKey;
71
+ /* trunk-ignore(eslint/no-unused-vars) */
72
72
  accessorFn;
73
73
  constructor({ id, label, accessorKey, accessorFn, colstart }) {
74
74
  super({ id, label, colstart });
@@ -1,8 +1,8 @@
1
- import { derived } from 'svelte/store';
2
1
  import { DataHeaderCell, FlatDisplayHeaderCell, GroupDisplayHeaderCell, GroupHeaderCell } from './headerCells.js';
3
2
  import { TableComponent } from './tableComponent.js';
4
3
  import { sum } from './utils/math.js';
5
4
  import { getNullMatrix, getTransposed } from './utils/matrix.js';
5
+ import { derived } from 'svelte/store';
6
6
  export class HeaderRow extends TableComponent {
7
7
  cells;
8
8
  constructor({ id, cells }) {
@@ -1,15 +1,15 @@
1
- export * from './addColumnFilters.js';
2
- export * from './addColumnOrder.js';
3
- export * from './addDataExport.js';
4
- export * from './addExpandedRows.js';
5
- export * from './addFlatten.js';
6
- export * from './addGridLayout.js';
7
- export * from './addGroupBy.js';
8
- export * from './addHiddenColumns.js';
9
- export * from './addPagination.js';
10
- export * from './addResizedColumns.js';
11
- export * from './addSelectedRows.js';
12
- export * from './addSortBy.js';
13
- export * from './addSubRows.js';
14
- export * from './addTableFilter.js';
15
- export * from '../types/TablePlugin.js';
1
+ export * from './addColumnFilters';
2
+ export * from './addColumnOrder';
3
+ export * from './addDataExport';
4
+ export * from './addExpandedRows';
5
+ export * from './addFlatten';
6
+ export * from './addGridLayout';
7
+ export * from './addGroupBy';
8
+ export * from './addHiddenColumns';
9
+ export * from './addPagination';
10
+ export * from './addResizedColumns';
11
+ export * from './addSelectedRows';
12
+ export * from './addSortBy';
13
+ export * from './addSubRows';
14
+ export * from './addTableFilter';
15
+ export * from '../types/TablePlugin';
@@ -1,16 +1,16 @@
1
- export * from './addColumnFilters.js';
2
- export * from './addColumnOrder.js';
3
- export * from './addDataExport.js';
4
- export * from './addExpandedRows.js';
5
- export * from './addFlatten.js';
6
- export * from './addGridLayout.js';
7
- export * from './addGroupBy.js';
8
- export * from './addHiddenColumns.js';
9
- export * from './addPagination.js';
10
- export * from './addResizedColumns.js';
11
- export * from './addSelectedRows.js';
12
- export * from './addSortBy.js';
13
- export * from './addSubRows.js';
14
- export * from './addTableFilter.js';
1
+ export * from './addColumnFilters';
2
+ export * from './addColumnOrder';
3
+ export * from './addDataExport';
4
+ export * from './addExpandedRows';
5
+ export * from './addFlatten';
6
+ export * from './addGridLayout';
7
+ export * from './addGroupBy';
8
+ export * from './addHiddenColumns';
9
+ export * from './addPagination';
10
+ export * from './addResizedColumns';
11
+ export * from './addSelectedRows';
12
+ export * from './addSortBy';
13
+ export * from './addSubRows';
14
+ export * from './addTableFilter';
15
15
  // plugin helper types
16
- export * from '../types/TablePlugin.js';
16
+ export * from '../types/TablePlugin';
@@ -1,7 +1,7 @@
1
- import { type Readable } from 'svelte/store';
2
1
  import type { TableState } from './createViewModel.js';
3
2
  import type { AnyPlugins, ComponentKeys, ElementHook, PluginTablePropSet } from './types/TablePlugin.js';
4
3
  import type { Clonable } from './utils/clone.js';
4
+ import { type Readable } from 'svelte/store';
5
5
  export interface TableComponentInit {
6
6
  id: string;
7
7
  }
@@ -1,6 +1,6 @@
1
+ import { finalizeAttributes, mergeAttributes } from './utils/attributes.js';
1
2
  import { derivedKeys } from '@humanspeak/svelte-subscribe';
2
3
  import { derived } from 'svelte/store';
3
- import { finalizeAttributes, mergeAttributes } from './utils/attributes.js';
4
4
  export class TableComponent {
5
5
  id;
6
6
  constructor({ id }) {
package/package.json CHANGED
@@ -1,129 +1,134 @@
1
1
  {
2
- "name": "@humanspeak/svelte-headless-table",
3
- "version": "5.1.0",
4
- "description": "A powerful, headless table library for Svelte that provides complete control over table UI while handling complex data operations like sorting, filtering, pagination, grouping, and row expansion. Build custom, accessible data tables with zero styling opinions.",
5
- "keywords": [
6
- "svelte",
7
- "table",
8
- "datagrid",
9
- "datatable",
10
- "headless",
11
- "plugin",
12
- "sorting",
13
- "filtering",
14
- "ordering",
15
- "hiding",
16
- "grouping",
17
- "selecting",
18
- "expanding",
19
- "data-table",
20
- "data-grid",
21
- "table-component",
22
- "pagination",
23
- "column-sorting",
24
- "row-selection",
25
- "typescript",
26
- "sveltekit",
27
- "customizable",
28
- "accessible"
29
- ],
30
- "homepage": "https://table.svelte.page",
31
- "bugs": {
32
- "url": "https://github.com/humanspeak/svelte-headless-table/issues"
2
+ "name": "@humanspeak/svelte-headless-table",
3
+ "version": "6.0.1",
4
+ "description": "A powerful, headless table library for Svelte that provides complete control over table UI while handling complex data operations like sorting, filtering, pagination, grouping, and row expansion. Build custom, accessible data tables with zero styling opinions.",
5
+ "keywords": [
6
+ "svelte",
7
+ "table",
8
+ "datagrid",
9
+ "datatable",
10
+ "headless",
11
+ "plugin",
12
+ "sorting",
13
+ "filtering",
14
+ "ordering",
15
+ "hiding",
16
+ "grouping",
17
+ "selecting",
18
+ "expanding",
19
+ "data-table",
20
+ "data-grid",
21
+ "table-component",
22
+ "pagination",
23
+ "column-sorting",
24
+ "row-selection",
25
+ "typescript",
26
+ "sveltekit",
27
+ "customizable",
28
+ "accessible"
29
+ ],
30
+ "homepage": "https://table.svelte.page",
31
+ "bugs": {
32
+ "url": "https://github.com/humanspeak/svelte-headless-table/issues"
33
+ },
34
+ "repository": {
35
+ "type": "git",
36
+ "url": "git+ssh://git@github.com/humanspeak/svelte-headless-table.git"
37
+ },
38
+ "license": "MIT",
39
+ "author": "Humanspeak, Inc.",
40
+ "type": "module",
41
+ "exports": {
42
+ ".": {
43
+ "types": "./dist/index.d.ts",
44
+ "svelte": "./dist/index.js",
45
+ "default": "./dist/index.js"
33
46
  },
34
- "repository": {
35
- "type": "git",
36
- "url": "git+ssh://git@github.com/humanspeak/svelte-headless-table.git"
37
- },
38
- "license": "MIT",
39
- "author": "Humanspeak, Inc.",
40
- "type": "module",
41
- "exports": {
42
- ".": {
43
- "types": "./dist/index.d.ts",
44
- "svelte": "./dist/index.js",
45
- "default": "./dist/index.js"
46
- },
47
- "./plugins": {
48
- "types": "./dist/plugins/index.d.ts",
49
- "svelte": "./dist/plugins/index.js",
50
- "default": "./dist/plugins/index.js"
51
- }
52
- },
53
- "svelte": "./dist/index.js",
54
- "types": "./dist/index.d.ts",
55
- "files": [
56
- "dist",
57
- "!dist/**/*.test.*",
58
- "!dist/**/*.spec.*"
59
- ],
60
- "scripts": {
61
- "build": "vite build && npm run package",
62
- "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
63
- "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
64
- "dev": "vite dev",
65
- "format": "prettier --write .",
66
- "lint": "prettier --check . && eslint .",
67
- "lint:fix": "npm run format && eslint . --fix",
68
- "package": "svelte-kit sync && svelte-package && publint",
69
- "prepublishOnly": "npm run package",
70
- "preview": "vite preview",
71
- "test": "vitest run --coverage",
72
- "test:all": "npm run test && npm run test:e2e",
73
- "test:e2e": "playwright test",
74
- "test:e2e:debug": "playwright test --debug",
75
- "test:e2e:report": "playwright show-report",
76
- "test:e2e:ui": "playwright test --ui",
77
- "test:only": "vitest run",
78
- "test:unit": "vitest",
79
- "test:unit:ui": "vitest --ui",
80
- "test:watch": "vitest"
81
- },
82
- "dependencies": {
83
- "@humanspeak/svelte-keyed": "^5.0.1",
84
- "@humanspeak/svelte-render": "^5.1.1",
85
- "@humanspeak/svelte-subscribe": "^5.0.0"
86
- },
87
- "devDependencies": {
88
- "@eslint/compat": "^1.2.7",
89
- "@eslint/js": "^9.22.0",
90
- "@faker-js/faker": "^9.6.0",
91
- "@playwright/test": "^1.51.0",
92
- "@sveltejs/adapter-auto": "^4.0.0",
93
- "@sveltejs/kit": "^2.19.0",
94
- "@sveltejs/package": "^2.3.10",
95
- "@sveltejs/vite-plugin-svelte": "^5.0.3",
96
- "@testing-library/jest-dom": "^6.6.3",
97
- "@testing-library/svelte": "^5.2.7",
98
- "@types/eslint": "9.6.1",
99
- "@types/node": "^22.13.9",
100
- "@typescript-eslint/eslint-plugin": "^8.26.0",
101
- "@typescript-eslint/parser": "^8.26.0",
102
- "@vitest/coverage-v8": "^3.0.8",
103
- "eslint": "^9.22.0",
104
- "eslint-config-prettier": "^10.1.1",
105
- "eslint-plugin-import": "^2.31.0",
106
- "eslint-plugin-svelte": "^3.0.3",
107
- "eslint-plugin-unused-imports": "^4.1.4",
108
- "globals": "^16.0.0",
109
- "prettier": "^3.5.3",
110
- "prettier-plugin-organize-imports": "^4.1.0",
111
- "prettier-plugin-svelte": "^3.3.3",
112
- "prettier-plugin-tailwindcss": "^0.6.11",
113
- "publint": "^0.3.8",
114
- "svelte": "^5.22.6",
115
- "svelte-check": "^4.1.5",
116
- "tslib": "^2.8.1",
117
- "type-fest": "^4.37.0",
118
- "typescript": "^5.8.2",
119
- "typescript-eslint": "^8.26.0",
120
- "vite": "^6.2.1",
121
- "vitest": "^3.0.8"
122
- },
123
- "peerDependencies": {
124
- "svelte": "^5.0.0"
125
- },
126
- "volta": {
127
- "node": "22.14.0"
47
+ "./plugins": {
48
+ "types": "./dist/plugins/index.d.ts",
49
+ "svelte": "./dist/plugins/index.js",
50
+ "default": "./dist/plugins/index.js"
128
51
  }
129
- }
52
+ },
53
+ "svelte": "./dist/index.js",
54
+ "types": "./dist/index.d.ts",
55
+ "files": [
56
+ "dist",
57
+ "!dist/**/*.test.*",
58
+ "!dist/**/*.spec.*"
59
+ ],
60
+ "dependencies": {
61
+ "@humanspeak/svelte-keyed": "^5.0.1",
62
+ "@humanspeak/svelte-render": "^5.1.1",
63
+ "@humanspeak/svelte-subscribe": "^5.0.0"
64
+ },
65
+ "devDependencies": {
66
+ "@eslint/compat": "^1.4.0",
67
+ "@eslint/js": "^9.37.0",
68
+ "@faker-js/faker": "^10.0.0",
69
+ "@playwright/test": "^1.56.0",
70
+ "@sveltejs/adapter-auto": "^6.1.1",
71
+ "@sveltejs/kit": "^2.46.4",
72
+ "@sveltejs/package": "^2.5.4",
73
+ "@sveltejs/vite-plugin-svelte": "^6.2.1",
74
+ "@testing-library/jest-dom": "^6.9.1",
75
+ "@testing-library/svelte": "^5.2.8",
76
+ "@types/eslint": "9.6.1",
77
+ "@types/node": "^24.7.1",
78
+ "@typescript-eslint/eslint-plugin": "^8.46.0",
79
+ "@typescript-eslint/parser": "^8.46.0",
80
+ "@vitest/coverage-v8": "^3.2.4",
81
+ "concurrently": "^9.2.1",
82
+ "eslint": "^9.37.0",
83
+ "eslint-config-prettier": "10.1.8",
84
+ "eslint-plugin-import": "2.32.0",
85
+ "eslint-plugin-svelte": "3.12.4",
86
+ "eslint-plugin-unused-imports": "4.2.0",
87
+ "globals": "^16.4.0",
88
+ "husky": "^9.1.7",
89
+ "prettier": "^3.6.2",
90
+ "prettier-plugin-organize-imports": "^4.3.0",
91
+ "prettier-plugin-sort-json": "^4.1.1",
92
+ "prettier-plugin-svelte": "^3.4.0",
93
+ "prettier-plugin-tailwindcss": "^0.6.14",
94
+ "publint": "^0.3.14",
95
+ "svelte": "^5.39.11",
96
+ "svelte-check": "^4.3.3",
97
+ "tslib": "^2.8.1",
98
+ "type-fest": "^5.0.1",
99
+ "typescript": "^5.9.3",
100
+ "typescript-eslint": "^8.46.0",
101
+ "vite": "^7.1.9",
102
+ "vitest": "^3.2.4"
103
+ },
104
+ "peerDependencies": {
105
+ "svelte": "^5.30.0"
106
+ },
107
+ "volta": {
108
+ "node": "22.18.0"
109
+ },
110
+ "scripts": {
111
+ "build": "vite build && npm run package",
112
+ "changeset": "npx @changesets/cli",
113
+ "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
114
+ "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
115
+ "dev": "vite dev",
116
+ "dev:all": "concurrently -k -n pkg,docs,sitemap -c green,cyan,magenta \"pnpm -w -r --filter @humanspeak/svelte-headless-table run dev:pkg\" \"pnpm --filter docs run dev\" \"pnpm --filter docs run sitemap:watch\"",
117
+ "dev:pkg": "svelte-kit sync && svelte-package --watch",
118
+ "format": "prettier --write .",
119
+ "lint": "prettier --check . && eslint .",
120
+ "lint:fix": "npm run format && eslint . --fix",
121
+ "package": "svelte-kit sync && svelte-package && publint",
122
+ "preview": "vite preview",
123
+ "test": "vitest run --coverage",
124
+ "test:all": "npm run test && npm run test:e2e",
125
+ "test:e2e": "playwright test",
126
+ "test:e2e:debug": "playwright test --debug",
127
+ "test:e2e:report": "playwright show-report",
128
+ "test:e2e:ui": "playwright test --ui",
129
+ "test:only": "vitest run",
130
+ "test:unit": "vitest",
131
+ "test:unit:ui": "vitest --ui",
132
+ "test:watch": "vitest"
133
+ }
134
+ }