@softwareone/spi-sv5-library 1.8.11 → 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 (79) hide show
  1. package/dist/{Form/AttachFile → AttachFile}/AttachFile.svelte +1 -1
  2. package/dist/Button/Button.svelte +16 -0
  3. package/dist/{Form → Controls}/Input/Input.svelte +2 -1
  4. package/dist/{Form → Controls}/Input/InputIcon.svelte +3 -2
  5. package/dist/{Form → Controls/Label}/Label.svelte +1 -1
  6. package/dist/{Form → Controls}/Select/Select.svelte +1 -1
  7. package/dist/{Form → Controls}/TextArea/TextArea.svelte +2 -1
  8. package/dist/{Form → Controls}/Toggle/Toggle.svelte +1 -1
  9. package/dist/Form/{FormController/Form.svelte → Form.svelte} +1 -1
  10. package/dist/Form/index.d.ts +6 -0
  11. package/dist/Form/index.js +11 -0
  12. package/dist/Table/ActionsColumn.svelte +203 -0
  13. package/dist/Table/ActionsColumn.svelte.d.ts +9 -0
  14. package/dist/Table/Body.svelte +90 -0
  15. package/dist/Table/Body.svelte.d.ts +27 -0
  16. package/dist/Table/ColumnVisibilityDropdown.svelte +174 -0
  17. package/dist/Table/ColumnVisibilityDropdown.svelte.d.ts +27 -0
  18. package/dist/Table/Footer.svelte +34 -0
  19. package/dist/Table/Footer.svelte.d.ts +28 -0
  20. package/dist/Table/Header.svelte +176 -0
  21. package/dist/Table/Header.svelte.d.ts +28 -0
  22. package/dist/Table/PageSize.svelte +164 -0
  23. package/dist/Table/PageSize.svelte.d.ts +28 -0
  24. package/dist/Table/Pagination.svelte +145 -0
  25. package/dist/Table/Pagination.svelte.d.ts +27 -0
  26. package/dist/Table/RowCheckBox.svelte +31 -0
  27. package/dist/Table/RowCheckBox.svelte.d.ts +9 -0
  28. package/dist/Table/Skeleton.svelte +99 -0
  29. package/dist/Table/Skeleton.svelte.d.ts +7 -0
  30. package/dist/Table/Table.svelte +351 -0
  31. package/dist/Table/Table.svelte.d.ts +45 -0
  32. package/dist/Table/adapter/flex-render.svelte +40 -0
  33. package/dist/Table/adapter/flex-render.svelte.d.ts +28 -0
  34. package/dist/Table/adapter/index.d.ts +4 -0
  35. package/dist/Table/adapter/index.js +4 -0
  36. package/dist/Table/adapter/render-component.d.ts +13 -0
  37. package/dist/Table/adapter/render-component.js +18 -0
  38. package/dist/Table/adapter/table.svelte.d.ts +6 -0
  39. package/dist/Table/adapter/table.svelte.js +66 -0
  40. package/dist/Table/consts.d.ts +4 -0
  41. package/dist/Table/consts.js +4 -0
  42. package/dist/Table/context.d.ts +4 -0
  43. package/dist/Table/context.js +15 -0
  44. package/dist/Table/excel-setting.d.ts +8 -0
  45. package/dist/Table/excel-setting.js +3 -0
  46. package/dist/Table/excel.d.ts +4 -0
  47. package/dist/Table/excel.js +66 -0
  48. package/dist/Table/index.d.ts +6 -0
  49. package/dist/Table/index.js +6 -0
  50. package/dist/Table/types.d.ts +16 -0
  51. package/dist/Table/util.d.ts +4 -0
  52. package/dist/Table/util.js +46 -0
  53. package/dist/index.d.ts +8 -12
  54. package/dist/index.js +8 -11
  55. package/package.json +25 -1
  56. package/dist/Form/AttachFile/attachFile.svelte.d.ts +0 -4
  57. /package/dist/{Form/AttachFile → AttachFile}/AttachFile.svelte.d.ts +0 -0
  58. /package/dist/{Form/AttachFile → AttachFile}/FileManager.svelte +0 -0
  59. /package/dist/{Form/AttachFile → AttachFile}/FileManager.svelte.d.ts +0 -0
  60. /package/dist/{Form/AttachFile → AttachFile}/Warnings.svelte +0 -0
  61. /package/dist/{Form/AttachFile → AttachFile}/Warnings.svelte.d.ts +0 -0
  62. /package/dist/{Form → Controls}/Input/Input.svelte.d.ts +0 -0
  63. /package/dist/{Form → Controls}/Input/InputIcon.svelte.d.ts +0 -0
  64. /package/dist/{Form → Controls/Label}/Label.svelte.d.ts +0 -0
  65. /package/dist/{Form → Controls}/Select/Select.svelte.d.ts +0 -0
  66. /package/dist/{Form → Controls}/Select/selectState.svelte.d.ts +0 -0
  67. /package/dist/{Form → Controls}/Select/selectState.svelte.js +0 -0
  68. /package/dist/{Form → Controls}/TextArea/TextArea.svelte.d.ts +0 -0
  69. /package/dist/{Form → Controls}/Toggle/Toggle.svelte.d.ts +0 -0
  70. /package/dist/Form/{FormController/Form.svelte.d.ts → Form.svelte.d.ts} +0 -0
  71. /package/dist/Form/{FormController/context.d.ts → context.d.ts} +0 -0
  72. /package/dist/Form/{FormController/context.js → context.js} +0 -0
  73. /package/dist/Form/{FormController/helper.d.ts → helper.d.ts} +0 -0
  74. /package/dist/Form/{FormController/helper.js → helper.js} +0 -0
  75. /package/dist/Form/{FormController/types.d.ts → types.d.ts} +0 -0
  76. /package/dist/Form/{FormController/types.js → types.js} +0 -0
  77. /package/dist/Form/{FormController/zod-validations.d.ts → zod-validations.d.ts} +0 -0
  78. /package/dist/Form/{FormController/zod-validations.js → zod-validations.js} +0 -0
  79. /package/dist/{Form/AttachFile/attachFile.svelte.js → Table/types.js} +0 -0
@@ -1,5 +1,5 @@
1
1
  <script lang="ts">
2
- import { Notification } from '../../index.js';
2
+ import { Notification } from '../index.js';
3
3
  import type { Attachment } from 'svelte/attachments';
4
4
  import FileManager from './FileManager.svelte';
5
5
  import Warnings from './Warnings.svelte';
@@ -83,6 +83,7 @@
83
83
  border: none;
84
84
  background: #fff;
85
85
  color: #472aff;
86
+ padding: 8px;
86
87
  }
87
88
 
88
89
  .btn-outline-none-primary:hover:not(:disabled),
@@ -117,8 +118,23 @@
117
118
  color: #dc182c;
118
119
  }
119
120
 
121
+ .btn-outline-none-danger {
122
+ border: none;
123
+ background: #fff;
124
+ color: #dc182c;
125
+ padding: 8px;
126
+ }
127
+
128
+ .btn-outline-none-danger:hover:not(:disabled),
129
+ .btn-outline-none-danger:focus:not(:disabled),
120
130
  .btn-outline-danger:hover:not(:disabled),
121
131
  .btn-outline-danger:focus:not(:disabled) {
122
132
  background: #fce8ea;
123
133
  }
134
+
135
+ .btn-outline-none-primary:disabled,
136
+ .btn-outline-none-danger:disabled {
137
+ background: transparent;
138
+ color: #6b7180;
139
+ }
124
140
  </style>
@@ -1,7 +1,8 @@
1
1
  <script lang="ts">
2
2
  import type { HTMLInputAttributes } from 'svelte/elements';
3
+
4
+ import Label from '../Label/Label.svelte';
3
5
  import InputIcon from './InputIcon.svelte';
4
- import Label from '../Label.svelte';
5
6
 
6
7
  type InputType = 'text' | 'password' | 'number' | 'date' | 'money';
7
8
 
@@ -28,7 +28,8 @@
28
28
  </span>
29
29
  </button>
30
30
  {:else}
31
- <span class="material-icons-outlined form-input-icon form-input-icon--{type}"
31
+ <span
32
+ class="material-icons-outlined form-input-icon form-input-icon--{type}"
32
33
  class:form-input-icon--date-status={isDateInput && (type === 'error' || type === 'success')}
33
34
  >{icons[type]}</span
34
35
  >
@@ -93,5 +94,5 @@
93
94
 
94
95
  .form-input-icon-button:active {
95
96
  transform: scale(0.95);
96
- }
97
+ }
97
98
  </style>
@@ -1,5 +1,5 @@
1
1
  <script lang="ts">
2
- import { Tooltip } from '../index.js';
2
+ import { Tooltip } from '../../index.js';
3
3
 
4
4
  interface LabelProps {
5
5
  label?: string;
@@ -4,7 +4,7 @@
4
4
  import type { Attachment } from 'svelte/attachments';
5
5
 
6
6
  import { Search, type SelectOption } from '../../index.js';
7
- import Label from '../Label.svelte';
7
+ import Label from '../Label/Label.svelte';
8
8
 
9
9
  interface SelectProps {
10
10
  options: string[] | SelectOption[];
@@ -1,6 +1,7 @@
1
1
  <script lang="ts">
2
2
  import type { HTMLTextareaAttributes } from 'svelte/elements';
3
- import Label from '../Label.svelte';
3
+
4
+ import Label from '../Label/Label.svelte';
4
5
 
5
6
  interface TextAreaProps extends Omit<HTMLTextareaAttributes, 'value'> {
6
7
  label?: string;
@@ -1,5 +1,5 @@
1
1
  <script lang="ts">
2
- import Label from '../Label.svelte';
2
+ import Label from '../Label/Label.svelte';
3
3
 
4
4
  interface ToggleProps {
5
5
  id?: string;
@@ -10,7 +10,7 @@
10
10
  } from 'sveltekit-superforms/client';
11
11
  import { z } from 'zod';
12
12
 
13
- import { addToast, Spinner } from '../../index.js';
13
+ import { addToast, Spinner } from '../index.js';
14
14
  import { getFormContext } from './context.js';
15
15
  import { isEqual } from './helper.js';
16
16
  import type { FormError } from './types.js';
@@ -0,0 +1,6 @@
1
+ import Form from './Form.svelte';
2
+ import { getFormContext, setFormContext } from './context.js';
3
+ import { validateSchema } from './helper.js';
4
+ import { createZodString } from './zod-validations.js';
5
+ import type { FormContext, FormError } from './types.js';
6
+ export { Form, createZodString, getFormContext, setFormContext, validateSchema, type FormContext, type FormError };
@@ -0,0 +1,11 @@
1
+ // Components
2
+ import Form from './Form.svelte';
3
+ // State, enums, and helpers
4
+ import { getFormContext, setFormContext } from './context.js';
5
+ import { validateSchema } from './helper.js';
6
+ import { createZodString } from './zod-validations.js';
7
+ export {
8
+ // Components
9
+ Form,
10
+ // Functions and helpers
11
+ createZodString, getFormContext, setFormContext, validateSchema };
@@ -0,0 +1,203 @@
1
+ <script lang="ts">
2
+ import type { Action } from './types.js';
3
+
4
+ interface Props {
5
+ actions: Action[];
6
+ isLastChild?: boolean;
7
+ isOnlyOneRow?: boolean;
8
+ }
9
+
10
+ let { actions, isLastChild = false, isOnlyOneRow = false }: Props = $props();
11
+
12
+ const icons: Record<string, string> = {
13
+ Edit: 'edit',
14
+ Delete: 'delete'
15
+ };
16
+
17
+ const indexLastSecondaryAction = $derived(
18
+ actions.findLastIndex((action) => !action.isMainAction)
19
+ );
20
+ </script>
21
+
22
+ <div class="actions-column">
23
+ {#if actions.length > 1}
24
+ <div class="actions-group">
25
+ <span class="actions-trigger">...</span>
26
+ <div
27
+ class={[
28
+ 'actions-menu',
29
+ isOnlyOneRow && 'actions-menu--only-row',
30
+ isLastChild && !isOnlyOneRow && 'actions-menu--last',
31
+ !isLastChild && !isOnlyOneRow && 'actions-menu--top'
32
+ ]}
33
+ >
34
+ <ul class="actions-list">
35
+ {#each actions as action, index}
36
+ <li>
37
+ <button
38
+ type="button"
39
+ onclick={action.onClick}
40
+ class="action-button"
41
+ class:action-button--delete={action.isDelete && action.isEnabled}
42
+ disabled={!action.isEnabled}
43
+ >
44
+ <span>{action.name}</span>
45
+ </button>
46
+ </li>
47
+ {#if indexLastSecondaryAction !== -1 && indexLastSecondaryAction !== actions.length - 1 && indexLastSecondaryAction === index}
48
+ <hr class="action-divider" />
49
+ {/if}
50
+ {/each}
51
+ </ul>
52
+ </div>
53
+ </div>
54
+ {:else}
55
+ {@const action = actions[0]}
56
+ {@const nameIcon = icons[action.name]}
57
+
58
+ <button
59
+ type="button"
60
+ onclick={action.onClick}
61
+ class="action-button action-button--single"
62
+ class:action-button--delete={action.isDelete && action.isEnabled}
63
+ disabled={!action.isEnabled}
64
+ >
65
+ {#if nameIcon}
66
+ <span class="material-icons-outlined">
67
+ {nameIcon}
68
+ </span>
69
+ {:else}
70
+ <span class:action-button--primary={action.isEnabled}>{action.name}</span>
71
+ {/if}
72
+ </button>
73
+ {/if}
74
+ </div>
75
+
76
+ <style>
77
+ .actions-column {
78
+ --color-primary: #472aff;
79
+ --color-red-200: #dc182c;
80
+ --color-gray-200: #e5e7eb;
81
+ --color-gray-300: #d1d5db;
82
+ --color-white: #ffffff;
83
+ --color-text: #000000;
84
+ --shadow-menu: 0 2px 10px rgba(0, 0, 0, 0.2);
85
+ --radius-lg: 8px;
86
+ --spacing-xs: 4px;
87
+ --spacing-sm: 8px;
88
+ --spacing-md: 10px;
89
+ --spacing-lg: 14px;
90
+ --z-index-menu: 1;
91
+ --font-size-sm: 14px;
92
+ --font-size-2xl: 24px;
93
+ --transition-standard: all 0.3s ease;
94
+
95
+ position: relative;
96
+ display: flex;
97
+ align-items: center;
98
+ justify-content: center;
99
+ }
100
+
101
+ .actions-group {
102
+ position: absolute;
103
+ }
104
+
105
+ .actions-trigger {
106
+ display: inline-block;
107
+ margin-bottom: var(--spacing-sm);
108
+ font-size: var(--font-size-2xl);
109
+ font-weight: bold;
110
+ cursor: default;
111
+ }
112
+
113
+ .actions-menu {
114
+ position: absolute;
115
+ z-index: var(--z-index-menu);
116
+ width: 108px;
117
+ padding: var(--spacing-md) var(--spacing-lg);
118
+ background: var(--color-white);
119
+ border-radius: var(--radius-lg);
120
+ box-shadow: var(--shadow-menu);
121
+ visibility: hidden;
122
+ opacity: 0;
123
+ transition: var(--transition-standard);
124
+ }
125
+
126
+ .actions-group:hover .actions-menu {
127
+ visibility: visible;
128
+ opacity: 1;
129
+ }
130
+
131
+ .actions-menu--only-row {
132
+ right: 28px;
133
+ bottom: 16px;
134
+ transform: translateY(50%);
135
+ }
136
+
137
+ .actions-menu--last {
138
+ bottom: 28px;
139
+ left: 50%;
140
+ transform: translateX(-50%);
141
+ }
142
+
143
+ .actions-menu--top {
144
+ top: 32px;
145
+ left: 50%;
146
+ transform: translateX(-50%);
147
+ }
148
+
149
+ .actions-list {
150
+ display: flex;
151
+ flex-direction: column;
152
+ gap: var(--spacing-sm);
153
+ margin: 0;
154
+ padding: 0;
155
+ list-style: none;
156
+ text-align: left;
157
+ font-size: var(--font-size-sm);
158
+ }
159
+
160
+ .action-button {
161
+ display: flex;
162
+ align-items: center;
163
+ padding: 0;
164
+ border: none;
165
+ background: none;
166
+ color: var(--color-text);
167
+ font-size: inherit;
168
+ cursor: pointer;
169
+ }
170
+
171
+ .action-button:hover:not(:disabled) {
172
+ font-weight: 500;
173
+ }
174
+
175
+ .action-button:disabled {
176
+ color: var(--color-gray-300);
177
+ cursor: not-allowed;
178
+ font-weight: normal;
179
+ }
180
+
181
+ .action-button--delete {
182
+ color: var(--color-red-200);
183
+ }
184
+
185
+ .action-button--single {
186
+ display: flex;
187
+ align-items: center;
188
+ }
189
+
190
+ .action-button--primary {
191
+ color: var(--color-primary);
192
+ }
193
+
194
+ .action-button--primary:hover {
195
+ font-weight: 600;
196
+ }
197
+
198
+ .action-divider {
199
+ border: none;
200
+ border-top: 1px solid var(--color-gray-200);
201
+ margin: 0;
202
+ }
203
+ </style>
@@ -0,0 +1,9 @@
1
+ import type { Action } from './types.js';
2
+ interface Props {
3
+ actions: Action[];
4
+ isLastChild?: boolean;
5
+ isOnlyOneRow?: boolean;
6
+ }
7
+ declare const ActionsColumn: import("svelte").Component<Props, {}, "">;
8
+ type ActionsColumn = ReturnType<typeof ActionsColumn>;
9
+ export default ActionsColumn;
@@ -0,0 +1,90 @@
1
+ <script lang="ts" generics="T">
2
+ import { flip } from 'svelte/animate';
3
+ import { FlexRender, type Row } from './adapter/index.js';
4
+
5
+ interface Props {
6
+ bodyRows: Row<T>[];
7
+ }
8
+
9
+ let { bodyRows }: Props = $props();
10
+ </script>
11
+
12
+ <tbody class="table-body">
13
+ {#each bodyRows as row (row.id)}
14
+ <tr
15
+ animate:flip={{ duration: 500 }}
16
+ class={['table-row', row.getIsSelected() && 'table-row--selected']}
17
+ >
18
+ {#each row.getVisibleCells() as cell}
19
+ {@const alignColumn = cell.column.columnDef.meta?.alignColumn}
20
+ {@const columnWidth = cell.column.columnDef.meta?.columnWidth}
21
+ {@const columnStyle = cell.column.columnDef.meta?.style}
22
+ <td
23
+ class={[
24
+ 'table-cell',
25
+ alignColumn === 'right' && 'table-cell--right',
26
+ alignColumn === 'center' && 'table-cell--center',
27
+ !alignColumn && 'table-cell--left'
28
+ ]}
29
+ style:width={columnWidth}
30
+ style={columnStyle}
31
+ >
32
+ <FlexRender content={cell.column.columnDef.cell} context={cell.getContext()} />
33
+ </td>
34
+ {/each}
35
+ </tr>
36
+ {/each}
37
+ </tbody>
38
+
39
+ <style>
40
+ .table-body {
41
+ --color-white: #fff;
42
+ --color-black: #000;
43
+ --color-row-selected: #eaecff;
44
+ --color-gray-300: #e0e5e8;
45
+ --color-gray-400: #f3f4f6;
46
+ --spacing-md: 8px;
47
+ --spacing-lg: 16px;
48
+ --font-size-sm: 14px;
49
+
50
+ background: var(--color-white);
51
+ }
52
+
53
+ .table-row {
54
+ transition: background-color 100ms ease;
55
+ }
56
+
57
+ .table-row:hover {
58
+ background: var(--color-gray-400);
59
+ }
60
+
61
+ .table-row--selected {
62
+ background: var(--color-row-selected);
63
+ }
64
+
65
+ .table-row--selected:hover {
66
+ background: var(--color-row-selected);
67
+ }
68
+
69
+ .table-cell {
70
+ max-width: 50px;
71
+ padding: var(--spacing-md) var(--spacing-lg);
72
+ border-bottom: 0.5px solid var(--color-gray-300);
73
+ font-size: var(--font-size-sm);
74
+ color: var(--color-black);
75
+ word-wrap: break-word;
76
+ white-space: normal;
77
+ }
78
+
79
+ .table-cell--left {
80
+ text-align: left;
81
+ }
82
+
83
+ .table-cell--center {
84
+ text-align: center;
85
+ }
86
+
87
+ .table-cell--right {
88
+ text-align: right;
89
+ }
90
+ </style>
@@ -0,0 +1,27 @@
1
+ import { type Row } from './adapter/index.js';
2
+ declare function $$render<T>(): {
3
+ props: {
4
+ bodyRows: Row<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 Body: $$IsomorphicComponent;
26
+ type Body<T> = InstanceType<typeof Body<T>>;
27
+ export default Body;
@@ -0,0 +1,174 @@
1
+ <script lang="ts" generics="T">
2
+ import type { Column } from './adapter/index.js';
3
+
4
+ interface Props {
5
+ columns: Column<T, unknown>[];
6
+ }
7
+
8
+ let { columns }: Props = $props();
9
+
10
+ let isOpen = $state(false);
11
+
12
+ const toggleModal = () => {
13
+ isOpen = !isOpen;
14
+ };
15
+ </script>
16
+
17
+ <div class="column-visibility">
18
+ <button type="button" class="column-visibility-toggle" onclick={toggleModal}>
19
+ <span class="material-icons">table_rows</span>
20
+ Columns
21
+ </button>
22
+
23
+ {#if isOpen}
24
+ <div class="column-visibility-dropdown" role="menu">
25
+ <div class="column-visibility-header">
26
+ <h2 class="column-visibility-title">Toggle columns</h2>
27
+ <button type="button" onclick={toggleModal} class="column-visibility-close">
28
+ <span class="material-icons">close</span>
29
+ </button>
30
+ </div>
31
+
32
+ <div class="column-visibility-list">
33
+ {#each columns as column}
34
+ {@const columnDef = column.columnDef}
35
+ {@const header = typeof columnDef.header === 'string' ? columnDef.header : column.id}
36
+
37
+ <label class="column-visibility-item">
38
+ <input
39
+ type="checkbox"
40
+ checked={column.getIsVisible()}
41
+ onchange={() => column.toggleVisibility()}
42
+ />
43
+ <span class="column-visibility-label">{header}</span>
44
+ </label>
45
+ {/each}
46
+ </div>
47
+ </div>
48
+ {/if}
49
+ </div>
50
+
51
+ {#if isOpen}
52
+ <button
53
+ type="button"
54
+ class="column-visibility-backdrop"
55
+ onclick={toggleModal}
56
+ aria-label="Close dropdown"
57
+ ></button>
58
+ {/if}
59
+
60
+ <style>
61
+ .column-visibility {
62
+ --color-white: #ffffff;
63
+ --color-gray-50: #f9fafb;
64
+ --color-gray-100: #f3f4f6;
65
+ --color-gray-500: #6b7280;
66
+ --color-gray-600: #4b5563;
67
+ --spacing-xs: 8px;
68
+ --spacing-sm: 8px;
69
+ --spacing-md: 16px;
70
+ --font-size-sm: 14px;
71
+ --font-size-icon: 14px;
72
+ --font-semibold: 600;
73
+ --radius-lg: 8px;
74
+ --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
75
+ --z-index-dropdown: 10;
76
+ --z-index-backdrop: 9;
77
+
78
+ position: relative;
79
+ }
80
+
81
+ .column-visibility-toggle {
82
+ display: flex;
83
+ align-items: center;
84
+ gap: var(--spacing-xs);
85
+ padding: var(--spacing-sm) var(--spacing-md);
86
+ border: none;
87
+ border-radius: var(--radius-lg);
88
+ background: var(--color-white);
89
+ font-size: var(--font-size-sm);
90
+ cursor: pointer;
91
+ }
92
+
93
+ .column-visibility-toggle:hover {
94
+ background: var(--color-gray-100);
95
+ }
96
+
97
+ .column-visibility-toggle .material-icons {
98
+ font-size: var(--font-size-icon);
99
+ }
100
+
101
+ .column-visibility-dropdown {
102
+ position: absolute;
103
+ top: 48px;
104
+ right: 0;
105
+ z-index: var(--z-index-dropdown);
106
+ width: 224px;
107
+ padding: var(--spacing-md);
108
+ background: var(--color-white);
109
+ border-radius: var(--radius-lg);
110
+ box-shadow: var(--shadow-lg);
111
+ }
112
+
113
+ .column-visibility-header {
114
+ display: flex;
115
+ align-items: center;
116
+ justify-content: space-between;
117
+ margin-bottom: var(--spacing-sm);
118
+ }
119
+
120
+ .column-visibility-title {
121
+ margin: 0;
122
+ font-size: var(--font-size-sm);
123
+ font-weight: var(--font-semibold);
124
+ }
125
+
126
+ .column-visibility-close {
127
+ display: flex;
128
+ align-items: center;
129
+ padding: 0;
130
+ border: none;
131
+ background: none;
132
+ color: var(--color-gray-500);
133
+ cursor: pointer;
134
+ }
135
+
136
+ .column-visibility-close:hover {
137
+ color: var(--color-gray-600);
138
+ }
139
+
140
+ .column-visibility-close .material-icons {
141
+ font-size: var(--font-size-icon);
142
+ }
143
+
144
+ .column-visibility-list {
145
+ max-height: 240px;
146
+ overflow-y: auto;
147
+ }
148
+
149
+ .column-visibility-item {
150
+ display: flex;
151
+ align-items: center;
152
+ gap: var(--spacing-xs);
153
+ padding: var(--spacing-sm);
154
+ border-radius: var(--radius-lg);
155
+ cursor: pointer;
156
+ }
157
+
158
+ .column-visibility-item:hover {
159
+ background: var(--color-gray-50);
160
+ }
161
+
162
+ .column-visibility-label {
163
+ font-size: var(--font-size-sm);
164
+ }
165
+
166
+ .column-visibility-backdrop {
167
+ position: fixed;
168
+ inset: 0;
169
+ z-index: var(--z-index-backdrop);
170
+ border: none;
171
+ background: transparent;
172
+ cursor: default;
173
+ }
174
+ </style>
@@ -0,0 +1,27 @@
1
+ import type { Column } from './adapter/index.js';
2
+ declare function $$render<T>(): {
3
+ props: {
4
+ columns: Column<T, unknown>[];
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 ColumnVisibilityDropdown: $$IsomorphicComponent;
26
+ type ColumnVisibilityDropdown<T> = InstanceType<typeof ColumnVisibilityDropdown<T>>;
27
+ export default ColumnVisibilityDropdown;