@urbicon-ui/table 6.1.4

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 (154) hide show
  1. package/README.md +153 -0
  2. package/dist/cells/ActionButtons.svelte +224 -0
  3. package/dist/cells/ActionButtons.svelte.d.ts +74 -0
  4. package/dist/cells/CopyButton.svelte +89 -0
  5. package/dist/cells/CopyButton.svelte.d.ts +33 -0
  6. package/dist/cells/CustomCell.svelte +136 -0
  7. package/dist/cells/CustomCell.svelte.d.ts +44 -0
  8. package/dist/cells/DateCell.svelte +194 -0
  9. package/dist/cells/DateCell.svelte.d.ts +39 -0
  10. package/dist/cells/LinkCell.svelte +240 -0
  11. package/dist/cells/LinkCell.svelte.d.ts +42 -0
  12. package/dist/cells/NumberCell.svelte +225 -0
  13. package/dist/cells/NumberCell.svelte.d.ts +47 -0
  14. package/dist/cells/StatusBadge.svelte +121 -0
  15. package/dist/cells/StatusBadge.svelte.d.ts +44 -0
  16. package/dist/cells/UserAvatar.svelte +71 -0
  17. package/dist/cells/UserAvatar.svelte.d.ts +37 -0
  18. package/dist/cells/index.d.ts +8 -0
  19. package/dist/cells/index.js +9 -0
  20. package/dist/core/EmptyState.svelte +161 -0
  21. package/dist/core/EmptyState.svelte.d.ts +16 -0
  22. package/dist/core/ErrorState.svelte +158 -0
  23. package/dist/core/ErrorState.svelte.d.ts +15 -0
  24. package/dist/core/GroupedRow.svelte +239 -0
  25. package/dist/core/GroupedRow.svelte.d.ts +18 -0
  26. package/dist/core/LoadingState.svelte +75 -0
  27. package/dist/core/LoadingState.svelte.d.ts +14 -0
  28. package/dist/core/MobileCard.svelte +151 -0
  29. package/dist/core/MobileCard.svelte.d.ts +15 -0
  30. package/dist/core/TableCell.svelte +105 -0
  31. package/dist/core/TableCell.svelte.d.ts +14 -0
  32. package/dist/core/TableDesktop.svelte +480 -0
  33. package/dist/core/TableDesktop.svelte.d.ts +26 -0
  34. package/dist/core/TableHead.svelte +314 -0
  35. package/dist/core/TableHead.svelte.d.ts +7 -0
  36. package/dist/core/TableMobile.svelte +112 -0
  37. package/dist/core/TableMobile.svelte.d.ts +13 -0
  38. package/dist/core/TableProvider.svelte +271 -0
  39. package/dist/core/TableProvider.svelte.d.ts +40 -0
  40. package/dist/core/TableRow.svelte +171 -0
  41. package/dist/core/TableRow.svelte.d.ts +16 -0
  42. package/dist/core/index.d.ts +17 -0
  43. package/dist/core/index.js +14 -0
  44. package/dist/core/sticky-context.svelte.d.ts +48 -0
  45. package/dist/core/sticky-context.svelte.js +88 -0
  46. package/dist/core/table/Table.svelte +304 -0
  47. package/dist/core/table/Table.svelte.d.ts +26 -0
  48. package/dist/core/table/index.d.ts +448 -0
  49. package/dist/core/table/index.js +1 -0
  50. package/dist/core/table-style-context.d.ts +66 -0
  51. package/dist/core/table-style-context.js +26 -0
  52. package/dist/factories/ColumnValidation.d.ts +49 -0
  53. package/dist/factories/ColumnValidation.js +188 -0
  54. package/dist/factories/TableColumns.d.ts +97 -0
  55. package/dist/factories/TableColumns.js +262 -0
  56. package/dist/factories/TypedColumnBuilder.d.ts +41 -0
  57. package/dist/factories/TypedColumnBuilder.js +72 -0
  58. package/dist/factories/index.d.ts +12 -0
  59. package/dist/factories/index.js +13 -0
  60. package/dist/features/HeaderMenu.svelte +236 -0
  61. package/dist/features/HeaderMenu.svelte.d.ts +8 -0
  62. package/dist/features/LiveUpdateBanner.svelte +66 -0
  63. package/dist/features/LiveUpdateBanner.svelte.d.ts +6 -0
  64. package/dist/features/SearchHighlight.svelte +21 -0
  65. package/dist/features/SearchHighlight.svelte.d.ts +8 -0
  66. package/dist/features/SmartFilterBar/ChipsField.svelte +104 -0
  67. package/dist/features/SmartFilterBar/ChipsField.svelte.d.ts +5 -0
  68. package/dist/features/SmartFilterBar/ColumnVisibilityMenu.svelte +84 -0
  69. package/dist/features/SmartFilterBar/ColumnVisibilityMenu.svelte.d.ts +3 -0
  70. package/dist/features/SmartFilterBar/FilterMenu.svelte +367 -0
  71. package/dist/features/SmartFilterBar/FilterMenu.svelte.d.ts +3 -0
  72. package/dist/features/SmartFilterBar/GroupingMenu.svelte +82 -0
  73. package/dist/features/SmartFilterBar/GroupingMenu.svelte.d.ts +3 -0
  74. package/dist/features/SmartFilterBar/SmartFilterBar.svelte +109 -0
  75. package/dist/features/SmartFilterBar/SmartFilterBar.svelte.d.ts +11 -0
  76. package/dist/features/SmartFilterBar/SummaryMenu.svelte +118 -0
  77. package/dist/features/SmartFilterBar/SummaryMenu.svelte.d.ts +3 -0
  78. package/dist/features/SummaryRow.svelte +97 -0
  79. package/dist/features/SummaryRow.svelte.d.ts +8 -0
  80. package/dist/features/index.d.ts +4 -0
  81. package/dist/features/index.js +4 -0
  82. package/dist/i18n/index.d.ts +366 -0
  83. package/dist/i18n/index.js +21 -0
  84. package/dist/index.d.ts +28 -0
  85. package/dist/index.js +41 -0
  86. package/dist/stores/TableStore.svelte.d.ts +192 -0
  87. package/dist/stores/TableStore.svelte.js +362 -0
  88. package/dist/stores/concerns/index.d.ts +15 -0
  89. package/dist/stores/concerns/index.js +14 -0
  90. package/dist/stores/concerns/types.d.ts +31 -0
  91. package/dist/stores/concerns/types.js +1 -0
  92. package/dist/stores/concerns/useColumnOrder.svelte.d.ts +16 -0
  93. package/dist/stores/concerns/useColumnOrder.svelte.js +81 -0
  94. package/dist/stores/concerns/useColumnVisibility.svelte.d.ts +16 -0
  95. package/dist/stores/concerns/useColumnVisibility.svelte.js +58 -0
  96. package/dist/stores/concerns/useExpansion.svelte.d.ts +9 -0
  97. package/dist/stores/concerns/useExpansion.svelte.js +32 -0
  98. package/dist/stores/concerns/useFiltering.svelte.d.ts +20 -0
  99. package/dist/stores/concerns/useFiltering.svelte.js +109 -0
  100. package/dist/stores/concerns/useFocusManagement.svelte.d.ts +15 -0
  101. package/dist/stores/concerns/useFocusManagement.svelte.js +52 -0
  102. package/dist/stores/concerns/useGrouping.svelte.d.ts +15 -0
  103. package/dist/stores/concerns/useGrouping.svelte.js +86 -0
  104. package/dist/stores/concerns/useLiveUpdates.svelte.d.ts +45 -0
  105. package/dist/stores/concerns/useLiveUpdates.svelte.js +175 -0
  106. package/dist/stores/concerns/usePagination.svelte.d.ts +18 -0
  107. package/dist/stores/concerns/usePagination.svelte.js +54 -0
  108. package/dist/stores/concerns/usePersistence.svelte.d.ts +36 -0
  109. package/dist/stores/concerns/usePersistence.svelte.js +167 -0
  110. package/dist/stores/concerns/useRemoteData.svelte.d.ts +21 -0
  111. package/dist/stores/concerns/useRemoteData.svelte.js +64 -0
  112. package/dist/stores/concerns/useSearch.svelte.d.ts +8 -0
  113. package/dist/stores/concerns/useSearch.svelte.js +16 -0
  114. package/dist/stores/concerns/useSelection.svelte.d.ts +21 -0
  115. package/dist/stores/concerns/useSelection.svelte.js +110 -0
  116. package/dist/stores/concerns/useSorting.svelte.d.ts +11 -0
  117. package/dist/stores/concerns/useSorting.svelte.js +70 -0
  118. package/dist/stores/concerns/useSummary.svelte.d.ts +18 -0
  119. package/dist/stores/concerns/useSummary.svelte.js +96 -0
  120. package/dist/stores/index.d.ts +1 -0
  121. package/dist/stores/index.js +1 -0
  122. package/dist/style/index.css +137 -0
  123. package/dist/style/index.d.ts +2 -0
  124. package/dist/style/index.js +2 -0
  125. package/dist/style/table-theme.css +131 -0
  126. package/dist/style/themes/comfortable.css +20 -0
  127. package/dist/style/themes/compact.css +20 -0
  128. package/dist/translations/de.d.ts +177 -0
  129. package/dist/translations/de.js +176 -0
  130. package/dist/translations/en.d.ts +177 -0
  131. package/dist/translations/en.js +176 -0
  132. package/dist/types/index.d.ts +1 -0
  133. package/dist/types/index.js +1 -0
  134. package/dist/types/tableTypes.d.ts +262 -0
  135. package/dist/types/tableTypes.js +1 -0
  136. package/dist/utils/index.d.ts +165 -0
  137. package/dist/utils/index.js +330 -0
  138. package/dist/utils/sticky-measure.d.ts +54 -0
  139. package/dist/utils/sticky-measure.js +107 -0
  140. package/dist/utils/virtualizer.d.ts +43 -0
  141. package/dist/utils/virtualizer.js +43 -0
  142. package/dist/variants/index.d.ts +11 -0
  143. package/dist/variants/index.js +15 -0
  144. package/dist/variants/table-cells.variants.d.ts +827 -0
  145. package/dist/variants/table-cells.variants.js +627 -0
  146. package/dist/variants/table-features.variants.d.ts +547 -0
  147. package/dist/variants/table-features.variants.js +412 -0
  148. package/dist/variants/table-states.variants.d.ts +594 -0
  149. package/dist/variants/table-states.variants.js +394 -0
  150. package/dist/variants/table.system.d.ts +301 -0
  151. package/dist/variants/table.system.js +314 -0
  152. package/dist/variants/table.variants.d.ts +428 -0
  153. package/dist/variants/table.variants.js +360 -0
  154. package/package.json +93 -0
@@ -0,0 +1,151 @@
1
+ <script lang="ts">
2
+ import { resolveIcon, ChevronDownIcon as ChevronDownIconDefault } from '@urbicon-ui/blocks';
3
+ import { getTableContext } from '../stores/TableStore.svelte.js';
4
+
5
+ const ChevronDownIcon = resolveIcon('chevronDown', ChevronDownIconDefault);
6
+ import { formatCellValue, resolveColumnId, resolveColumnValue } from '../utils';
7
+ import type { Column, TableItem } from '../types/tableTypes';
8
+ import { mobileCardVariants } from '../variants';
9
+ import { getTableStyleConfig, resolveSlotClass } from './table-style-context';
10
+ import type { Snippet } from 'svelte';
11
+
12
+ export type MobileCardProps = {
13
+ item: TableItem;
14
+ expandable?: boolean;
15
+ expandedRowContent?: Snippet<[item: TableItem]>;
16
+ cell?: Snippet<[item: TableItem, value: unknown, column: Column]>;
17
+ onClick?: (item: TableItem) => void;
18
+ size?: 'sm' | 'md' | 'lg';
19
+ class?: string;
20
+ testId?: string;
21
+ };
22
+
23
+ let {
24
+ item,
25
+ expandable = false,
26
+ expandedRowContent = undefined,
27
+ cell = undefined,
28
+ onClick = undefined,
29
+ size = 'md',
30
+ class: className = '',
31
+ testId = undefined
32
+ }: MobileCardProps = $props();
33
+
34
+ const tableContext = getTableContext();
35
+ const { state: tableState, toggleExpand, isItemExpanded: checkExpanded } = tableContext;
36
+ const styleConfig = getTableStyleConfig();
37
+
38
+ const itemId = $derived.by((): string | number => {
39
+ const candidate = item.id ?? item.__index;
40
+ return typeof candidate === 'string' || typeof candidate === 'number' ? candidate : -1;
41
+ });
42
+ let isExpanded = $derived(checkExpanded(itemId));
43
+
44
+ const computedTestId = $derived.by(() => {
45
+ if (testId) return testId;
46
+ return `mobile-card-${itemId}`;
47
+ });
48
+
49
+ function handleClick() {
50
+ if (onClick) {
51
+ onClick(item);
52
+ } else if (expandable) {
53
+ toggleExpand(itemId);
54
+ }
55
+ }
56
+
57
+ function handleKeyDown(event: KeyboardEvent) {
58
+ if (event.key === 'Enter' || event.key === ' ') {
59
+ event.preventDefault();
60
+ handleClick();
61
+ }
62
+ }
63
+
64
+ function getComponentProps(column: Column, row: TableItem) {
65
+ const baseProps = column.componentProps ? column.componentProps(row) : {};
66
+ return { ...baseProps, item: row };
67
+ }
68
+
69
+ const primaryColumns = $derived(
70
+ tableState.columns.filter((col) => col.priority === 1 || !col.priority)
71
+ );
72
+
73
+ const secondaryColumns = $derived(tableState.columns.filter((col) => col.priority === 2));
74
+
75
+ const cardStyles = $derived(
76
+ mobileCardVariants({
77
+ size,
78
+ interactive: !!(expandable || onClick),
79
+ expanded: isExpanded
80
+ })
81
+ );
82
+ </script>
83
+
84
+ {#snippet renderCellContent(column: Column)}
85
+ {@const cellValue = resolveColumnValue(column, item)}
86
+ {#if cell}
87
+ {@render cell(item, cellValue, column)}
88
+ {:else if column.cell}
89
+ {@render column.cell(item, cellValue)}
90
+ {:else if column.component}
91
+ {@const CellComponent = column.component}
92
+ <CellComponent {...getComponentProps(column, item)} />
93
+ {:else if cellValue !== undefined}
94
+ <span class={cardStyles.value()}>
95
+ {formatCellValue(item, column)}
96
+ </span>
97
+ {/if}
98
+ {/snippet}
99
+
100
+ <!-- svelte-ignore a11y_no_noninteractive_tabindex -->
101
+ <div
102
+ class={resolveSlotClass(
103
+ cardStyles.card(),
104
+ styleConfig.slotClasses.mobileCard,
105
+ styleConfig.unstyled,
106
+ className
107
+ )}
108
+ data-testid={computedTestId}
109
+ role={expandable || onClick ? 'button' : undefined}
110
+ tabindex={expandable || onClick ? 0 : undefined}
111
+ onclick={handleClick}
112
+ onkeydown={handleKeyDown}
113
+ >
114
+ <div class={cardStyles.content()}>
115
+ <div class={cardStyles.content()}>
116
+ {#each primaryColumns as column (resolveColumnId(column))}
117
+ <div class={cardStyles.field()}>
118
+ <span class={cardStyles.label()}>{column.title}</span>
119
+ <div class={cardStyles.value()}>
120
+ {@render renderCellContent(column)}
121
+ </div>
122
+ </div>
123
+ {/each}
124
+ </div>
125
+
126
+ {#if secondaryColumns.length > 0}
127
+ <div class={cardStyles.content()}>
128
+ {#each secondaryColumns as column (resolveColumnId(column))}
129
+ <div class={cardStyles.field()}>
130
+ <span class={cardStyles.label()}>{column.title}</span>
131
+ <div class={cardStyles.value()}>
132
+ {@render renderCellContent(column)}
133
+ </div>
134
+ </div>
135
+ {/each}
136
+ </div>
137
+ {/if}
138
+
139
+ {#if expandable}
140
+ <div class={cardStyles.actions()}>
141
+ <ChevronDownIcon class="{cardStyles.expandIcon()} h-5 w-5" />
142
+ </div>
143
+ {/if}
144
+ </div>
145
+
146
+ {#if isExpanded && expandedRowContent}
147
+ <div class={cardStyles.expandedContent()}>
148
+ {@render expandedRowContent(item)}
149
+ </div>
150
+ {/if}
151
+ </div>
@@ -0,0 +1,15 @@
1
+ import type { Column, TableItem } from '../types/tableTypes';
2
+ import type { Snippet } from 'svelte';
3
+ export type MobileCardProps = {
4
+ item: TableItem;
5
+ expandable?: boolean;
6
+ expandedRowContent?: Snippet<[item: TableItem]>;
7
+ cell?: Snippet<[item: TableItem, value: unknown, column: Column]>;
8
+ onClick?: (item: TableItem) => void;
9
+ size?: 'sm' | 'md' | 'lg';
10
+ class?: string;
11
+ testId?: string;
12
+ };
13
+ declare const MobileCard: import("svelte").Component<MobileCardProps, {}, "">;
14
+ type MobileCard = ReturnType<typeof MobileCard>;
15
+ export default MobileCard;
@@ -0,0 +1,105 @@
1
+ <script lang="ts">
2
+ import { formatCellValue, resolveColumnId, resolveColumnValue } from '../utils';
3
+ import { customCellVariants } from '../variants';
4
+ import { TABLE_RESPONSIVE } from '../variants/table.system';
5
+ import { getTableContext } from '../stores/TableStore.svelte';
6
+ import SearchHighlight from '../features/SearchHighlight.svelte';
7
+ import type { Column, TableItem } from '../types/tableTypes';
8
+ import type { Snippet } from 'svelte';
9
+
10
+ const { state: tableState } = getTableContext();
11
+
12
+ export type TableCellProps = {
13
+ item: TableItem;
14
+ column: Column;
15
+ size?: 'sm' | 'md' | 'lg';
16
+ cellClass?: string;
17
+ testIdPrefix?: string;
18
+ colIndex?: number;
19
+ cell?: Snippet<[item: TableItem, value: unknown, column: Column]>;
20
+ };
21
+
22
+ let {
23
+ item,
24
+ column,
25
+ size = 'md',
26
+ cellClass = '',
27
+ testIdPrefix = 'cell',
28
+ colIndex = undefined,
29
+ cell = undefined
30
+ }: TableCellProps = $props();
31
+
32
+ function getComponentProps(col: Column, row: TableItem) {
33
+ const baseProps = col.componentProps ? col.componentProps(row) : {};
34
+ const componentSize = size === 'lg' ? 'md' : size;
35
+ return {
36
+ ...baseProps,
37
+ item: row,
38
+ size: componentSize,
39
+ align: col.align
40
+ };
41
+ }
42
+
43
+ const value = $derived(resolveColumnValue(column, item));
44
+ const titleText = $derived(value === undefined || value === null ? undefined : String(value));
45
+ const columnId = $derived(resolveColumnId(column));
46
+
47
+ const defaultCellStyles = $derived(
48
+ customCellVariants({
49
+ size,
50
+ align: 'left',
51
+ interactive: false
52
+ })
53
+ );
54
+
55
+ const itemId = $derived(item.id ?? item.__index);
56
+ </script>
57
+
58
+ <td
59
+ class="{cellClass} {column.flex ? 'flex-col' : ''} {column.priority
60
+ ? (TABLE_RESPONSIVE.priority[column.priority as keyof typeof TABLE_RESPONSIVE.priority] ?? '')
61
+ : ''}"
62
+ style={column.width ? `width: ${column.width}; min-width: ${column.minWidth || '4rem'};` : ''}
63
+ role={colIndex !== undefined ? 'gridcell' : undefined}
64
+ aria-colindex={colIndex !== undefined ? colIndex + 1 : undefined}
65
+ title={titleText}
66
+ data-testid={`${testIdPrefix}-${itemId}-${columnId}`}
67
+ >
68
+ {#if cell}
69
+ {@render cell(item, value, column)}
70
+ {:else if column.cell}
71
+ {@render column.cell(item, value)}
72
+ {:else if column.component}
73
+ {@const CellComponent = column.component}
74
+ <CellComponent {...getComponentProps(column, item)} />
75
+ {:else if value !== undefined}
76
+ <div
77
+ class="{defaultCellStyles.container()} {column.align === 'center'
78
+ ? 'justify-center'
79
+ : column.align === 'right'
80
+ ? 'justify-end'
81
+ : 'justify-start'}"
82
+ >
83
+ <div class={defaultCellStyles.content()}>
84
+ <span
85
+ class="text-text-primary block max-w-full overflow-hidden text-ellipsis whitespace-nowrap"
86
+ >
87
+ {#if tableState.searchTerm}
88
+ <SearchHighlight
89
+ text={formatCellValue(item, column)}
90
+ searchTerm={tableState.searchTerm}
91
+ />
92
+ {:else}
93
+ {formatCellValue(item, column)}
94
+ {/if}
95
+ </span>
96
+ </div>
97
+ </div>
98
+ {:else}
99
+ <div class={defaultCellStyles.container()}>
100
+ <div class={defaultCellStyles.content()}>
101
+ <span class="text-text-tertiary">—</span>
102
+ </div>
103
+ </div>
104
+ {/if}
105
+ </td>
@@ -0,0 +1,14 @@
1
+ import type { Column, TableItem } from '../types/tableTypes';
2
+ import type { Snippet } from 'svelte';
3
+ export type TableCellProps = {
4
+ item: TableItem;
5
+ column: Column;
6
+ size?: 'sm' | 'md' | 'lg';
7
+ cellClass?: string;
8
+ testIdPrefix?: string;
9
+ colIndex?: number;
10
+ cell?: Snippet<[item: TableItem, value: unknown, column: Column]>;
11
+ };
12
+ declare const TableCell: import("svelte").Component<TableCellProps, {}, "">;
13
+ type TableCell = ReturnType<typeof TableCell>;
14
+ export default TableCell;