@fastnd/components 1.0.28 → 1.0.30

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 (68) hide show
  1. package/dist/components/FavoriteButton/FavoriteButton.d.ts +2 -1
  2. package/dist/components/index.d.ts +1 -3
  3. package/dist/components/ui/badge.d.ts +1 -1
  4. package/dist/components/ui/button.d.ts +1 -1
  5. package/dist/components/ui/data-table.d.ts +8 -0
  6. package/dist/components/ui/input-group.d.ts +1 -1
  7. package/dist/components/ui/item.d.ts +1 -1
  8. package/dist/components/ui/tabs.d.ts +1 -1
  9. package/dist/examples/data-explorer/CardCarouselPanel/CardCarouselPanel.tsx +197 -0
  10. package/dist/examples/data-explorer/CardView/CardView.tsx +168 -0
  11. package/dist/examples/data-explorer/ColumnConfigPopover/ColumnConfigPopover.tsx +157 -0
  12. package/dist/examples/data-explorer/DataExplorerEmpty/DataExplorerEmpty.tsx +56 -0
  13. package/dist/examples/data-explorer/DataExplorerPage/DataExplorerPage.tsx +101 -0
  14. package/dist/examples/data-explorer/DataExplorerPagination/DataExplorerPagination.tsx +129 -0
  15. package/dist/examples/data-explorer/DataExplorerToolbar/DataExplorerToolbar.tsx +143 -0
  16. package/dist/examples/data-explorer/DomainSwitcher/DomainSwitcher.tsx +36 -0
  17. package/dist/examples/data-explorer/ExpansionRows/ExpansionRows.tsx +180 -0
  18. package/dist/examples/data-explorer/FilterChip/FilterChip.tsx +85 -0
  19. package/dist/examples/data-explorer/FilterPopoverContent/FilterPopoverContent.tsx +73 -0
  20. package/dist/examples/data-explorer/ListView/ListView.tsx +305 -0
  21. package/dist/examples/data-explorer/MoreFiltersPopover/MoreFiltersPopover.tsx +113 -0
  22. package/dist/examples/data-explorer/TableView/TableView.tsx +193 -0
  23. package/dist/examples/data-explorer/cells/CellRenderer.tsx +147 -0
  24. package/dist/examples/data-explorer/cells/CurrencyCell.tsx +31 -0
  25. package/dist/examples/data-explorer/cells/DoubleTextCell.tsx +27 -0
  26. package/dist/examples/data-explorer/cells/ExpandButton.tsx +67 -0
  27. package/dist/examples/data-explorer/cells/InventoryBadgeCell.tsx +52 -0
  28. package/dist/examples/data-explorer/cells/LinkCell.tsx +42 -0
  29. package/dist/examples/data-explorer/cells/ScoreBar.tsx +50 -0
  30. package/dist/examples/data-explorer/cells/StatusBadgeCell.tsx +39 -0
  31. package/dist/examples/data-explorer/cells/TextCell.tsx +35 -0
  32. package/dist/examples/data-explorer/cells/index.ts +26 -0
  33. package/dist/examples/data-explorer/domains/applications.ts +225 -0
  34. package/dist/examples/data-explorer/domains/customers.ts +267 -0
  35. package/dist/examples/data-explorer/domains/index.ts +26 -0
  36. package/dist/examples/data-explorer/domains/products.ts +1116 -0
  37. package/dist/examples/data-explorer/domains/projects.ts +205 -0
  38. package/dist/examples/data-explorer/hooks/use-data-explorer-state.ts +371 -0
  39. package/dist/examples/data-explorer/index.ts +3 -0
  40. package/dist/examples/data-explorer/types.ts +239 -0
  41. package/dist/fastnd-components.js +16426 -17975
  42. package/package.json +1 -1
  43. package/dist/components/ColumnConfigPopover/ColumnConfigPopover.d.ts +0 -20
  44. package/dist/components/DoubleTextCell/DoubleTextCell.d.ts +0 -9
  45. package/dist/components/ProgressCircle/ProgressCircle.d.ts +0 -9
  46. package/dist/examples/data-visualization/DataGrid/DataGrid.tsx +0 -136
  47. package/dist/examples/data-visualization/DataGridCardView/DataGridCardView.tsx +0 -179
  48. package/dist/examples/data-visualization/DataGridListView/DataGridListView.tsx +0 -190
  49. package/dist/examples/data-visualization/DataGridPage/DataGridPage.tsx +0 -43
  50. package/dist/examples/data-visualization/DataGridPagination/DataGridPagination.tsx +0 -111
  51. package/dist/examples/data-visualization/DataGridTableView/DataGridTableView.tsx +0 -282
  52. package/dist/examples/data-visualization/DataGridToolbar/DataGridToolbar.tsx +0 -283
  53. package/dist/examples/data-visualization/DomainSwitcher/DomainSwitcher.tsx +0 -41
  54. package/dist/examples/data-visualization/ExpansionDrawer/ExpansionDrawer.tsx +0 -139
  55. package/dist/examples/data-visualization/MoreFiltersPopover/MoreFiltersPopover.tsx +0 -230
  56. package/dist/examples/data-visualization/ResultCount/ResultCount.tsx +0 -33
  57. package/dist/examples/data-visualization/cell-renderers.tsx +0 -119
  58. package/dist/examples/data-visualization/constants.ts +0 -1251
  59. package/dist/examples/data-visualization/hooks/use-data-grid-columns.ts +0 -65
  60. package/dist/examples/data-visualization/hooks/use-data-grid-expansion.ts +0 -40
  61. package/dist/examples/data-visualization/hooks/use-data-grid-favorites.ts +0 -41
  62. package/dist/examples/data-visualization/hooks/use-data-grid-filters.ts +0 -61
  63. package/dist/examples/data-visualization/hooks/use-data-grid-pagination.ts +0 -32
  64. package/dist/examples/data-visualization/hooks/use-data-grid-sort.ts +0 -32
  65. package/dist/examples/data-visualization/hooks/use-data-grid-state.ts +0 -133
  66. package/dist/examples/data-visualization/hooks/use-filtered-data.ts +0 -84
  67. package/dist/examples/data-visualization/index.ts +0 -10
  68. package/dist/examples/data-visualization/types.ts +0 -103
@@ -1,1251 +0,0 @@
1
- import type { DomainConfig, ColumnConfig, DataRow } from './types'
2
-
3
- // ---------------------------------------------------------------------------
4
- // PRODUCTS
5
- // ---------------------------------------------------------------------------
6
-
7
- export const PRODUCT_COLUMNS = {
8
- product_category: {
9
- label: 'Produktkategorie',
10
- type: 'text',
11
- sortable: true,
12
- filterable: true,
13
- primaryFilter: true,
14
- visible: true,
15
- searchable: true,
16
- },
17
- product_group: {
18
- label: 'Produktgruppe',
19
- type: 'text',
20
- sortable: true,
21
- filterable: true,
22
- primaryFilter: true,
23
- visible: true,
24
- searchable: true,
25
- },
26
- part_number: {
27
- label: 'Produkt',
28
- type: 'double-text',
29
- sortable: true,
30
- filterable: false,
31
- visible: true,
32
- secondary: 'product_family_name',
33
- searchable: true,
34
- },
35
- manufacturer_name: {
36
- label: 'Hersteller',
37
- type: 'link',
38
- sortable: true,
39
- filterable: true,
40
- primaryFilter: false,
41
- visible: true,
42
- searchable: true,
43
- },
44
- description: {
45
- label: 'Beschreibung',
46
- type: 'text',
47
- sortable: false,
48
- filterable: false,
49
- visible: true,
50
- searchable: true,
51
- rowLines: 3,
52
- },
53
- lifecycle: {
54
- label: 'Status',
55
- type: 'status-badge',
56
- sortable: true,
57
- filterable: true,
58
- primaryFilter: true,
59
- visible: true,
60
- hideTablet: true,
61
- statusMap: {
62
- Active: 'active',
63
- NRND: 'nrnd',
64
- EOL: 'eol',
65
- Production: 'production',
66
- },
67
- },
68
- alternatives: {
69
- label: 'Alternativen',
70
- type: 'expand',
71
- sortable: false,
72
- filterable: false,
73
- visible: true,
74
- hideMobile: true,
75
- expandLabel: 'Alternativen',
76
- expandColumns: [
77
- { key: 'alt_part_number', label: 'Teilenummer', bold: true },
78
- { key: 'alt_manufacturer', label: 'Hersteller', muted: true },
79
- { key: 'match_score', label: 'Übereinstimmung', type: 'score-bar' as const },
80
- ],
81
- expandTitleFn: (row: DataRow) => `Alternativen für ${row.part_number}`,
82
- },
83
- cross_sells: {
84
- label: 'Cross-Sells',
85
- type: 'expand',
86
- sortable: false,
87
- filterable: false,
88
- visible: true,
89
- hideMobile: true,
90
- expandLabel: 'Empfehlungen',
91
- expandColumns: [
92
- { key: 'cross_sell_part_number', label: 'Teilenummer', bold: true },
93
- { key: 'recommendation_score', label: 'Score', type: 'score-bar' as const },
94
- { key: 'recommendation_source', label: 'Quelle', muted: true },
95
- ],
96
- expandTitleFn: (row: DataRow) => `Cross-Sell Empfehlungen für ${row.part_number}`,
97
- },
98
- price: {
99
- label: 'Preis',
100
- type: 'currency',
101
- sortable: true,
102
- filterable: false,
103
- visible: false,
104
- currencyField: 'currency',
105
- },
106
- lead_time: {
107
- label: 'Lieferzeit',
108
- type: 'text',
109
- sortable: true,
110
- filterable: false,
111
- visible: false,
112
- hideMobile: true,
113
- },
114
- inventory: {
115
- label: 'Lagerbestand',
116
- type: 'inventory',
117
- sortable: true,
118
- filterable: true,
119
- primaryFilter: false,
120
- visible: false,
121
- hideMobile: true,
122
- levelFn: (v: number) => (v > 10000 ? 'high' : v >= 1000 ? 'medium' : 'low'),
123
- formatFn: (v: number) =>
124
- v >= 1000 ? (v / 1000).toFixed(v >= 10000 ? 0 : 1) + 'k' : String(v),
125
- labelMap: { high: 'Verfügbar', medium: 'Begrenzt', low: 'Knapp' },
126
- filterOptions: ['Hoch (> 10.000)', 'Mittel (1.000–10.000)', 'Niedrig (< 1.000)'],
127
- filterFn: (row: DataRow, selectedValue: string) => {
128
- if (selectedValue.startsWith('Hoch')) return (row.inventory as number) > 10000
129
- if (selectedValue.startsWith('Mittel'))
130
- return (row.inventory as number) >= 1000 && (row.inventory as number) <= 10000
131
- return (row.inventory as number) < 1000
132
- },
133
- },
134
- } satisfies Record<string, ColumnConfig>
135
-
136
- export const PRODUCT_LAYOUT = {
137
- list: {
138
- titleField: 'part_number',
139
- metaFields: ['product_category', 'product_group', 'manufacturer_name'],
140
- badgeFields: ['lifecycle'],
141
- valueField: null,
142
- expandField: 'alternatives',
143
- },
144
- card: {
145
- titleField: 'part_number',
146
- subtitleField: 'description',
147
- badgeFields: ['lifecycle'],
148
- rows: [
149
- { label: 'Kategorie', field: 'product_category' },
150
- { label: 'Gruppe', field: 'product_group' },
151
- { label: 'Hersteller', field: 'manufacturer_name' },
152
- ],
153
- footerField: 'manufacturer_name',
154
- expandField: 'alternatives',
155
- },
156
- }
157
-
158
- export const MOCK_PRODUCTS = [
159
- {
160
- id: 'p1',
161
- part_number: 'TPS54360B',
162
- tenant_part_number: 'FN-DC-0012',
163
- product_category: 'Halbleiter',
164
- product_group: 'Spannungsregler',
165
- product_family_name: 'DC-DC Converter',
166
- manufacturer_name: 'Texas Instruments',
167
- description: 'Abwärtswandler 4,5–60V, 3,5A, einstellbar',
168
- price: 3.45,
169
- currency: 'EUR',
170
- inventory: 12500,
171
- lead_time: '8 Wochen',
172
- lifecycle: 'Active',
173
- favorite: true,
174
- alternatives: [
175
- { alt_part_number: 'LM2596S-ADJ', alt_manufacturer: 'ON Semiconductor', match_score: 0.89 },
176
- { alt_part_number: 'MP2315GJ', alt_manufacturer: 'MPS', match_score: 0.82 },
177
- ],
178
- cross_sells: [
179
- { cross_sell_part_number: 'LM2596S', recommendation_score: 0.92, recommendation_source: 'AI Model' },
180
- { cross_sell_part_number: 'ADP5054', recommendation_score: 0.85, recommendation_source: 'Manual' },
181
- { cross_sell_part_number: 'MP2315', recommendation_score: 0.78, recommendation_source: 'AI Model' },
182
- ],
183
- },
184
- {
185
- id: 'p2',
186
- part_number: 'LM2596S-5.0',
187
- tenant_part_number: 'FN-DC-0034',
188
- product_category: 'Halbleiter',
189
- product_group: 'Spannungsregler',
190
- product_family_name: 'Voltage Regulator',
191
- manufacturer_name: 'ON Semiconductor',
192
- description: 'Festspannungsregler 5V, 3A, TO-263',
193
- price: 1.82,
194
- currency: 'EUR',
195
- inventory: 45200,
196
- lead_time: '12 Wochen',
197
- lifecycle: 'Active',
198
- favorite: false,
199
- alternatives: [
200
- { alt_part_number: 'TPS54360B', alt_manufacturer: 'Texas Instruments', match_score: 0.91 },
201
- ],
202
- cross_sells: [
203
- { cross_sell_part_number: 'TPS54360B', recommendation_score: 0.91, recommendation_source: 'AI Model' },
204
- { cross_sell_part_number: 'LM317T', recommendation_score: 0.72, recommendation_source: 'Manual' },
205
- ],
206
- },
207
- {
208
- id: 'p3',
209
- part_number: 'ADP5054ACPZ',
210
- tenant_part_number: 'FN-PM-0087',
211
- product_category: 'Halbleiter',
212
- product_group: 'Power Management',
213
- product_family_name: 'PMIC',
214
- manufacturer_name: 'Analog Devices',
215
- description: 'Quad-Kanal PMIC mit Sequencing, 48-LFCSP',
216
- price: 8.9,
217
- currency: 'EUR',
218
- inventory: 3200,
219
- lead_time: '16 Wochen',
220
- lifecycle: 'Active',
221
- favorite: false,
222
- alternatives: [
223
- { alt_part_number: 'TPS65263', alt_manufacturer: 'Texas Instruments', match_score: 0.85 },
224
- { alt_part_number: 'MAX77714', alt_manufacturer: 'Maxim / ADI', match_score: 0.78 },
225
- ],
226
- cross_sells: [
227
- { cross_sell_part_number: 'TPS65263', recommendation_score: 0.88, recommendation_source: 'AI Model' },
228
- ],
229
- },
230
- {
231
- id: 'p4',
232
- part_number: 'STM32F407VGT6',
233
- tenant_part_number: 'FN-MC-0201',
234
- product_category: 'Halbleiter',
235
- product_group: 'Mikrocontroller',
236
- product_family_name: 'STM32F4',
237
- manufacturer_name: 'STMicroelectronics',
238
- description: 'ARM Cortex-M4, 168 MHz, 1 MB Flash, 192 KB RAM, LQFP-100',
239
- price: 12.35,
240
- currency: 'EUR',
241
- inventory: 8700,
242
- lead_time: '10 Wochen',
243
- lifecycle: 'Active',
244
- favorite: true,
245
- alternatives: [
246
- { alt_part_number: 'STM32F405RGT6', alt_manufacturer: 'STMicroelectronics', match_score: 0.95 },
247
- { alt_part_number: 'MIMXRT1062DVJ6B', alt_manufacturer: 'NXP', match_score: 0.74 },
248
- { alt_part_number: 'GD32F407VGT6', alt_manufacturer: 'GigaDevice', match_score: 0.88 },
249
- ],
250
- cross_sells: [
251
- { cross_sell_part_number: 'STM32F407IGT6', recommendation_score: 0.94, recommendation_source: 'AI Model' },
252
- { cross_sell_part_number: 'STLINK-V3SET', recommendation_score: 0.87, recommendation_source: 'Manual' },
253
- { cross_sell_part_number: 'STM32F746NGH6', recommendation_score: 0.79, recommendation_source: 'AI Model' },
254
- { cross_sell_part_number: 'NUCLEO-F407ZG', recommendation_score: 0.72, recommendation_source: 'Manual' },
255
- ],
256
- },
257
- {
258
- id: 'p5',
259
- part_number: 'IRF540NPBF',
260
- tenant_part_number: 'FN-TR-0045',
261
- product_category: 'Halbleiter',
262
- product_group: 'Transistoren',
263
- product_family_name: 'N-Channel MOSFET',
264
- manufacturer_name: 'Infineon',
265
- description: 'N-Kanal MOSFET 100V, 33A, TO-220AB',
266
- price: 0.95,
267
- currency: 'EUR',
268
- inventory: 67000,
269
- lead_time: '4 Wochen',
270
- lifecycle: 'Active',
271
- favorite: false,
272
- alternatives: [
273
- { alt_part_number: 'STP36NF06L', alt_manufacturer: 'STMicroelectronics', match_score: 0.87 },
274
- { alt_part_number: 'FDP8N60NZ', alt_manufacturer: 'Fairchild / ON Semi', match_score: 0.81 },
275
- ],
276
- cross_sells: [
277
- { cross_sell_part_number: 'IR2110', recommendation_score: 0.83, recommendation_source: 'AI Model' },
278
- { cross_sell_part_number: 'UCC27524', recommendation_score: 0.76, recommendation_source: 'Manual' },
279
- ],
280
- },
281
- {
282
- id: 'p6',
283
- part_number: 'AD7124-8BCPZ',
284
- tenant_part_number: 'FN-ADC-0033',
285
- product_category: 'Halbleiter',
286
- product_group: 'Datenerfassung',
287
- product_family_name: 'Sigma-Delta ADC',
288
- manufacturer_name: 'Analog Devices',
289
- description: '8-Kanal 24-Bit Sigma-Delta ADC mit PGA, 32-LFCSP',
290
- price: 15.6,
291
- currency: 'EUR',
292
- inventory: 1200,
293
- lead_time: '20 Wochen',
294
- lifecycle: 'NRND',
295
- favorite: false,
296
- alternatives: [
297
- { alt_part_number: 'ADS1256IDBR', alt_manufacturer: 'Texas Instruments', match_score: 0.86 },
298
- { alt_part_number: 'MCP3912A1T-E/SS', alt_manufacturer: 'Microchip', match_score: 0.79 },
299
- ],
300
- cross_sells: [
301
- { cross_sell_part_number: 'AD8237ARMZ', recommendation_score: 0.81, recommendation_source: 'AI Model' },
302
- ],
303
- },
304
- {
305
- id: 'p7',
306
- part_number: 'MAX232CPE+',
307
- tenant_part_number: 'FN-IF-0011',
308
- product_category: 'Halbleiter',
309
- product_group: 'Interface',
310
- product_family_name: 'RS-232 Transceiver',
311
- manufacturer_name: 'Maxim / ADI',
312
- description: 'Dual RS-232 Transceiver, 5V, DIP-16',
313
- price: 2.1,
314
- currency: 'EUR',
315
- inventory: 320,
316
- lead_time: '14 Wochen',
317
- lifecycle: 'EOL',
318
- favorite: false,
319
- alternatives: [
320
- { alt_part_number: 'SP3232EEN-L', alt_manufacturer: 'Exar / MaxLinear', match_score: 0.93 },
321
- { alt_part_number: 'ST232ABDR', alt_manufacturer: 'STMicroelectronics', match_score: 0.89 },
322
- ],
323
- cross_sells: [
324
- { cross_sell_part_number: 'SP3232EEN-L', recommendation_score: 0.93, recommendation_source: 'AI Model' },
325
- { cross_sell_part_number: 'ICL3232CPZ', recommendation_score: 0.85, recommendation_source: 'Manual' },
326
- ],
327
- },
328
- {
329
- id: 'p8',
330
- part_number: 'BQ25895RTWR',
331
- tenant_part_number: 'FN-PM-0156',
332
- product_category: 'Halbleiter',
333
- product_group: 'Power Management',
334
- product_family_name: 'Battery Charger',
335
- manufacturer_name: 'Texas Instruments',
336
- description: 'I²C gesteuertes Li-Ion Schnelllade-IC, 14V/5A, WQFN-24',
337
- price: 4.75,
338
- currency: 'EUR',
339
- inventory: 5800,
340
- lead_time: '6 Wochen',
341
- lifecycle: 'Active',
342
- favorite: false,
343
- alternatives: [
344
- { alt_part_number: 'MP2639A', alt_manufacturer: 'MPS', match_score: 0.84 },
345
- { alt_part_number: 'ISL9238HRTZ', alt_manufacturer: 'Renesas', match_score: 0.77 },
346
- ],
347
- cross_sells: [
348
- { cross_sell_part_number: 'BQ27441DRZR-G1B', recommendation_score: 0.88, recommendation_source: 'AI Model' },
349
- ],
350
- },
351
- {
352
- id: 'p9',
353
- part_number: 'ATMEGA328P-AU',
354
- tenant_part_number: 'FN-MC-0098',
355
- product_category: 'Halbleiter',
356
- product_group: 'Mikrocontroller',
357
- product_family_name: 'megaAVR',
358
- manufacturer_name: 'Microchip',
359
- description: '8-Bit AVR MCU, 32 KB Flash, 2 KB SRAM, TQFP-32',
360
- price: 2.45,
361
- currency: 'EUR',
362
- inventory: 18900,
363
- lead_time: '8 Wochen',
364
- lifecycle: 'Production',
365
- favorite: false,
366
- alternatives: [
367
- { alt_part_number: 'ATTINY88-MU', alt_manufacturer: 'Microchip', match_score: 0.72 },
368
- { alt_part_number: 'STM8S003F3P6', alt_manufacturer: 'STMicroelectronics', match_score: 0.68 },
369
- ],
370
- cross_sells: [
371
- { cross_sell_part_number: 'ATMEGA2560-16AU', recommendation_score: 0.82, recommendation_source: 'AI Model' },
372
- { cross_sell_part_number: 'MCP2200T-I/SS', recommendation_score: 0.71, recommendation_source: 'Manual' },
373
- ],
374
- },
375
- {
376
- id: 'p10',
377
- part_number: 'SN74LVC1G14',
378
- tenant_part_number: 'FN-LG-0007',
379
- product_category: 'Halbleiter',
380
- product_group: 'Logik-ICs',
381
- product_family_name: 'Single Gate Logic',
382
- manufacturer_name: 'Texas Instruments',
383
- description: 'Einfach-Schmitt-Trigger-Inverter, 1,65–5,5V, SOT-23-5',
384
- price: 0.28,
385
- currency: 'EUR',
386
- inventory: 142000,
387
- lead_time: '2 Wochen',
388
- lifecycle: 'Active',
389
- favorite: false,
390
- alternatives: [],
391
- cross_sells: [],
392
- },
393
- {
394
- id: 'p11',
395
- part_number: 'NCV7356D1R2G',
396
- tenant_part_number: 'FN-IF-0088',
397
- product_category: 'Halbleiter',
398
- product_group: 'Interface',
399
- product_family_name: 'Single Wire CAN',
400
- manufacturer_name: 'ON Semiconductor',
401
- description: 'Single-Wire CAN Transceiver, 3,3V/5V, SO-8',
402
- price: 1.55,
403
- currency: 'EUR',
404
- inventory: 7400,
405
- lead_time: '6 Wochen',
406
- lifecycle: 'Active',
407
- favorite: false,
408
- alternatives: [
409
- { alt_part_number: 'TJA1021T', alt_manufacturer: 'NXP', match_score: 0.91 },
410
- ],
411
- cross_sells: [
412
- { cross_sell_part_number: 'TJA1021T', recommendation_score: 0.9, recommendation_source: 'AI Model' },
413
- ],
414
- },
415
- {
416
- id: 'p12',
417
- part_number: 'OPA2340UA',
418
- tenant_part_number: 'FN-AMP-0023',
419
- product_category: 'Halbleiter',
420
- product_group: 'Verstärker',
421
- product_family_name: 'Rail-to-Rail Op-Amp',
422
- manufacturer_name: 'Texas Instruments',
423
- description: 'Dual Rail-to-Rail Op-Amp, 5,5 MHz, 2,5–5,5V, SO-8',
424
- price: 1.9,
425
- currency: 'EUR',
426
- inventory: 95,
427
- lead_time: '18 Wochen',
428
- lifecycle: 'NRND',
429
- favorite: false,
430
- alternatives: [
431
- { alt_part_number: 'MCP6002T-I/SN', alt_manufacturer: 'Microchip', match_score: 0.88 },
432
- { alt_part_number: 'LMV358IDGKR', alt_manufacturer: 'Texas Instruments', match_score: 0.83 },
433
- ],
434
- cross_sells: [
435
- { cross_sell_part_number: 'OPA2344UA', recommendation_score: 0.9, recommendation_source: 'AI Model' },
436
- { cross_sell_part_number: 'MCP6002T-I/SN', recommendation_score: 0.85, recommendation_source: 'AI Model' },
437
- ],
438
- },
439
- {
440
- id: 'p13',
441
- part_number: 'XMC4800-F144K2048-AA-LONGVARIANT-REVB',
442
- tenant_part_number: 'FN-MC-0312',
443
- product_category: 'Halbleiter',
444
- product_group: 'Mikrocontroller',
445
- product_family_name: 'XMC4000',
446
- manufacturer_name: 'Infineon',
447
- description: 'ARM Cortex-M4, 144 MHz, 2 MB Flash, EtherCAT, LQFP-144',
448
- price: 24875.99,
449
- currency: 'EUR',
450
- inventory: 4,
451
- lead_time: '52 Wochen',
452
- lifecycle: 'NRND',
453
- favorite: false,
454
- alternatives: [
455
- { alt_part_number: 'XMC4700-F144K2048-AA', alt_manufacturer: 'Infineon', match_score: 0.97 },
456
- { alt_part_number: 'STM32H743ZIT6', alt_manufacturer: 'STMicroelectronics', match_score: 0.81 },
457
- { alt_part_number: 'MIMXRT1064DVL6B', alt_manufacturer: 'NXP', match_score: 0.76 },
458
- { alt_part_number: 'TMS570LS3137ZWT', alt_manufacturer: 'Texas Instruments', match_score: 0.71 },
459
- { alt_part_number: 'R7FA6M5BH3CFP', alt_manufacturer: 'Renesas', match_score: 0.68 },
460
- ],
461
- cross_sells: [
462
- { cross_sell_part_number: 'XMC4700-F144K2048-AA', recommendation_score: 0.97, recommendation_source: 'AI Model' },
463
- { cross_sell_part_number: 'XMC4500-F144K1024-AA', recommendation_score: 0.88, recommendation_source: 'Manual' },
464
- { cross_sell_part_number: 'DAS-KIT-XMC48', recommendation_score: 0.79, recommendation_source: 'Manual' },
465
- ],
466
- },
467
- ] satisfies DataRow[]
468
-
469
- // ---------------------------------------------------------------------------
470
- // PROJECTS
471
- // ---------------------------------------------------------------------------
472
-
473
- export const PROJECT_COLUMNS = {
474
- favorite: {
475
- label: 'Favorit',
476
- type: 'favorite',
477
- sortable: false,
478
- filterable: false,
479
- visible: true,
480
- },
481
- name: {
482
- label: 'Projektname',
483
- type: 'double-text',
484
- sortable: true,
485
- filterable: false,
486
- visible: true,
487
- secondary: 'customer_name',
488
- searchable: true,
489
- },
490
- customer_name: {
491
- label: 'Kunde',
492
- type: 'link',
493
- sortable: true,
494
- filterable: true,
495
- primaryFilter: true,
496
- visible: true,
497
- searchable: true,
498
- },
499
- status: {
500
- label: 'Status',
501
- type: 'status-badge',
502
- sortable: true,
503
- filterable: true,
504
- primaryFilter: true,
505
- visible: true,
506
- hideTablet: true,
507
- statusMap: {
508
- Open: 'active',
509
- Won: 'production',
510
- Lost: 'eol',
511
- Negotiation: 'nrnd',
512
- Qualified: 'active',
513
- },
514
- },
515
- expected_closing: {
516
- label: 'Closing',
517
- type: 'text',
518
- sortable: true,
519
- filterable: false,
520
- visible: true,
521
- hideMobile: true,
522
- },
523
- project_lifetime_quantity: {
524
- label: 'Lifetime Qty',
525
- type: 'inventory',
526
- sortable: true,
527
- filterable: true,
528
- primaryFilter: true,
529
- visible: true,
530
- hideMobile: true,
531
- levelFn: (v: number) => (v >= 100000 ? 'high' : v >= 10000 ? 'medium' : 'low'),
532
- formatFn: (v: number) =>
533
- v >= 1000 ? (v / 1000).toFixed(v >= 100000 ? 0 : 1) + 'k' : String(v),
534
- labelMap: { high: 'Hoch', medium: 'Mittel', low: 'Gering' },
535
- filterOptions: ['Hoch (≥ 100k)', 'Mittel (10k–100k)', 'Gering (< 10k)'],
536
- filterFn: (row: DataRow, selectedValue: string) => {
537
- if (selectedValue.startsWith('Hoch'))
538
- return (row.project_lifetime_quantity as number) >= 100000
539
- if (selectedValue.startsWith('Mittel'))
540
- return (
541
- (row.project_lifetime_quantity as number) >= 10000 &&
542
- (row.project_lifetime_quantity as number) < 100000
543
- )
544
- return (row.project_lifetime_quantity as number) < 10000
545
- },
546
- },
547
- opportunities: {
548
- label: 'Opportunities',
549
- type: 'expand',
550
- sortable: false,
551
- filterable: false,
552
- visible: true,
553
- hideMobile: true,
554
- expandLabel: 'Opportunities',
555
- expandColumns: [
556
- { key: 'product_name', label: 'Produkt', bold: true },
557
- { key: 'status', label: 'Status', muted: true },
558
- { key: 'creation_date', label: 'Erstellt' },
559
- ],
560
- expandTitleFn: (row: DataRow) => `Opportunities für ${row.name}`,
561
- },
562
- } satisfies Record<string, ColumnConfig>
563
-
564
- export const PROJECT_LAYOUT = {
565
- list: {
566
- titleField: 'name',
567
- metaFields: ['customer_name', 'expected_closing'],
568
- badgeFields: ['status', 'project_lifetime_quantity'],
569
- valueField: null,
570
- expandField: 'opportunities',
571
- },
572
- card: {
573
- titleField: 'name',
574
- subtitleField: 'customer_name',
575
- badgeFields: ['status'],
576
- rows: [
577
- { label: 'Closing', field: 'expected_closing' },
578
- { label: 'Lifetime Qty', field: 'project_lifetime_quantity', rendererOverride: 'inventory-label' as const },
579
- ],
580
- footerField: 'customer_name',
581
- expandField: 'opportunities',
582
- },
583
- }
584
-
585
- export const MOCK_PROJECTS = [
586
- {
587
- id: 'pj1',
588
- name: 'ADAS Kameramodul Gen3',
589
- customer_name: 'Continental AG',
590
- status: 'Open',
591
- expected_closing: '2025-09-30',
592
- project_lifetime_quantity: 250000,
593
- favorite: true,
594
- opportunities: [
595
- { product_name: 'TPS54360B', status: 'Open', creation_date: '2024-11-15' },
596
- { product_name: 'STM32F407VGT6', status: 'Qualified', creation_date: '2024-12-01' },
597
- ],
598
- },
599
- {
600
- id: 'pj2',
601
- name: 'EV Ladesteuerung 22kW',
602
- customer_name: 'Webasto SE',
603
- status: 'Won',
604
- expected_closing: '2025-03-15',
605
- project_lifetime_quantity: 80000,
606
- favorite: false,
607
- opportunities: [
608
- { product_name: 'BQ25895RTWR', status: 'Won', creation_date: '2024-08-20' },
609
- { product_name: 'IRF540NPBF', status: 'Won', creation_date: '2024-09-05' },
610
- { product_name: 'ADP5054ACPZ', status: 'Won', creation_date: '2024-09-05' },
611
- ],
612
- },
613
- {
614
- id: 'pj3',
615
- name: 'Industrie-Gateway IoT',
616
- customer_name: 'Siemens AG',
617
- status: 'Negotiation',
618
- expected_closing: '2025-12-01',
619
- project_lifetime_quantity: 15000,
620
- favorite: false,
621
- opportunities: [
622
- { product_name: 'STM32F407VGT6', status: 'Negotiation', creation_date: '2025-01-10' },
623
- { product_name: 'NCV7356D1R2G', status: 'Open', creation_date: '2025-01-18' },
624
- ],
625
- },
626
- {
627
- id: 'pj4',
628
- name: 'Patientenmonitor V5',
629
- customer_name: 'Dräger AG',
630
- status: 'Qualified',
631
- expected_closing: '2026-02-28',
632
- project_lifetime_quantity: 5000,
633
- favorite: true,
634
- opportunities: [
635
- { product_name: 'AD7124-8BCPZ', status: 'Qualified', creation_date: '2025-02-03' },
636
- { product_name: 'OPA2340UA', status: 'Open', creation_date: '2025-02-10' },
637
- ],
638
- },
639
- {
640
- id: 'pj5',
641
- name: 'Smart Meter Modul',
642
- customer_name: 'Landis+Gyr AG',
643
- status: 'Open',
644
- expected_closing: '2025-11-15',
645
- project_lifetime_quantity: 500000,
646
- favorite: false,
647
- opportunities: [
648
- { product_name: 'ATMEGA328P-AU', status: 'Open', creation_date: '2025-03-01' },
649
- ],
650
- },
651
- {
652
- id: 'pj6',
653
- name: 'Robotersteuerung R200',
654
- customer_name: 'KUKA AG',
655
- status: 'Won',
656
- expected_closing: '2025-01-20',
657
- project_lifetime_quantity: 12000,
658
- favorite: false,
659
- opportunities: [
660
- { product_name: 'STM32F407VGT6', status: 'Won', creation_date: '2024-07-14' },
661
- { product_name: 'IRF540NPBF', status: 'Won', creation_date: '2024-07-14' },
662
- ],
663
- },
664
- {
665
- id: 'pj7',
666
- name: 'BMS 48V Mild-Hybrid',
667
- customer_name: 'ZF Friedrichshafen AG',
668
- status: 'Lost',
669
- expected_closing: '2025-06-30',
670
- project_lifetime_quantity: 180000,
671
- favorite: false,
672
- opportunities: [
673
- { product_name: 'BQ25895RTWR', status: 'Lost', creation_date: '2024-10-22' },
674
- ],
675
- },
676
- {
677
- id: 'pj8',
678
- name: 'Sensorknoten Agrar',
679
- customer_name: 'CLAAS KGaA',
680
- status: 'Open',
681
- expected_closing: '2026-03-31',
682
- project_lifetime_quantity: 8000,
683
- favorite: false,
684
- opportunities: [
685
- { product_name: 'ATMEGA328P-AU', status: 'Open', creation_date: '2025-01-28' },
686
- { product_name: 'SN74LVC1G14', status: 'Open', creation_date: '2025-02-05' },
687
- ],
688
- },
689
- {
690
- id: 'pj9',
691
- name: 'Radar-Frontend 77GHz',
692
- customer_name: 'Continental AG',
693
- status: 'Negotiation',
694
- expected_closing: '2025-10-15',
695
- project_lifetime_quantity: 320000,
696
- favorite: true,
697
- opportunities: [
698
- { product_name: 'XMC4800-F144K2048-AA-LONGVARIANT-REVB', status: 'Negotiation', creation_date: '2024-12-10' },
699
- { product_name: 'ADP5054ACPZ', status: 'Open', creation_date: '2024-12-10' },
700
- { product_name: 'AD7124-8BCPZ', status: 'Qualified', creation_date: '2025-01-07' },
701
- ],
702
- },
703
- {
704
- id: 'pj10',
705
- name: 'Wallbox Premium 11kW',
706
- customer_name: 'Webasto SE',
707
- status: 'Qualified',
708
- expected_closing: '2025-08-30',
709
- project_lifetime_quantity: 45000,
710
- favorite: false,
711
- opportunities: [
712
- { product_name: 'IRF540NPBF', status: 'Qualified', creation_date: '2025-02-20' },
713
- ],
714
- },
715
- {
716
- id: 'pj11',
717
- name: 'Autonomes Fahrzeug-Plattform Generation 4',
718
- customer_name: 'BMW Group',
719
- status: 'Negotiation',
720
- expected_closing: '2027-06-30',
721
- project_lifetime_quantity: 1750000,
722
- favorite: false,
723
- opportunities: [
724
- { product_name: 'XMC4800-F144K2048-AA-LONGVARIANT-REVB', status: 'Negotiation', creation_date: '2025-03-01' },
725
- { product_name: 'STM32F407VGT6', status: 'Open', creation_date: '2025-03-01' },
726
- { product_name: 'TPS54360B', status: 'Open', creation_date: '2025-03-05' },
727
- { product_name: 'ADP5054ACPZ', status: 'Open', creation_date: '2025-03-05' },
728
- ],
729
- },
730
- ] satisfies DataRow[]
731
-
732
- // ---------------------------------------------------------------------------
733
- // CUSTOMERS
734
- // ---------------------------------------------------------------------------
735
-
736
- export const CUSTOMER_COLUMNS = {
737
- favorite: {
738
- label: 'Favorit',
739
- type: 'favorite',
740
- sortable: false,
741
- filterable: false,
742
- visible: true,
743
- },
744
- name: {
745
- label: 'Kunde',
746
- type: 'double-text',
747
- sortable: true,
748
- filterable: false,
749
- visible: true,
750
- secondary: 'main_customer',
751
- searchable: true,
752
- },
753
- category: {
754
- label: 'Kategorie',
755
- type: 'text',
756
- sortable: true,
757
- filterable: true,
758
- primaryFilter: true,
759
- visible: true,
760
- searchable: true,
761
- },
762
- region: {
763
- label: 'Region',
764
- type: 'text',
765
- sortable: true,
766
- filterable: true,
767
- primaryFilter: true,
768
- visible: true,
769
- hideTablet: true,
770
- },
771
- country_code: {
772
- label: 'Land',
773
- type: 'text',
774
- sortable: true,
775
- filterable: true,
776
- primaryFilter: false,
777
- visible: true,
778
- hideMobile: true,
779
- },
780
- city: {
781
- label: 'Stadt',
782
- type: 'text',
783
- sortable: true,
784
- filterable: false,
785
- visible: true,
786
- hideMobile: true,
787
- searchable: true,
788
- },
789
- url: {
790
- label: 'Website',
791
- type: 'link',
792
- sortable: false,
793
- filterable: false,
794
- visible: true,
795
- hideMobile: true,
796
- },
797
- active_projects: {
798
- label: 'Projekte',
799
- type: 'expand',
800
- sortable: false,
801
- filterable: false,
802
- visible: true,
803
- hideMobile: true,
804
- expandLabel: 'Projekte',
805
- expandColumns: [
806
- { key: 'project_name', label: 'Projekt', bold: true },
807
- { key: 'status', label: 'Status', muted: true },
808
- { key: 'expected_closing', label: 'Closing' },
809
- ],
810
- expandTitleFn: (row: DataRow) => `Aktive Projekte von ${row.name}`,
811
- },
812
- } satisfies Record<string, ColumnConfig>
813
-
814
- export const CUSTOMER_LAYOUT = {
815
- list: {
816
- titleField: 'name',
817
- metaFields: ['main_customer', 'category', 'city'],
818
- badgeFields: [],
819
- valueField: null,
820
- expandField: 'active_projects',
821
- },
822
- card: {
823
- titleField: 'name',
824
- subtitleField: 'main_customer',
825
- badgeFields: [],
826
- rows: [
827
- { label: 'Kategorie', field: 'category' },
828
- { label: 'Region', field: 'region' },
829
- { label: 'Stadt', field: 'city' },
830
- ],
831
- footerField: 'url',
832
- expandField: 'active_projects',
833
- },
834
- }
835
-
836
- export const MOCK_CUSTOMERS = [
837
- {
838
- id: 'c1',
839
- name: 'Continental AG',
840
- main_customer: 'Continental Gruppe',
841
- category: 'Automotive',
842
- region: 'EMEA',
843
- country_code: 'DE',
844
- city: 'Hannover',
845
- url: 'continental.com',
846
- favorite: true,
847
- active_projects: [
848
- { project_name: 'ADAS Kameramodul Gen3', status: 'Open', expected_closing: '2025-09-30' },
849
- { project_name: 'Radar-Frontend 77GHz', status: 'Negotiation', expected_closing: '2025-10-15' },
850
- ],
851
- },
852
- {
853
- id: 'c2',
854
- name: 'Webasto SE',
855
- main_customer: 'Webasto Gruppe',
856
- category: 'Automotive',
857
- region: 'EMEA',
858
- country_code: 'DE',
859
- city: 'Stockdorf',
860
- url: 'webasto.com',
861
- favorite: false,
862
- active_projects: [
863
- { project_name: 'EV Ladesteuerung 22kW', status: 'Won', expected_closing: '2025-03-15' },
864
- { project_name: 'Wallbox Premium 11kW', status: 'Qualified', expected_closing: '2025-08-30' },
865
- ],
866
- },
867
- {
868
- id: 'c3',
869
- name: 'Siemens AG',
870
- main_customer: 'Siemens Konzern',
871
- category: 'Industrial',
872
- region: 'EMEA',
873
- country_code: 'DE',
874
- city: 'München',
875
- url: 'siemens.com',
876
- favorite: true,
877
- active_projects: [
878
- { project_name: 'Industrie-Gateway IoT', status: 'Negotiation', expected_closing: '2025-12-01' },
879
- ],
880
- },
881
- {
882
- id: 'c4',
883
- name: 'Dräger AG',
884
- main_customer: 'Drägerwerk',
885
- category: 'Medical',
886
- region: 'EMEA',
887
- country_code: 'DE',
888
- city: 'Lübeck',
889
- url: 'draeger.com',
890
- favorite: false,
891
- active_projects: [
892
- { project_name: 'Patientenmonitor V5', status: 'Qualified', expected_closing: '2026-02-28' },
893
- ],
894
- },
895
- {
896
- id: 'c5',
897
- name: 'Landis+Gyr AG',
898
- main_customer: 'Landis+Gyr Group',
899
- category: 'Energy',
900
- region: 'EMEA',
901
- country_code: 'CH',
902
- city: 'Zug',
903
- url: 'landisgyr.com',
904
- favorite: false,
905
- active_projects: [
906
- { project_name: 'Smart Meter Modul', status: 'Open', expected_closing: '2025-11-15' },
907
- ],
908
- },
909
- {
910
- id: 'c6',
911
- name: 'KUKA AG',
912
- main_customer: 'KUKA Gruppe',
913
- category: 'Industrial',
914
- region: 'EMEA',
915
- country_code: 'DE',
916
- city: 'Augsburg',
917
- url: 'kuka.com',
918
- favorite: false,
919
- active_projects: [
920
- { project_name: 'Robotersteuerung R200', status: 'Won', expected_closing: '2025-01-20' },
921
- ],
922
- },
923
- {
924
- id: 'c7',
925
- name: 'ZF Friedrichshafen AG',
926
- main_customer: 'ZF Group',
927
- category: 'Automotive',
928
- region: 'EMEA',
929
- country_code: 'DE',
930
- city: 'Friedrichshafen',
931
- url: 'zf.com',
932
- favorite: false,
933
- active_projects: [
934
- { project_name: 'BMS 48V Mild-Hybrid', status: 'Lost', expected_closing: '2025-06-30' },
935
- ],
936
- },
937
- {
938
- id: 'c8',
939
- name: 'CLAAS KGaA',
940
- main_customer: 'CLAAS Gruppe',
941
- category: 'Agriculture',
942
- region: 'EMEA',
943
- country_code: 'DE',
944
- city: 'Harsewinkel',
945
- url: 'claas.com',
946
- favorite: false,
947
- active_projects: [
948
- { project_name: 'Sensorknoten Agrar', status: 'Open', expected_closing: '2026-03-31' },
949
- ],
950
- },
951
- {
952
- id: 'c9',
953
- name: 'Bosch Sensortec',
954
- main_customer: 'Robert Bosch GmbH',
955
- category: 'Automotive',
956
- region: 'EMEA',
957
- country_code: 'DE',
958
- city: 'Reutlingen',
959
- url: 'bosch-sensortec.com',
960
- favorite: true,
961
- active_projects: [],
962
- },
963
- {
964
- id: 'c10',
965
- name: 'Schneider Electric',
966
- main_customer: 'Schneider Electric SE',
967
- category: 'Energy',
968
- region: 'EMEA',
969
- country_code: 'FR',
970
- city: 'Rueil-Malmaison',
971
- url: 'se.com',
972
- favorite: false,
973
- active_projects: [],
974
- },
975
- {
976
- id: 'c11',
977
- name: 'BMW Group',
978
- main_customer: 'Automotive OEM',
979
- category: 'Automotive',
980
- region: 'EMEA/APAC/NAFTA',
981
- country_code: 'DE',
982
- city: 'München',
983
- url: 'bmwgroup.com',
984
- favorite: false,
985
- active_projects: [
986
- { project_name: 'Autonomes Fahrzeug-Plattform Generation 4', status: 'Negotiation', expected_closing: '2027-06-30' },
987
- { project_name: 'ADAS Kameramodul Gen3', status: 'Open', expected_closing: '2025-09-30' },
988
- ],
989
- },
990
- ] satisfies DataRow[]
991
-
992
- // ---------------------------------------------------------------------------
993
- // APPLICATIONS
994
- // ---------------------------------------------------------------------------
995
-
996
- export const APPLICATION_COLUMNS = {
997
- favorite: {
998
- label: 'Favorit',
999
- type: 'favorite',
1000
- sortable: false,
1001
- filterable: false,
1002
- visible: true,
1003
- },
1004
- name: {
1005
- label: 'Applikation',
1006
- type: 'double-text',
1007
- sortable: true,
1008
- filterable: false,
1009
- visible: true,
1010
- secondary: 'description',
1011
- searchable: true,
1012
- },
1013
- url: {
1014
- label: 'Referenz',
1015
- type: 'link',
1016
- sortable: false,
1017
- filterable: false,
1018
- visible: true,
1019
- hideMobile: true,
1020
- },
1021
- trends: {
1022
- label: 'Trend',
1023
- type: 'text',
1024
- sortable: true,
1025
- filterable: true,
1026
- primaryFilter: true,
1027
- visible: true,
1028
- hideTablet: true,
1029
- searchable: true,
1030
- },
1031
- recommended_products: {
1032
- label: 'Produkte',
1033
- type: 'expand',
1034
- sortable: false,
1035
- filterable: false,
1036
- visible: true,
1037
- hideMobile: true,
1038
- expandLabel: 'Produkte',
1039
- expandColumns: [
1040
- { key: 'product_name', label: 'Produkt', bold: true },
1041
- { key: 'top_seller', label: 'Top Seller' },
1042
- { key: 'top_pick', label: 'Top Pick' },
1043
- { key: 'recommendation_score', label: 'Score', type: 'score-bar' as const },
1044
- ],
1045
- expandTitleFn: (row: DataRow) => `Empfohlene Produkte für ${row.name}`,
1046
- },
1047
- } satisfies Record<string, ColumnConfig>
1048
-
1049
- export const APPLICATION_LAYOUT = {
1050
- list: {
1051
- titleField: 'name',
1052
- metaFields: ['description', 'trends'],
1053
- badgeFields: [],
1054
- valueField: null,
1055
- expandField: 'recommended_products',
1056
- },
1057
- card: {
1058
- titleField: 'name',
1059
- subtitleField: 'description',
1060
- badgeFields: [],
1061
- rows: [
1062
- { label: 'Trend', field: 'trends' },
1063
- { label: 'Referenz', field: 'url' },
1064
- ],
1065
- footerField: 'trends',
1066
- expandField: 'recommended_products',
1067
- },
1068
- }
1069
-
1070
- export const MOCK_APPLICATIONS = [
1071
- {
1072
- id: 'a1',
1073
- name: 'ADAS Kameramodul',
1074
- description: 'Kamerabasiertes Fahrerassistenzsystem für Level 2/3 Autonomie',
1075
- url: 'https://www.continentalautomotive.com/adas',
1076
- trends: 'Autonomous Driving',
1077
- favorite: true,
1078
- recommended_products: [
1079
- { product_name: 'STM32F407VGT6', top_seller: true, top_pick: false, recommendation_score: 0.94 },
1080
- { product_name: 'TPS54360B', top_seller: false, top_pick: true, recommendation_score: 0.87 },
1081
- { product_name: 'AD7124-8BCPZ', top_seller: false, top_pick: false, recommendation_score: 0.76 },
1082
- ],
1083
- },
1084
- {
1085
- id: 'a2',
1086
- name: 'EV Battery Management',
1087
- description: 'Batteriemanagement für Hochvolt-Elektrofahrzeuge (BEV/PHEV)',
1088
- url: 'https://www.webasto.com/ev-solutions',
1089
- trends: 'Electromobility',
1090
- favorite: true,
1091
- recommended_products: [
1092
- { product_name: 'BQ25895RTWR', top_seller: true, top_pick: true, recommendation_score: 0.96 },
1093
- { product_name: 'ADP5054ACPZ', top_seller: false, top_pick: true, recommendation_score: 0.88 },
1094
- { product_name: 'IRF540NPBF', top_seller: true, top_pick: false, recommendation_score: 0.81 },
1095
- ],
1096
- },
1097
- {
1098
- id: 'a3',
1099
- name: 'Smart Meter Gateway',
1100
- description: 'Kommunikations-Gateway für intelligente Energiezähler (MUC)',
1101
- url: 'https://www.landisgyr.com/smart-grid',
1102
- trends: 'Smart Grid',
1103
- favorite: false,
1104
- recommended_products: [
1105
- { product_name: 'ATMEGA328P-AU', top_seller: false, top_pick: true, recommendation_score: 0.83 },
1106
- { product_name: 'NCV7356D1R2G', top_seller: false, top_pick: false, recommendation_score: 0.71 },
1107
- ],
1108
- },
1109
- {
1110
- id: 'a4',
1111
- name: 'Industrie-PLC Compact',
1112
- description: 'Kompakte speicherprogrammierbare Steuerung für Maschinen und Anlagen',
1113
- url: 'https://www.siemens.com/plc',
1114
- trends: 'Industry 4.0',
1115
- favorite: false,
1116
- recommended_products: [
1117
- { product_name: 'XMC4800-F144K2048-AA-LONGVARIANT-REVB', top_seller: false, top_pick: true, recommendation_score: 0.91 },
1118
- { product_name: 'STM32F407VGT6', top_seller: true, top_pick: false, recommendation_score: 0.85 },
1119
- { product_name: 'SN74LVC1G14', top_seller: false, top_pick: false, recommendation_score: 0.68 },
1120
- ],
1121
- },
1122
- {
1123
- id: 'a5',
1124
- name: 'Wearable Vitalsensor',
1125
- description: 'Tragbarer Biosensor für kontinuierliche Patientenüberwachung',
1126
- url: 'https://www.draeger.com/digital-health',
1127
- trends: 'Digital Health',
1128
- favorite: false,
1129
- recommended_products: [
1130
- { product_name: 'AD7124-8BCPZ', top_seller: false, top_pick: true, recommendation_score: 0.89 },
1131
- { product_name: 'OPA2340UA', top_seller: false, top_pick: false, recommendation_score: 0.77 },
1132
- ],
1133
- },
1134
- {
1135
- id: 'a6',
1136
- name: 'Wallbox AC/DC',
1137
- description: 'Bidirektionale Ladestation für Elektrofahrzeuge mit V2G-Unterstützung',
1138
- url: 'https://www.webasto.com/wallbox',
1139
- trends: 'Electromobility',
1140
- favorite: false,
1141
- recommended_products: [
1142
- { product_name: 'IRF540NPBF', top_seller: true, top_pick: false, recommendation_score: 0.93 },
1143
- { product_name: 'BQ25895RTWR', top_seller: false, top_pick: true, recommendation_score: 0.86 },
1144
- { product_name: 'TPS54360B', top_seller: false, top_pick: false, recommendation_score: 0.79 },
1145
- ],
1146
- },
1147
- {
1148
- id: 'a7',
1149
- name: 'CAN-FD Sternkoppler',
1150
- description: 'Aktiver CAN-FD Sternkoppler für Fahrzeugbusnetzwerke',
1151
- url: 'https://www.nxp.com/can',
1152
- trends: 'Autonomous Driving',
1153
- favorite: false,
1154
- recommended_products: [
1155
- { product_name: 'NCV7356D1R2G', top_seller: true, top_pick: true, recommendation_score: 0.95 },
1156
- { product_name: 'SN74LVC1G14', top_seller: false, top_pick: false, recommendation_score: 0.72 },
1157
- ],
1158
- },
1159
- {
1160
- id: 'a8',
1161
- name: 'Precision Agriculture Node',
1162
- description: 'IoT-Feldknoten für Bodenfeuchte-, GPS- und Wetterdatenerfassung',
1163
- url: 'https://www.claas.com/precision-farming',
1164
- trends: 'Smart Agriculture',
1165
- favorite: false,
1166
- recommended_products: [
1167
- { product_name: 'ATMEGA328P-AU', top_seller: true, top_pick: false, recommendation_score: 0.88 },
1168
- { product_name: 'AD7124-8BCPZ', top_seller: false, top_pick: true, recommendation_score: 0.82 },
1169
- { product_name: 'SN74LVC1G14', top_seller: false, top_pick: false, recommendation_score: 0.65 },
1170
- ],
1171
- },
1172
- {
1173
- id: 'a9',
1174
- name: 'Roboter-Motorcontroller',
1175
- description: 'Mehrachsiger Servo- und Schrittmotorregler für kollaborative Roboter',
1176
- url: 'https://www.kuka.com/cobots',
1177
- trends: 'Industry 4.0',
1178
- favorite: true,
1179
- recommended_products: [
1180
- { product_name: 'XMC4800-F144K2048-AA-LONGVARIANT-REVB', top_seller: false, top_pick: true, recommendation_score: 0.92 },
1181
- { product_name: 'IRF540NPBF', top_seller: true, top_pick: false, recommendation_score: 0.84 },
1182
- ],
1183
- },
1184
- {
1185
- id: 'a10',
1186
- name: 'RS232-Legacy-Bridge',
1187
- description: 'Protokollbrücke von RS-232 auf moderne Feldbusse (Modbus RTU/TCP)',
1188
- url: 'https://www.siemens.com/legacy-automation',
1189
- trends: 'Industry 4.0',
1190
- favorite: false,
1191
- recommended_products: [
1192
- { product_name: 'MAX232CPE+', top_seller: false, top_pick: true, recommendation_score: 0.91 },
1193
- ],
1194
- },
1195
- {
1196
- id: 'a11',
1197
- name: 'Hochvolt-Batteriemanagement',
1198
- description: 'Funktionssicheres BMS nach ISO 26262 ASIL-D für Hochvolt-Traktionsbatterien in BEV und FCEV-Plattformen',
1199
- url: 'https://www.zf.com/hv-bms',
1200
- trends: 'Electromobility/Safety',
1201
- favorite: false,
1202
- recommended_products: [
1203
- { product_name: 'BQ25895RTWR', top_seller: true, top_pick: true, recommendation_score: 0.97 },
1204
- { product_name: 'ADP5054ACPZ', top_seller: false, top_pick: true, recommendation_score: 0.91 },
1205
- { product_name: 'IRF540NPBF', top_seller: true, top_pick: false, recommendation_score: 0.86 },
1206
- { product_name: 'STM32F407VGT6', top_seller: false, top_pick: false, recommendation_score: 0.79 },
1207
- { product_name: 'XMC4800-F144K2048-AA-LONGVARIANT-REVB', top_seller: false, top_pick: true, recommendation_score: 0.74 },
1208
- ],
1209
- },
1210
- ] satisfies DataRow[]
1211
-
1212
- // ---------------------------------------------------------------------------
1213
- // DATA SOURCE REGISTRY
1214
- // ---------------------------------------------------------------------------
1215
-
1216
- export const DATA_SOURCES: Record<string, DomainConfig> = {
1217
- products: {
1218
- key: 'products',
1219
- label: 'Produkte',
1220
- resultLabel: 'Produkten',
1221
- columns: PRODUCT_COLUMNS,
1222
- layout: PRODUCT_LAYOUT,
1223
- data: MOCK_PRODUCTS,
1224
- },
1225
- projects: {
1226
- key: 'projects',
1227
- label: 'Projekte',
1228
- resultLabel: 'Projekten',
1229
- columns: PROJECT_COLUMNS,
1230
- layout: PROJECT_LAYOUT,
1231
- data: MOCK_PROJECTS,
1232
- },
1233
- customers: {
1234
- key: 'customers',
1235
- label: 'Kunden',
1236
- resultLabel: 'Kunden',
1237
- columns: CUSTOMER_COLUMNS,
1238
- layout: CUSTOMER_LAYOUT,
1239
- data: MOCK_CUSTOMERS,
1240
- },
1241
- applications: {
1242
- key: 'applications',
1243
- label: 'Applikationen',
1244
- resultLabel: 'Applikationen',
1245
- columns: APPLICATION_COLUMNS,
1246
- layout: APPLICATION_LAYOUT,
1247
- data: MOCK_APPLICATIONS,
1248
- },
1249
- }
1250
-
1251
- export const DOMAIN_KEYS = ['products', 'projects', 'customers', 'applications'] as const satisfies string[]