@softwareone/spi-sv5-library 1.9.0 → 1.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) 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/Table/ActionsColumn.svelte +203 -0
  8. package/dist/Table/ActionsColumn.svelte.d.ts +9 -0
  9. package/dist/Table/Body.svelte +90 -0
  10. package/dist/Table/Body.svelte.d.ts +27 -0
  11. package/dist/Table/ColumnVisibilityDropdown.svelte +174 -0
  12. package/dist/Table/ColumnVisibilityDropdown.svelte.d.ts +27 -0
  13. package/dist/Table/Footer.svelte +34 -0
  14. package/dist/Table/Footer.svelte.d.ts +28 -0
  15. package/dist/Table/Header.svelte +176 -0
  16. package/dist/Table/Header.svelte.d.ts +28 -0
  17. package/dist/Table/PageSize.svelte +164 -0
  18. package/dist/Table/PageSize.svelte.d.ts +28 -0
  19. package/dist/Table/Pagination.svelte +145 -0
  20. package/dist/Table/Pagination.svelte.d.ts +27 -0
  21. package/dist/Table/RowCheckBox.svelte +31 -0
  22. package/dist/Table/RowCheckBox.svelte.d.ts +9 -0
  23. package/dist/Table/Skeleton.svelte +99 -0
  24. package/dist/Table/Skeleton.svelte.d.ts +7 -0
  25. package/dist/Table/Table.svelte +351 -0
  26. package/dist/Table/Table.svelte.d.ts +45 -0
  27. package/dist/Table/adapter/flex-render.svelte +40 -0
  28. package/dist/Table/adapter/flex-render.svelte.d.ts +28 -0
  29. package/dist/Table/adapter/index.d.ts +4 -0
  30. package/dist/Table/adapter/index.js +4 -0
  31. package/dist/Table/adapter/render-component.d.ts +13 -0
  32. package/dist/Table/adapter/render-component.js +18 -0
  33. package/dist/Table/adapter/table.svelte.d.ts +6 -0
  34. package/dist/Table/adapter/table.svelte.js +66 -0
  35. package/dist/Table/consts.d.ts +4 -0
  36. package/dist/Table/consts.js +4 -0
  37. package/dist/Table/context.d.ts +4 -0
  38. package/dist/Table/context.js +15 -0
  39. package/dist/Table/excel-setting.d.ts +8 -0
  40. package/dist/Table/excel-setting.js +3 -0
  41. package/dist/Table/excel.d.ts +4 -0
  42. package/dist/Table/excel.js +66 -0
  43. package/dist/Table/index.d.ts +6 -0
  44. package/dist/Table/index.js +6 -0
  45. package/dist/Table/types.d.ts +16 -0
  46. package/dist/Table/types.js +1 -0
  47. package/dist/Table/util.d.ts +4 -0
  48. package/dist/Table/util.js +46 -0
  49. package/dist/index.d.ts +2 -1
  50. package/dist/index.js +2 -1
  51. package/package.json +21 -1
  52. /package/dist/Controls/{Label.svelte.d.ts → Label/Label.svelte.d.ts} +0 -0
@@ -0,0 +1,176 @@
1
+ <script lang="ts" generics="T extends RowData">
2
+ import { Search } from '../index.js';
3
+ import { FlexRender, type HeaderGroup, type RowData } from './adapter/index.js';
4
+
5
+ interface Props {
6
+ headerGroups: HeaderGroup<T>[];
7
+ enableColumnSearch: boolean;
8
+ }
9
+
10
+ const getSortIcon: Record<string, string> = {
11
+ asc: 'arrow_upward',
12
+ desc: 'arrow_downward',
13
+ false: 'swap_vert'
14
+ };
15
+
16
+ let { headerGroups, enableColumnSearch }: Props = $props();
17
+ </script>
18
+
19
+ <thead class="container">
20
+ {#each headerGroups as headerGroup (headerGroup.id)}
21
+ <tr class="table-header-row">
22
+ {#each headerGroup.headers as header}
23
+ {@const alignColumn = header.column.columnDef.meta?.alignColumn}
24
+ {@const className = header.column.columnDef.meta?.className}
25
+ {@const columnWidth = header.column.columnDef.meta?.columnWidth}
26
+ {@const columnStyle = header.column.columnDef.meta?.style}
27
+ {@const hideColumnFilter = header.column.columnDef.meta?.hideColumnFilter}
28
+ {@const justifyContent = alignColumn ?? 'left'}
29
+ {@const isSorted = header.column.getIsSorted().toString() !== 'false'}
30
+ <th
31
+ colSpan={header.colSpan}
32
+ class={['table-header-cell', className, isSorted && 'table-header-cell--sorted']}
33
+ style:width={columnWidth}
34
+ style={columnStyle}
35
+ >
36
+ {#if !header.isPlaceholder}
37
+ {@const canSort = header.column.getCanSort()}
38
+
39
+ <button
40
+ type="button"
41
+ class={[
42
+ 'table-header-button',
43
+ canSort && 'table-header-button--sortable',
44
+ !canSort && 'table-header-button--disabled'
45
+ ]}
46
+ disabled={!canSort}
47
+ style:justify-content={justifyContent}
48
+ onclick={header.column.getToggleSortingHandler()}
49
+ >
50
+ <span class="table-header-label" class:table-header-label--sortable={canSort}>
51
+ <FlexRender
52
+ content={header.column.columnDef.header}
53
+ context={header.getContext()}
54
+ />
55
+ </span>
56
+
57
+ {#if canSort}
58
+ <div class="table-header-sort-icon">
59
+ <span class="material-icons"
60
+ >{getSortIcon[header.column.getIsSorted().toString()]}</span
61
+ >
62
+ </div>
63
+ {/if}
64
+ </button>
65
+
66
+ {#if enableColumnSearch && !hideColumnFilter}
67
+ <div class="table-header-search" style:justify-content={justifyContent}>
68
+ <Search
69
+ oninput={({ currentTarget }) => header.column.setFilterValue(currentTarget.value)}
70
+ onclear={() => header.column.setFilterValue('')}
71
+ disabled={!header.column.getCanFilter()}
72
+ />
73
+ </div>
74
+ {/if}
75
+ {/if}
76
+ </th>
77
+ {/each}
78
+ </tr>
79
+ {/each}
80
+ </thead>
81
+
82
+ <style>
83
+ .container {
84
+ --color-primary: #472aff;
85
+ --color-black: #000000;
86
+ --color-gray-100: #f3f4f6;
87
+ --color-gray-200: #e5e7eb;
88
+ --color-gray-300: #e0e5e8;
89
+ --spacing-xs: 4px;
90
+ --spacing-sm: 8px;
91
+ --spacing-md: 16px;
92
+ --font-size-xs: 12px;
93
+ --font-size-sm: 14px;
94
+ --font-bold: 700;
95
+ --font-normal: 400;
96
+ }
97
+
98
+ .table-header-cell:first-child {
99
+ border-left: 0.5px solid var(--color-gray-300);
100
+ }
101
+
102
+ .table-header-cell {
103
+ padding: var(--spacing-sm) var(--spacing-md);
104
+ border-right: 0.5px solid var(--color-gray-300);
105
+ border-bottom: 2px solid var(--color-black);
106
+ text-align: left;
107
+ font-size: var(--font-size-sm);
108
+ font-weight: var(--font-bold);
109
+ }
110
+
111
+ .table-header-cell:hover {
112
+ background: var(--color-gray-100);
113
+ }
114
+
115
+ .table-header-cell--sorted {
116
+ background: var(--color-gray-200);
117
+ color: var(--color-primary);
118
+ }
119
+
120
+ .table-header-button {
121
+ position: relative;
122
+ display: flex;
123
+ align-items: center;
124
+ width: 100%;
125
+ padding: 0;
126
+ border: none;
127
+ background: none;
128
+ font-size: inherit;
129
+ font-weight: inherit;
130
+ color: inherit;
131
+ }
132
+
133
+ .table-header-button--sortable {
134
+ cursor: pointer;
135
+ }
136
+
137
+ .table-header-button--disabled {
138
+ cursor: default;
139
+ }
140
+
141
+ .table-header-label {
142
+ white-space: nowrap;
143
+ }
144
+
145
+ .table-header-label--sortable {
146
+ margin-right: 16px;
147
+ }
148
+
149
+ @media (max-width: 750px) {
150
+ .table-header-label {
151
+ white-space: normal;
152
+ }
153
+ }
154
+
155
+ .table-header-sort-icon {
156
+ position: absolute;
157
+ right: -8px;
158
+ margin-top: 4px;
159
+ }
160
+
161
+ .table-header-sort-icon .material-icons {
162
+ font-size: var(--font-size-sm);
163
+ }
164
+
165
+ .table-header-search {
166
+ display: flex;
167
+ width: 144px;
168
+ margin: var(--spacing-xs) 0;
169
+ font-weight: var(--font-normal);
170
+ }
171
+
172
+ .table-header-search :global(.search-input) {
173
+ padding: var(--spacing-xs) 36px;
174
+ font-size: var(--font-size-xs);
175
+ }
176
+ </style>
@@ -0,0 +1,28 @@
1
+ import { type HeaderGroup, type RowData } from './adapter/index.js';
2
+ declare function $$render<T extends RowData>(): {
3
+ props: {
4
+ headerGroups: HeaderGroup<T>[];
5
+ enableColumnSearch: boolean;
6
+ };
7
+ exports: {};
8
+ bindings: "";
9
+ slots: {};
10
+ events: {};
11
+ };
12
+ declare class __sveltets_Render<T extends RowData> {
13
+ props(): ReturnType<typeof $$render<T>>['props'];
14
+ events(): ReturnType<typeof $$render<T>>['events'];
15
+ slots(): ReturnType<typeof $$render<T>>['slots'];
16
+ bindings(): "";
17
+ exports(): {};
18
+ }
19
+ interface $$IsomorphicComponent {
20
+ new <T extends RowData>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T>['props']>, ReturnType<__sveltets_Render<T>['events']>, ReturnType<__sveltets_Render<T>['slots']>> & {
21
+ $$bindings?: ReturnType<__sveltets_Render<T>['bindings']>;
22
+ } & ReturnType<__sveltets_Render<T>['exports']>;
23
+ <T extends RowData>(internal: unknown, props: ReturnType<__sveltets_Render<T>['props']> & {}): ReturnType<__sveltets_Render<T>['exports']>;
24
+ z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
25
+ }
26
+ declare const Header: $$IsomorphicComponent;
27
+ type Header<T extends RowData> = InstanceType<typeof Header<T>>;
28
+ export default Header;
@@ -0,0 +1,164 @@
1
+ <script lang="ts" generics="T">
2
+ import type { Table } from './adapter/index.js';
3
+ import { DEFAULT_ITEMS_PER_PAGE_OPTIONS } from './consts.js';
4
+ import { getPaginationTableContext } from './context.js';
5
+
6
+ interface Props {
7
+ table: Table<T>;
8
+ minPageSize: boolean;
9
+ }
10
+
11
+ let { table, minPageSize }: Props = $props();
12
+
13
+ const paginationTable = getPaginationTableContext();
14
+
15
+ const rowsLength = $derived(
16
+ $paginationTable ? $paginationTable.totalItems : table.getFilteredRowModel().rows.length
17
+ );
18
+ const currentPageSize = $derived(table.getState().pagination.pageSize);
19
+ const currentPageIndex = $derived(table.getState().pagination.pageIndex);
20
+ const initialPageSize = $derived(currentPageIndex * currentPageSize);
21
+
22
+ const endPageSize = $derived.by(() => {
23
+ if ($paginationTable) {
24
+ const calculatedEnd = initialPageSize + currentPageSize;
25
+ return calculatedEnd > rowsLength ? rowsLength : calculatedEnd;
26
+ }
27
+ return table.getCanNextPage() ? initialPageSize + currentPageSize : rowsLength;
28
+ });
29
+ </script>
30
+
31
+ <div class="page-size" class:page-size--margin={!minPageSize}>
32
+ {#if !minPageSize && rowsLength > DEFAULT_ITEMS_PER_PAGE_OPTIONS[0]}
33
+ <div class="page-size-selector">
34
+ <span>Rows per page:</span>
35
+ <select
36
+ class="page-size-select"
37
+ name="rows-per-page"
38
+ id="rows-per-page"
39
+ title="Rows per page"
40
+ value={currentPageSize}
41
+ onchange={(e) => {
42
+ table.setPageSize(Number(e.currentTarget.value));
43
+ }}
44
+ >
45
+ {#each DEFAULT_ITEMS_PER_PAGE_OPTIONS as itemPerPage}
46
+ <option class="page-size-option" value={itemPerPage}>{itemPerPage}</option>
47
+ {/each}
48
+ </select>
49
+ </div>
50
+ {/if}
51
+ <span
52
+ >{rowsLength !== 0 ? `${initialPageSize + 1}-${endPageSize} of ${rowsLength}` : rowsLength} rows</span
53
+ >
54
+ </div>
55
+
56
+ <style>
57
+ .page-size {
58
+ --color-black: #000000;
59
+ --color-primary: #472aff;
60
+ --color-gray-100: #f3f4f6;
61
+ --color-gray-200: #e5e7eb;
62
+ --color-border: #ebedef;
63
+ --spacing-sm: 8px;
64
+ --spacing-md: 12px;
65
+ --spacing-lg: 24px;
66
+ --radius-lg: 8px;
67
+ --font-medium: 500;
68
+ --font-semibold: 600;
69
+
70
+ display: flex;
71
+ align-items: center;
72
+ justify-content: center;
73
+ gap: var(--spacing-lg);
74
+ }
75
+
76
+ @media (max-width: 750px) {
77
+ .page-size {
78
+ margin-top: 20px;
79
+ }
80
+
81
+ .page-size--margin {
82
+ margin-left: 12px;
83
+ }
84
+ }
85
+
86
+ .page-size-selector {
87
+ display: flex;
88
+ align-items: center;
89
+ justify-content: center;
90
+ }
91
+
92
+ .page-size-select {
93
+ width: 64px;
94
+ padding: var(--spacing-sm);
95
+ border-radius: var(--radius-lg);
96
+ font-weight: var(--font-semibold);
97
+ cursor: pointer;
98
+ border: none;
99
+ background: transparent;
100
+ }
101
+
102
+ .page-size-select:hover {
103
+ background: var(--color-gray-100);
104
+ }
105
+
106
+ .page-size-select:focus {
107
+ outline: none;
108
+ }
109
+
110
+ .page-size-option {
111
+ gap: 20px;
112
+ padding: 4px 16px;
113
+ font-weight: var(--font-medium);
114
+ border-right: 2px solid var(--color-border);
115
+ border-left: 2px solid var(--color-border);
116
+ }
117
+
118
+ .page-size-option:hover {
119
+ background: var(--color-gray-200);
120
+ }
121
+
122
+ .page-size-option:first-of-type {
123
+ border-radius: var(--radius-lg) var(--radius-lg) 0 0;
124
+ border-top: 2px solid var(--color-border);
125
+ }
126
+
127
+ .page-size-option:last-of-type {
128
+ border-radius: 0 0 var(--radius-lg) var(--radius-lg);
129
+ border-bottom: 2px solid var(--color-border);
130
+ }
131
+
132
+ select,
133
+ ::picker(select) {
134
+ appearance: base-select;
135
+ }
136
+
137
+ select::picker-icon {
138
+ content: '\e5e1';
139
+ font-family: 'Material Icons';
140
+ color: var(--color-black);
141
+ margin-left: 5px;
142
+ display: inline-flex;
143
+ align-items: center;
144
+ transform: rotate(90deg);
145
+ transition: transform 0.4s ease;
146
+ }
147
+
148
+ option::checkmark {
149
+ content: '\e5ca';
150
+ font-family: 'Material Icons';
151
+ order: 1;
152
+ margin-left: auto;
153
+ color: var(--color-primary);
154
+ }
155
+
156
+ select:open::picker-icon {
157
+ transform: rotate(270deg);
158
+ }
159
+
160
+ ::picker(select) {
161
+ border: none;
162
+ border-radius: var(--radius-lg);
163
+ }
164
+ </style>
@@ -0,0 +1,28 @@
1
+ import type { Table } from './adapter/index.js';
2
+ declare function $$render<T>(): {
3
+ props: {
4
+ table: Table<T>;
5
+ minPageSize: boolean;
6
+ };
7
+ exports: {};
8
+ bindings: "";
9
+ slots: {};
10
+ events: {};
11
+ };
12
+ declare class __sveltets_Render<T> {
13
+ props(): ReturnType<typeof $$render<T>>['props'];
14
+ events(): ReturnType<typeof $$render<T>>['events'];
15
+ slots(): ReturnType<typeof $$render<T>>['slots'];
16
+ bindings(): "";
17
+ exports(): {};
18
+ }
19
+ interface $$IsomorphicComponent {
20
+ new <T>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T>['props']>, ReturnType<__sveltets_Render<T>['events']>, ReturnType<__sveltets_Render<T>['slots']>> & {
21
+ $$bindings?: ReturnType<__sveltets_Render<T>['bindings']>;
22
+ } & ReturnType<__sveltets_Render<T>['exports']>;
23
+ <T>(internal: unknown, props: ReturnType<__sveltets_Render<T>['props']> & {}): ReturnType<__sveltets_Render<T>['exports']>;
24
+ z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
25
+ }
26
+ declare const PageSize: $$IsomorphicComponent;
27
+ type PageSize<T> = InstanceType<typeof PageSize<T>>;
28
+ export default PageSize;
@@ -0,0 +1,145 @@
1
+ <script lang="ts" generics="T">
2
+ import { Tooltip } from '../index.js';
3
+ import type { Table } from './adapter/index.js';
4
+
5
+ interface Props {
6
+ table: Table<T>;
7
+ }
8
+
9
+ let { table }: Props = $props();
10
+
11
+ const initialPage = $derived(table.getState().pagination.pageIndex + 1);
12
+
13
+ const handlePaginationChange = (event: Event) => {
14
+ const input = event.currentTarget as HTMLInputElement;
15
+ if (input.value) {
16
+ const value = Number(input.value);
17
+ if (value > 0 && value <= table.getPageCount()) {
18
+ table.setPageIndex(value - 1);
19
+ } else {
20
+ input.value = '';
21
+ }
22
+
23
+ resizeCurrentPageHtml(input);
24
+ }
25
+ };
26
+
27
+ const handleInput = (event: Event) => {
28
+ const input = event.currentTarget as HTMLInputElement;
29
+ input.value = input.value.replace(/[^0-9]/g, '');
30
+ resizeCurrentPageHtml(input);
31
+ };
32
+
33
+ const resizeCurrentPageHtml = (htmlInputElement: HTMLInputElement) => {
34
+ htmlInputElement.style.width =
35
+ htmlInputElement.value.length > 2 ? `${htmlInputElement.value.length * 14}px` : '36px';
36
+ };
37
+ </script>
38
+
39
+ <div class="pagination">
40
+ <button
41
+ type="button"
42
+ class="pagination-button"
43
+ onclick={() => table.previousPage()}
44
+ disabled={!table.getCanPreviousPage()}
45
+ >
46
+ <span class="pagination-icon material-icons">arrow_back</span>
47
+ <span>Previous</span>
48
+ </button>
49
+ <div class="pagination-info">
50
+ <span>Page</span>
51
+ {#if table.getPageCount() > 1}
52
+ <Tooltip content="Enter page number" width="sm" position="bottom">
53
+ <input
54
+ type="text"
55
+ onchange={handlePaginationChange}
56
+ oninput={handleInput}
57
+ class="pagination-input"
58
+ value={initialPage}
59
+ />
60
+ </Tooltip>
61
+ {:else}
62
+ <span>{initialPage}</span>
63
+ {/if}
64
+ <span>of {table.getPageCount() !== 0 ? table.getPageCount() : initialPage}</span>
65
+ </div>
66
+
67
+ <button
68
+ type="button"
69
+ class="pagination-button"
70
+ onclick={() => table.nextPage()}
71
+ disabled={!table.getCanNextPage()}
72
+ >
73
+ <span>Next</span>
74
+ <span class="pagination-icon material-icons">arrow_forward</span>
75
+ </button>
76
+ </div>
77
+
78
+ <style>
79
+ .pagination {
80
+ --color-primary: #472aff;
81
+ --color-gray-300: #d1d5db;
82
+ --color-gray-500: #6b7280;
83
+ --color-text: #000000;
84
+ --spacing-sm: 8px;
85
+ --spacing-md: 12px;
86
+ --spacing-lg: 24px;
87
+ --radius-lg: 8px;
88
+ --font-size-sm: 14px;
89
+ --font-size-icon: 14px;
90
+ --input-height: 37px;
91
+ --input-width: 38px;
92
+
93
+ display: flex;
94
+ align-items: center;
95
+ justify-content: center;
96
+ gap: var(--spacing-lg);
97
+ padding: var(--spacing-sm) 0;
98
+ }
99
+
100
+ .pagination-button {
101
+ display: flex;
102
+ align-items: center;
103
+ gap: var(--spacing-sm);
104
+ padding: 0;
105
+ border: none;
106
+ background: none;
107
+ font-size: var(--font-size-sm);
108
+ color: var(--color-text);
109
+ cursor: pointer;
110
+ }
111
+
112
+ .pagination-button:disabled {
113
+ color: var(--color-gray-300);
114
+ cursor: not-allowed;
115
+ }
116
+
117
+ .pagination-icon {
118
+ font-size: var(--font-size-icon);
119
+ }
120
+
121
+ .pagination-info {
122
+ display: flex;
123
+ align-items: center;
124
+ gap: var(--spacing-sm);
125
+ }
126
+
127
+ .pagination-input {
128
+ height: var(--input-height);
129
+ width: var(--input-width);
130
+ padding: 0;
131
+ border: 1px solid var(--color-gray-500);
132
+ border-radius: var(--radius-lg);
133
+ text-align: center;
134
+ cursor: pointer;
135
+ }
136
+
137
+ .pagination-input:hover {
138
+ border-color: var(--color-primary);
139
+ }
140
+
141
+ .pagination-input:focus {
142
+ border: 1px solid var(--color-primary);
143
+ outline: none;
144
+ }
145
+ </style>
@@ -0,0 +1,27 @@
1
+ import type { Table } from './adapter/index.js';
2
+ declare function $$render<T>(): {
3
+ props: {
4
+ table: Table<T>;
5
+ };
6
+ exports: {};
7
+ bindings: "";
8
+ slots: {};
9
+ events: {};
10
+ };
11
+ declare class __sveltets_Render<T> {
12
+ props(): ReturnType<typeof $$render<T>>['props'];
13
+ events(): ReturnType<typeof $$render<T>>['events'];
14
+ slots(): ReturnType<typeof $$render<T>>['slots'];
15
+ bindings(): "";
16
+ exports(): {};
17
+ }
18
+ interface $$IsomorphicComponent {
19
+ new <T>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T>['props']>, ReturnType<__sveltets_Render<T>['events']>, ReturnType<__sveltets_Render<T>['slots']>> & {
20
+ $$bindings?: ReturnType<__sveltets_Render<T>['bindings']>;
21
+ } & ReturnType<__sveltets_Render<T>['exports']>;
22
+ <T>(internal: unknown, props: ReturnType<__sveltets_Render<T>['props']> & {}): ReturnType<__sveltets_Render<T>['exports']>;
23
+ z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
24
+ }
25
+ declare const Pagination: $$IsomorphicComponent;
26
+ type Pagination<T> = InstanceType<typeof Pagination<T>>;
27
+ export default Pagination;
@@ -0,0 +1,31 @@
1
+ <script lang="ts">
2
+ interface Props {
3
+ indeterminate?: boolean;
4
+ checked: boolean;
5
+ disabled?: boolean;
6
+ onchange: (event: Event) => void;
7
+ }
8
+
9
+ let { indeterminate = false, checked, disabled = false, onchange }: Props = $props();
10
+ </script>
11
+
12
+ <input
13
+ type="checkbox"
14
+ class="accent-magentablue"
15
+ {disabled}
16
+ {onchange}
17
+ {checked}
18
+ bind:indeterminate
19
+ />
20
+
21
+ <style>
22
+ .accent-magentablue {
23
+ accent-color: #472aff;
24
+ cursor: pointer;
25
+ }
26
+
27
+ .accent-magentablue:disabled {
28
+ cursor: not-allowed;
29
+ opacity: 0.5;
30
+ }
31
+ </style>
@@ -0,0 +1,9 @@
1
+ interface Props {
2
+ indeterminate?: boolean;
3
+ checked: boolean;
4
+ disabled?: boolean;
5
+ onchange: (event: Event) => void;
6
+ }
7
+ declare const RowCheckBox: import("svelte").Component<Props, {}, "">;
8
+ type RowCheckBox = ReturnType<typeof RowCheckBox>;
9
+ export default RowCheckBox;