intelliwaketssveltekitv25 1.0.62 → 1.0.65

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.
@@ -44,6 +44,7 @@
44
44
  hidden = false,
45
45
  use = [],
46
46
  required = true,
47
+ // svelte-ignore state_referenced_locally
47
48
  show = $bindable(!value && !disabled && !readonly),
48
49
  id = RandomString(6)
49
50
  }: Props = $props()
@@ -1,9 +1,12 @@
1
1
  <script lang="ts">
2
2
  import { CustomRangeName, DefaultRangeStringsReport, type TDateRangeString } from './DateRangeFunctions'
3
- import { CookieCreate, DropDownControl, ListGroupItems, type TListGroupItem } from './index'
4
3
  import Calendar from './Calendar.svelte'
5
4
  import { DateCompare, DateOnly, ToArray } from '@solidbasisventures/intelliwaketsfoundation'
6
5
  import { invalidate as doInvalidate, invalidateAll } from '$app/navigation'
6
+ import type { TListGroupItem } from './Definitions'
7
+ import { CookieCreate } from './Cookie'
8
+ import DropDownControl from './DropDownControl.svelte'
9
+ import ListGroupItems from './ListGroupItems.svelte'
7
10
 
8
11
  let {
9
12
  dateRange = $bindable(),
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Converts Data to CSV. Creates a download link and triggers
3
+ * click event on it to download the file.
4
+ */
5
+ export declare const DataToCSVExport: (filename: string, csvData: string[][], blankZeros?: boolean) => void;
6
+ /**
7
+ * Converts Data to CSV without quotes. Creates a download link and triggers
8
+ * click event on it to download the file.
9
+ */
10
+ export declare const DataToCSVExportNoQuotes: (filename: string, csvData: string[][]) => void;
@@ -0,0 +1,29 @@
1
+ import { DataToCSVString } from '@solidbasisventures/intelliwaketsfoundation';
2
+ /**
3
+ * Converts Data to CSV. Creates a download link and triggers
4
+ * click event on it to download the file.
5
+ */
6
+ export const DataToCSVExport = function (filename, csvData, blankZeros = true) {
7
+ const csvString = DataToCSVString(csvData, blankZeros);
8
+ const pom = document.createElement('a');
9
+ const blob = new Blob([csvString], { type: 'text/csv;charset=utf-8;' });
10
+ pom.href = URL.createObjectURL(blob);
11
+ pom.setAttribute('download', filename);
12
+ pom.click();
13
+ };
14
+ /**
15
+ * Converts Data to CSV without quotes. Creates a download link and triggers
16
+ * click event on it to download the file.
17
+ */
18
+ export const DataToCSVExportNoQuotes = function (filename, csvData) {
19
+ const csvString = csvData
20
+ .map((row) => row
21
+ .map((item) => !!item && !isNaN(Number(item)) ? Math.round(Number(item) * 100) / 100 : (item ?? ''))
22
+ .join(','))
23
+ .join('\n');
24
+ const pom = document.createElement('a');
25
+ const blob = new Blob([csvString], { type: 'text/csv;charset=utf-8;' });
26
+ pom.href = URL.createObjectURL(blob);
27
+ pom.setAttribute('download', filename);
28
+ pom.click();
29
+ };
package/dist/Icon.svelte CHANGED
@@ -13,7 +13,7 @@
13
13
  color = '',
14
14
  dataColor,
15
15
 
16
- fw = false,
16
+ fw = true,
17
17
  pull,
18
18
 
19
19
  scale = 1,
@@ -0,0 +1,35 @@
1
+ <script lang="ts" generics="T extends TDataImportProcessorDefinition<any>">
2
+ import {
3
+ type TDataImportProcessorDefinition,
4
+ type TDataImportProcessorResult
5
+ } from '@solidbasisventures/intelliwaketsfoundation'
6
+ import ImporterAnalysis from './ImporterAnalysis.svelte'
7
+ import ImporterLoad from './ImporterLoad.svelte'
8
+ import type { Snippet } from 'svelte'
9
+
10
+ let {
11
+ definition,
12
+ alternateNames = $bindable(),
13
+ csvData = $bindable(null),
14
+ arrayData = $bindable(null),
15
+ onprocess,
16
+ description,
17
+ currentData
18
+ }: {
19
+ definition: T & TDataImportProcessorDefinition<any>,
20
+ alternateNames?: Record<string, string[]>,
21
+ csvData?: string | null,
22
+ arrayData?: string[][] | null,
23
+ onprocess?: (results: TDataImportProcessorResult<T['columns']>[]) => Promise<boolean>,
24
+ description?: Snippet,
25
+ currentData?: object[]
26
+ } = $props()
27
+
28
+
29
+ </script>
30
+
31
+ {#if csvData === null && arrayData === null}
32
+ <ImporterLoad {definition} {description} {currentData} bind:csvData />
33
+ {:else}
34
+ <ImporterAnalysis {definition} bind:alternateNames {onprocess} bind:csvData bind:arrayData />
35
+ {/if}
@@ -0,0 +1,34 @@
1
+ import { type TDataImportProcessorDefinition, type TDataImportProcessorResult } from '@solidbasisventures/intelliwaketsfoundation';
2
+ import type { Snippet } from 'svelte';
3
+ declare function $$render<T extends TDataImportProcessorDefinition<any>>(): {
4
+ props: {
5
+ definition: T & TDataImportProcessorDefinition<any>;
6
+ alternateNames?: Record<string, string[]>;
7
+ csvData?: string | null;
8
+ arrayData?: string[][] | null;
9
+ onprocess?: (results: TDataImportProcessorResult<T["columns"]>[]) => Promise<boolean>;
10
+ description?: Snippet;
11
+ currentData?: object[];
12
+ };
13
+ exports: {};
14
+ bindings: "arrayData" | "alternateNames" | "csvData";
15
+ slots: {};
16
+ events: {};
17
+ };
18
+ declare class __sveltets_Render<T extends TDataImportProcessorDefinition<any>> {
19
+ props(): ReturnType<typeof $$render<T>>['props'];
20
+ events(): ReturnType<typeof $$render<T>>['events'];
21
+ slots(): ReturnType<typeof $$render<T>>['slots'];
22
+ bindings(): "arrayData" | "alternateNames" | "csvData";
23
+ exports(): {};
24
+ }
25
+ interface $$IsomorphicComponent {
26
+ new <T extends TDataImportProcessorDefinition<any>>(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']>> & {
27
+ $$bindings?: ReturnType<__sveltets_Render<T>['bindings']>;
28
+ } & ReturnType<__sveltets_Render<T>['exports']>;
29
+ <T extends TDataImportProcessorDefinition<any>>(internal: unknown, props: ReturnType<__sveltets_Render<T>['props']> & {}): ReturnType<__sveltets_Render<T>['exports']>;
30
+ z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
31
+ }
32
+ declare const Importer: $$IsomorphicComponent;
33
+ type Importer<T extends TDataImportProcessorDefinition<any>> = InstanceType<typeof Importer<T>>;
34
+ export default Importer;
@@ -0,0 +1,188 @@
1
+ <script lang="ts" generics="T extends TDataImportProcessorDefinition<any>">
2
+ import {
3
+ AddS,
4
+ CleanNumbers,
5
+ CoalesceFalsey,
6
+ DataImportProcessor,
7
+ ObjectKeys,
8
+ SetAlternateNames,
9
+ type TDataImportProcessorDefinition,
10
+ type TDataImportProcessorResult
11
+ } from '@solidbasisventures/intelliwaketsfoundation'
12
+ import DropDown from './DropDown.svelte'
13
+
14
+ let {
15
+ definition,
16
+ alternateNames = $bindable(),
17
+ csvData = $bindable(null),
18
+ arrayData = $bindable(null),
19
+ onprocess
20
+ }: {
21
+ definition: T & TDataImportProcessorDefinition<any>,
22
+ alternateNames?: Record<string, string[]>,
23
+ csvData?: string | null,
24
+ arrayData?: string[][] | null,
25
+ onprocess?: (results: TDataImportProcessorResult<T['columns']>[]) => Promise<boolean>
26
+ } = $props()
27
+
28
+ let filter = $state<'errors' | 'warnings' | null>(null)
29
+
30
+ let importer = $derived.by(() => {
31
+ if (csvData) {
32
+ const dip = new DataImportProcessor(definition.columns, { alternateNames })
33
+ dip.populateFromCSV(csvData)
34
+ return dip
35
+ }
36
+ if (arrayData) {
37
+ const dip = new DataImportProcessor(definition.columns, { alternateNames })
38
+ dip.populateFromArray(arrayData)
39
+ return dip
40
+ }
41
+ return null
42
+ })
43
+
44
+ let errorCount = $derived(CleanNumbers(0, importer?.allErrors.length, importer?.missingRequiredHeaders?.length))
45
+ let warningCount = $derived(importer?.allWarnings.length ?? 0)
46
+
47
+ let useFilter = $derived((filter === 'errors' && errorCount) ? filter :
48
+ (filter === 'warnings' && warningCount) ? filter :
49
+ null)
50
+
51
+ let analysisRows = $derived((importer?.analysisRows ?? [])
52
+ .filter(row => !useFilter ||
53
+ (useFilter === 'errors' && row.columns.some(col => col.errorMessage)) ||
54
+ (useFilter === 'warnings' && row.columns.some(col => col.warningMessage))))
55
+
56
+ async function doProcess() {
57
+ if (importer && onprocess) {
58
+ if (await onprocess(importer.validRows)) {
59
+ doClear()
60
+ }
61
+ }
62
+ }
63
+
64
+ function doClear() {
65
+ if (csvData) csvData = null
66
+ if (arrayData) arrayData = null
67
+ }
68
+
69
+ let definitionKeys = $derived(ObjectKeys(definition.columns))
70
+
71
+ function setAlternateName(providedColumn: string | null, targetColumn: string | null) {
72
+ if (!providedColumn || !alternateNames) return
73
+
74
+ alternateNames = SetAlternateNames(alternateNames, providedColumn, targetColumn)
75
+ }
76
+
77
+ </script>
78
+
79
+ <div class="grid grid-rows-[auto_1fr] overflow-hidden">
80
+ <div class="grid grid-cols-[1fr_auto]">
81
+ <div class="flex flex-row flex-wrap gap-2 p-2 [&>*]:w-36 [&>*]:font-bold">
82
+ {#if errorCount}
83
+ <button data-color="danger"
84
+ onclick={() => filter = filter === 'errors' ? null : 'errors'}
85
+ class:opacity-50={useFilter && useFilter !== 'errors'}>
86
+ {AddS('Error', errorCount, true)}
87
+ </button>
88
+ {/if}
89
+ {#if warningCount}
90
+ <button data-color="warning"
91
+ onclick={() => filter = filter === 'warnings' ? null : 'warnings'}
92
+ class:opacity-50={useFilter && useFilter !== 'warnings'}>
93
+ {AddS('Warning', warningCount, true)}
94
+ </button>
95
+ {/if}
96
+ </div>
97
+ <div class="p-2">
98
+ <div class="flex flex-row justify-end gap-2">
99
+ <button type="button" onclick={doClear}
100
+ class="border-transparent bg-transparent text-slate-300 hover:text-slate-400 focus:ring-transparent shadow-none">
101
+ Clear Data
102
+ </button>
103
+ <button type="button" onclick={doProcess} disabled={!importer?.isValid}>
104
+ Import
105
+ </button>
106
+ </div>
107
+ </div>
108
+ </div>
109
+ <div class="overflow-auto text-sm">
110
+ {#if !importer?.analysisRows?.length}
111
+ <div class="text-center mt-8 text-slate-400">
112
+ No rows to import
113
+ </div>
114
+ {:else}
115
+ {@const headerRow = importer.analysisRows[0]}
116
+ <table class="table tableBordered tableSticky">
117
+ <thead>
118
+ <tr>
119
+ {#each importer?.missingRequiredHeaders ?? [] as missingRequiredHeader}
120
+ <th data-color-light="danger">
121
+ {missingRequiredHeader}
122
+ <br />
123
+ <span class="font-normal">(Missing)</span>
124
+ </th>
125
+ {/each}
126
+ {#each headerRow.columns as column}
127
+ <th>
128
+ <div class="font-normal">
129
+ <DropDown ddActions={[
130
+ {
131
+ dividerGroup: 'Reset',
132
+ title: '(Reset)',
133
+ action: () => setAlternateName(column.rawHeader, null)
134
+ },
135
+ ...definitionKeys.map(dk => ({
136
+ dividerGroup: 'Keys',
137
+ title: dk,
138
+ action: () => setAlternateName(column.rawHeader, dk),
139
+ active: dk === column.columnKey
140
+ }))
141
+ ]}
142
+ buttonClass="btnText"
143
+ buttonTitle={CoalesceFalsey(column.columnKey, '(Not Mapped)')} />
144
+ </div>
145
+ {#if column.columnKey !== column.rawHeader}
146
+ <div class="font-normal">{column.rawHeader}</div>
147
+ {/if}
148
+ </th>
149
+ {/each}
150
+ </tr>
151
+ </thead>
152
+ <tbody>
153
+ {#each analysisRows as row}
154
+ <tr>
155
+ {#each importer?.missingRequiredHeaders ?? [] as missingRequiredHeader}
156
+ <td data-color-light="danger">
157
+ </td>
158
+ {/each}
159
+ {#each row.columns as column}
160
+ <td
161
+ data-color-light={column.errorMessage ? 'danger' :
162
+ column.warningMessage ? 'warning' :
163
+ !column.columnDefinition ? 'gray' : undefined}>
164
+ <div class:text-left={column.justify === 'left'}
165
+ class:text-center={column.justify === 'center'}
166
+ class:text-right={column.justify === 'right'}
167
+ class="text-black">
168
+ {#if column.displayValue}
169
+ {column.displayValue}
170
+ {:else}
171
+ &nbsp;
172
+ {/if}
173
+ </div>
174
+ {#if column.errorMessage}
175
+ <div class="text-xs">{column.errorMessage}</div>
176
+ {/if}
177
+ {#if column.warningMessage}
178
+ <div class="text-xs">{column.warningMessage}</div>
179
+ {/if}
180
+ </td>
181
+ {/each}
182
+ </tr>
183
+ {/each}
184
+ </tbody>
185
+ </table>
186
+ {/if}
187
+ </div>
188
+ </div>
@@ -0,0 +1,31 @@
1
+ import { type TDataImportProcessorDefinition, type TDataImportProcessorResult } from '@solidbasisventures/intelliwaketsfoundation';
2
+ declare function $$render<T extends TDataImportProcessorDefinition<any>>(): {
3
+ props: {
4
+ definition: T & TDataImportProcessorDefinition<any>;
5
+ alternateNames?: Record<string, string[]>;
6
+ csvData?: string | null;
7
+ arrayData?: string[][] | null;
8
+ onprocess?: (results: TDataImportProcessorResult<T["columns"]>[]) => Promise<boolean>;
9
+ };
10
+ exports: {};
11
+ bindings: "arrayData" | "alternateNames" | "csvData";
12
+ slots: {};
13
+ events: {};
14
+ };
15
+ declare class __sveltets_Render<T extends TDataImportProcessorDefinition<any>> {
16
+ props(): ReturnType<typeof $$render<T>>['props'];
17
+ events(): ReturnType<typeof $$render<T>>['events'];
18
+ slots(): ReturnType<typeof $$render<T>>['slots'];
19
+ bindings(): "arrayData" | "alternateNames" | "csvData";
20
+ exports(): {};
21
+ }
22
+ interface $$IsomorphicComponent {
23
+ new <T extends TDataImportProcessorDefinition<any>>(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']>> & {
24
+ $$bindings?: ReturnType<__sveltets_Render<T>['bindings']>;
25
+ } & ReturnType<__sveltets_Render<T>['exports']>;
26
+ <T extends TDataImportProcessorDefinition<any>>(internal: unknown, props: ReturnType<__sveltets_Render<T>['props']> & {}): ReturnType<__sveltets_Render<T>['exports']>;
27
+ z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
28
+ }
29
+ declare const ImporterAnalysis: $$IsomorphicComponent;
30
+ type ImporterAnalysis<T extends TDataImportProcessorDefinition<any>> = InstanceType<typeof ImporterAnalysis<T>>;
31
+ export default ImporterAnalysis;
@@ -0,0 +1,179 @@
1
+ <script lang="ts" generics="T extends TDataImportProcessorDefinition<any>">
2
+ import {
3
+ ObjectKeys,
4
+ type TDataImportProcessorDefinition,
5
+ ToArray,
6
+ YYYY_MM_DD_HH_mm_ss
7
+ } from '@solidbasisventures/intelliwaketsfoundation'
8
+ import DisplayHTML from './DisplayHTML.svelte'
9
+ import type { Snippet } from 'svelte'
10
+ import DropDown from './DropDown.svelte'
11
+ import type { IDDAction } from './Definitions'
12
+ import { DataToCSVExport } from './FunctionsBrowser.svelte'
13
+
14
+ let {
15
+ definition,
16
+ description,
17
+ currentData,
18
+ templateName = 'Template',
19
+ fileAccept = '.csv',
20
+ csvData = $bindable(null)
21
+ }: {
22
+ definition: T & TDataImportProcessorDefinition<any>,
23
+ description?: Snippet,
24
+ currentData?: object[],
25
+ templateName?: string,
26
+ fileAccept?: string,
27
+ csvData?: string | null,
28
+ } = $props()
29
+
30
+ let fileUploader = $state<HTMLInputElement | null>(null)
31
+
32
+ let columnEntries = $derived(Object.entries(definition.columns).map(ent => ({ key: ent[0], value: ent[1] })))
33
+
34
+ let hasDescriptions = $derived(columnEntries.some(ce => ce.value.description))
35
+ let hasSamples = $derived(columnEntries.some(ce => ce.value.sampleData))
36
+
37
+ let isDragging = $state(false)
38
+
39
+ let ddActions = $derived<IDDAction[]>([
40
+ {
41
+ title: 'Download Empty Template',
42
+ action: () => {
43
+ DataToCSVExport(`${templateName}_${YYYY_MM_DD_HH_mm_ss('now')}.csv`, [
44
+ columnEntries.map(ce => ce.key)
45
+ ])
46
+ }
47
+ },
48
+ {
49
+ title: 'Download with Sample Data',
50
+ hidden: !hasDescriptions && !hasSamples,
51
+ action: () => {
52
+ const data = [columnEntries.map(ce => ce.key)]
53
+ if (hasDescriptions) data.push(columnEntries.map(ce => ce.value.description ?? ''))
54
+ if (hasSamples) data.push(columnEntries.map(ce => ToArray(ce.value.sampleData ?? '').join(', ')))
55
+ DataToCSVExport(`${templateName}_${YYYY_MM_DD_HH_mm_ss('now')}.csv`, data)
56
+ }
57
+ },
58
+ {
59
+ title: 'Download Current Data',
60
+ hidden: !currentData?.length,
61
+ action: () => {
62
+ const keys = ObjectKeys((currentData ?? [])[0])
63
+ const data: any[] = [keys]
64
+ const rows = currentData?.map(project => Object.values(project).map(val => val?.toString())) ?? []
65
+ data.push(...rows)
66
+ DataToCSVExport(`${templateName}_${YYYY_MM_DD_HH_mm_ss('now')}.csv`, data)
67
+ }
68
+ }
69
+ ])
70
+
71
+ async function doLoadFile(e: any) {
72
+ const file = (e.target?.files ?? [])[0]
73
+
74
+ csvData = await file?.text() ?? null
75
+
76
+ if (fileUploader) {
77
+ fileUploader.value = ''
78
+ }
79
+ }
80
+
81
+ async function onDrop(e: DragEvent) {
82
+ e.preventDefault()
83
+ isDragging = false
84
+ const file = e.dataTransfer?.files?.[0]
85
+ if (file) {
86
+ csvData = await file.text()
87
+ }
88
+ }
89
+ </script>
90
+
91
+ <div class="grid grid-rows-[auto_auto_auto_1fr] overflow-hidden gap-2"
92
+ role="region"
93
+ aria-label="File drop zone"
94
+ class:bg-blue-50={isDragging}
95
+ ondragover={(e) => { e.preventDefault(); isDragging = true }}
96
+ ondragleave={() => isDragging = false}
97
+ ondrop={onDrop}>
98
+ <div>
99
+ {@render description?.()}
100
+ <DisplayHTML value={definition.descriptionHTML} />
101
+ </div>
102
+ <div class="grid grid-cols-2">
103
+ <div>
104
+ <button type="button"
105
+ onclick={() => { fileUploader?.click() }}>
106
+ <svg aria-hidden="true" role="img" xmlns="http://www.w3.org/2000/svg"
107
+ class="svelte-fa svelte-fa-base svelte-fa-fw" viewBox="0 0 512 512"
108
+ style="height: 1em; overflow: visible; transform-origin: center center; vertical-align: -0.125em; text-align: center; width: 1.25em;">
109
+ <g transform="translate(256 256)" transform-origin="128 0">
110
+ <g transform="translate(0,0) scale(1,1)">
111
+ <path
112
+ d="M280 360c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-278.1-95 95c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9L239 7c9.4-9.4 24.6-9.4 33.9 0L409 143c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-95-95L280 360zm32-8l0-48 136 0c35.3 0 64 28.7 64 64l0 80c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64l0-80c0-35.3 28.7-64 64-64l136 0 0 48L64 352c-8.8 0-16 7.2-16 16l0 80c0 8.8 7.2 16 16 16l384 0c8.8 0 16-7.2 16-16l0-80c0-8.8-7.2-16-16-16l-136 0zm72 56a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z"
113
+ fill="currentColor" transform="translate(-256 -256)"></path>
114
+ </g>
115
+ </g>
116
+ </svg>
117
+ Import CSV
118
+ </button>
119
+ <input type="file"
120
+ hidden
121
+ accept={fileAccept}
122
+ multiple={false}
123
+ bind:this={fileUploader}
124
+ onchange={doLoadFile} />
125
+ </div>
126
+ <div class="text-right">
127
+ <DropDown {ddActions}>
128
+ {#snippet button()}
129
+ <svg aria-hidden="true" role="img" xmlns="http://www.w3.org/2000/svg"
130
+ class="svelte-fa svelte-fa-base svelte-fa-fw" viewBox="0 0 512 512"
131
+ style="height: 1em; overflow: visible; transform-origin: center center; vertical-align: -0.125em; text-align: center; width: 1.25em;">
132
+ <g transform="translate(256 256)" transform-origin="128 0">
133
+ <g transform="translate(0,0) scale(1,1)">
134
+ <path
135
+ d="M280 24c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 270.1-95-95c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9L239 369c9.4 9.4 24.6 9.4 33.9 0L409 233c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-95 95L280 24zM128.8 304L64 304c-35.3 0-64 28.7-64 64l0 80c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-80c0-35.3-28.7-64-64-64l-64.8 0-48 48L448 352c8.8 0 16 7.2 16 16l0 80c0 8.8-7.2 16-16 16L64 464c-8.8 0-16-7.2-16-16l0-80c0-8.8 7.2-16 16-16l112.8 0-48-48zM432 408a24 24 0 1 0 -48 0 24 24 0 1 0 48 0z"
136
+ fill="currentColor" transform="translate(-256 -256)"></path>
137
+ </g>
138
+ </g>
139
+ </svg>
140
+ CSV Template
141
+ {/snippet}
142
+ </DropDown>
143
+ </div>
144
+ </div>
145
+ <div>The CSV will import data based on the headers in the first row as follows:</div>
146
+ <div class="overflow-auto text-sm">
147
+ <table class="table tableBordered tableSticky">
148
+ <thead>
149
+ <tr>
150
+ {#each columnEntries as column}
151
+ <th>
152
+ {column.key}
153
+ </th>
154
+ {/each}
155
+ </tr>
156
+ </thead>
157
+ <tbody>
158
+ {#if hasDescriptions}
159
+ <tr>
160
+ {#each columnEntries as column}
161
+ <td>
162
+ {column.value.description ?? ''}
163
+ </td>
164
+ {/each}
165
+ </tr>
166
+ {/if}
167
+ {#if hasSamples}
168
+ <tr>
169
+ {#each columnEntries as column}
170
+ <td>
171
+ {ToArray(column.value.sampleData ?? '').join(', ')}
172
+ </td>
173
+ {/each}
174
+ </tr>
175
+ {/if}
176
+ </tbody>
177
+ </table>
178
+ </div>
179
+ </div>
@@ -0,0 +1,33 @@
1
+ import { type TDataImportProcessorDefinition } from '@solidbasisventures/intelliwaketsfoundation';
2
+ import type { Snippet } from 'svelte';
3
+ declare function $$render<T extends TDataImportProcessorDefinition<any>>(): {
4
+ props: {
5
+ definition: T & TDataImportProcessorDefinition<any>;
6
+ description?: Snippet;
7
+ currentData?: object[];
8
+ templateName?: string;
9
+ fileAccept?: string;
10
+ csvData?: string | null;
11
+ };
12
+ exports: {};
13
+ bindings: "csvData";
14
+ slots: {};
15
+ events: {};
16
+ };
17
+ declare class __sveltets_Render<T extends TDataImportProcessorDefinition<any>> {
18
+ props(): ReturnType<typeof $$render<T>>['props'];
19
+ events(): ReturnType<typeof $$render<T>>['events'];
20
+ slots(): ReturnType<typeof $$render<T>>['slots'];
21
+ bindings(): "csvData";
22
+ exports(): {};
23
+ }
24
+ interface $$IsomorphicComponent {
25
+ new <T extends TDataImportProcessorDefinition<any>>(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']>> & {
26
+ $$bindings?: ReturnType<__sveltets_Render<T>['bindings']>;
27
+ } & ReturnType<__sveltets_Render<T>['exports']>;
28
+ <T extends TDataImportProcessorDefinition<any>>(internal: unknown, props: ReturnType<__sveltets_Render<T>['props']> & {}): ReturnType<__sveltets_Render<T>['exports']>;
29
+ z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
30
+ }
31
+ declare const ImporterLoad: $$IsomorphicComponent;
32
+ type ImporterLoad<T extends TDataImportProcessorDefinition<any>> = InstanceType<typeof ImporterLoad<T>>;
33
+ export default ImporterLoad;
@@ -28,6 +28,7 @@
28
28
  allowManualEntryMode = true,
29
29
  saveManualEntryMode = null,
30
30
  readonly = false,
31
+ // svelte-ignore state_referenced_locally
31
32
  manualEntryMode = allowManualEntryMode && !!saveManualEntryMode && browser && IsOn(window.localStorage.getItem(saveManualEntryMode)),
32
33
  /**
33
34
  * Maximum number of digits allowed for manual entry.
@@ -6,8 +6,8 @@
6
6
  import { type TFindIsActive, ToPascalCase } from '@solidbasisventures/intelliwaketsfoundation'
7
7
  import { PathAnalyzer } from './PathAnalyzer'
8
8
  import { onDestroy, type Snippet } from 'svelte'
9
- import { Icon } from './index'
10
9
  import { BreakAtManager, type TBreakAt } from './BreakAtManager.js'
10
+ import Icon from './Icon.svelte'
11
11
 
12
12
  let {
13
13
  pageRoute,
package/dist/Modal.svelte CHANGED
@@ -11,7 +11,7 @@
11
11
  import ActivityOverlay from './ActivityOverlay.svelte'
12
12
  import { CleanNumber } from '@solidbasisventures/intelliwaketsfoundation'
13
13
  import { type IFAProps, ShowActivityOverlay } from './Definitions'
14
- import { Icon } from './index'
14
+ import Icon from './Icon.svelte'
15
15
 
16
16
  let {
17
17
  header,
@@ -73,8 +73,8 @@
73
73
  marginForStickyHeader?: boolean
74
74
  okButtonWrap?: boolean
75
75
  class?: string
76
- okColor?: TDefaultColorPalate
77
- color?: TDefaultColorPalate
76
+ okColor?: TDefaultColorPalate | null
77
+ color?: TDefaultColorPalate | null
78
78
  classHeader?: string
79
79
  classBody?: string
80
80
  classFooter?: string
@@ -24,8 +24,8 @@ type $$ComponentProps = {
24
24
  marginForStickyHeader?: boolean;
25
25
  okButtonWrap?: boolean;
26
26
  class?: string;
27
- okColor?: TDefaultColorPalate;
28
- color?: TDefaultColorPalate;
27
+ okColor?: TDefaultColorPalate | null;
28
+ color?: TDefaultColorPalate | null;
29
29
  classHeader?: string;
30
30
  classBody?: string;
31
31
  classFooter?: string;
@@ -5,7 +5,8 @@
5
5
  import { FormEnhance } from './FormEnhance'
6
6
  import { enhance } from '$app/forms'
7
7
  import { CleanNumber } from '@solidbasisventures/intelliwaketsfoundation'
8
- import { Icon, type IFAProps } from './index'
8
+ import type { IFAProps } from './Definitions'
9
+ import Icon from './Icon.svelte'
9
10
 
10
11
  let {
11
12
  header,
@@ -1,6 +1,6 @@
1
1
  import { type Snippet } from 'svelte';
2
2
  import type { TEnhanceOptions } from './FormEnhance';
3
- import { type IFAProps } from './index';
3
+ import type { IFAProps } from './Definitions';
4
4
  type $$ComponentProps = {
5
5
  header?: Snippet;
6
6
  body?: Snippet;
@@ -1,6 +1,7 @@
1
1
  <script lang="ts">
2
2
  import { ModalPrompt } from './ModalPromptDefinition'
3
- import { Icon, Modal } from './index'
3
+ import { Modal } from './index'
4
+ import Icon from './Icon.svelte'
4
5
 
5
6
  let width = $derived($ModalPrompt?.size === 'sm' ? '20em' : $ModalPrompt?.size === 'lg' ? '30em' : $ModalPrompt?.size === 'xl' ? '35em' : '25em')
6
7
  </script>