@isoftdata/svelte-ecommerce 1.0.0-beta.0 → 1.0.0-beta.2
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.
- package/README.md +56 -58
- package/dist/EcommerceCategoryMapConfiguration.svelte +251 -266
- package/dist/EcommerceCategoryMapConfiguration.svelte.d.ts +6 -4
- package/dist/EcommerceConditionMapConfiguration.svelte +192 -214
- package/dist/EcommerceConditionMapConfiguration.svelte.d.ts +3 -3
- package/dist/EcommerceConfiguration.svelte +199 -195
- package/dist/EcommerceConfiguration.svelte.d.ts +16 -16
- package/dist/EcommerceDefaults.svelte +333 -357
- package/dist/EcommerceDefaults.svelte.d.ts +4 -4
- package/dist/EcommerceListingDetails.svelte +852 -986
- package/dist/EcommerceListingDetails.svelte.d.ts +10 -10
- package/dist/EcommercePartTypeConfig.svelte +277 -305
- package/dist/EcommercePartTypeConfig.svelte.d.ts +7 -8
- package/dist/EcommerceStoreConfiguration.svelte +248 -263
- package/dist/EcommerceStoreConfiguration.svelte.d.ts +5 -5
- package/dist/PolicyList.svelte +54 -66
- package/dist/PolicyList.svelte.d.ts +3 -3
- package/dist/data/ebay.d.ts +4 -4
- package/dist/data/htp.d.ts +3 -3
- package/dist/data/htp.js +1 -1
- package/dist/helpers/listing.js +23 -25
- package/dist/helpers/template.d.ts +2 -2
- package/dist/helpers/template.js +35 -37
- package/dist/helpers/validation.js +4 -4
- package/dist/index.d.ts +1 -1
- package/dist/utils.d.ts +47 -61
- package/package.json +31 -13
|
@@ -1,263 +1,248 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import type { i18n } from 'i18next'
|
|
3
|
-
|
|
4
|
-
import { getContext } from 'svelte'
|
|
5
|
-
import Table from '@isoftdata/svelte-table'
|
|
6
|
-
import klona from 'klona'
|
|
7
|
-
import Modal from '@isoftdata/svelte-modal'
|
|
8
|
-
import Checkbox from '@isoftdata/svelte-checkbox'
|
|
9
|
-
import Button from '@isoftdata/svelte-button'
|
|
10
|
-
import Select from '@isoftdata/svelte-select'
|
|
11
|
-
import type {
|
|
12
|
-
EbayLocation,
|
|
13
|
-
EbayPolicy,
|
|
14
|
-
EcommerceCondition,
|
|
15
|
-
EcommercePartnerConfiguration,
|
|
16
|
-
EcommerceStoreConfig,
|
|
17
|
-
Store,
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
let
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
)
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
// Copy the
|
|
117
|
-
const
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
updatedStoreRows.
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
updatedStoreRows
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
</
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
{#if selectedStoreConfigRow.
|
|
238
|
-
<
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
</Select>
|
|
250
|
-
{/if}
|
|
251
|
-
{#if selectedStoreConfigRow.merchantLocationKey}
|
|
252
|
-
<EcommerceDefaults
|
|
253
|
-
bind:defaults={selectedStoreConfigRow.defaults}
|
|
254
|
-
{ebayPolicyList}
|
|
255
|
-
{ecommerceConditionList}
|
|
256
|
-
{partnerConfigurationList}
|
|
257
|
-
defaultsChanged={handleStoreDefaultsChange}
|
|
258
|
-
{selectedEcommercePartnerId}
|
|
259
|
-
/>
|
|
260
|
-
{/if}
|
|
261
|
-
</div>
|
|
262
|
-
{/if}
|
|
263
|
-
</Modal>
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { i18n } from 'i18next'
|
|
3
|
+
|
|
4
|
+
import { getContext } from 'svelte'
|
|
5
|
+
import Table from '@isoftdata/svelte-table'
|
|
6
|
+
import { klona } from 'klona'
|
|
7
|
+
import Modal from '@isoftdata/svelte-modal'
|
|
8
|
+
import Checkbox from '@isoftdata/svelte-checkbox'
|
|
9
|
+
import Button from '@isoftdata/svelte-button'
|
|
10
|
+
import Select from '@isoftdata/svelte-select'
|
|
11
|
+
import type {
|
|
12
|
+
EbayLocation,
|
|
13
|
+
EbayPolicy,
|
|
14
|
+
EcommerceCondition,
|
|
15
|
+
EcommercePartnerConfiguration,
|
|
16
|
+
EcommerceStoreConfig,
|
|
17
|
+
Store,
|
|
18
|
+
} from './utils.js'
|
|
19
|
+
import EcommerceDefaults from './EcommerceDefaults.svelte'
|
|
20
|
+
|
|
21
|
+
import { translate as defaultTranslate } from '@isoftdata/utility-string'
|
|
22
|
+
const { t: translate } = getContext<i18n>('i18next') || { t: defaultTranslate }
|
|
23
|
+
|
|
24
|
+
interface Props {
|
|
25
|
+
ebayLocationList?: Array<EbayLocation>
|
|
26
|
+
ebayPolicyList?: Array<EbayPolicy>
|
|
27
|
+
ecommerceConditionList: Array<EcommerceCondition>
|
|
28
|
+
partnerConfigurationList?: Array<EcommercePartnerConfiguration>
|
|
29
|
+
selectedEcommercePartnerId: number
|
|
30
|
+
storeList: Array<Store>
|
|
31
|
+
partnerConfigurationChanged: (partnerConfig: EcommercePartnerConfiguration) => Promise<void>
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
let {
|
|
35
|
+
ebayLocationList = [],
|
|
36
|
+
ebayPolicyList = [],
|
|
37
|
+
ecommerceConditionList = [],
|
|
38
|
+
partnerConfigurationList = [],
|
|
39
|
+
selectedEcommercePartnerId,
|
|
40
|
+
storeList = [],
|
|
41
|
+
partnerConfigurationChanged,
|
|
42
|
+
}: Props = $props()
|
|
43
|
+
|
|
44
|
+
let newStoreConfig: EcommerceStoreConfig = Object.freeze({
|
|
45
|
+
active: true,
|
|
46
|
+
defaults: {
|
|
47
|
+
brandMapping: undefined,
|
|
48
|
+
conditionDescription: undefined,
|
|
49
|
+
conditionId: undefined,
|
|
50
|
+
fulfillmentPolicies: undefined,
|
|
51
|
+
fulfillmentTimeUnit: undefined,
|
|
52
|
+
fulfillmentTimeValue: undefined,
|
|
53
|
+
listingDescriptionTemplate: undefined,
|
|
54
|
+
listingDuration: undefined,
|
|
55
|
+
listingFormat: undefined,
|
|
56
|
+
listingTitleTemplate: undefined,
|
|
57
|
+
manufacturerPartNumberMapping: undefined,
|
|
58
|
+
oemNumberMapping: undefined,
|
|
59
|
+
packageType: undefined,
|
|
60
|
+
paymentPolicies: undefined,
|
|
61
|
+
pricingModifier: undefined,
|
|
62
|
+
returnPolicies: undefined,
|
|
63
|
+
shippingLengthUnit: undefined,
|
|
64
|
+
shippingWeightUnit: undefined,
|
|
65
|
+
storePickupAllowed: undefined,
|
|
66
|
+
},
|
|
67
|
+
merchantLocationKey: undefined,
|
|
68
|
+
name: '',
|
|
69
|
+
storeId: 0,
|
|
70
|
+
})
|
|
71
|
+
|
|
72
|
+
let show = $state(false)
|
|
73
|
+
let selectedStoreConfigRow = $state<EcommerceStoreConfig | null>(null)
|
|
74
|
+
|
|
75
|
+
// If we had more than one ecommercepartner, this would change depending on selected partner id
|
|
76
|
+
let selectedPartnerConfig = $derived(
|
|
77
|
+
partnerConfigurationList.find(row => row.ecommercePartnerId === selectedEcommercePartnerId),
|
|
78
|
+
)
|
|
79
|
+
// Get the store rows from the partnerconfig row
|
|
80
|
+
let selectedPartnerConfigStoreRows = $derived(selectedPartnerConfig?.defaults?.store || [])
|
|
81
|
+
|
|
82
|
+
// Filter available ebay locations depending on whether we're adding or editing
|
|
83
|
+
let availableLocations = $derived.by(() => {
|
|
84
|
+
const configuredEbayLocations = selectedPartnerConfigStoreRows.map(row => row.merchantLocationKey)
|
|
85
|
+
const isEditingExisting =
|
|
86
|
+
selectedStoreConfigRow?.name !== null &&
|
|
87
|
+
configuredEbayLocations.includes(selectedStoreConfigRow?.merchantLocationKey)
|
|
88
|
+
|
|
89
|
+
if (isEditingExisting) {
|
|
90
|
+
return ebayLocationList
|
|
91
|
+
}
|
|
92
|
+
return ebayLocationList.filter(location => !configuredEbayLocations.includes(location.ebayName))
|
|
93
|
+
})
|
|
94
|
+
// Filter available stores based on whether we're adding or editing existing
|
|
95
|
+
let availableStores = $derived.by(() => {
|
|
96
|
+
if (!selectedStoreConfigRow) return storeList
|
|
97
|
+
|
|
98
|
+
// Get the IDs of already configured stores
|
|
99
|
+
const configuredStoreIds = selectedPartnerConfigStoreRows.map(row => row.storeId)
|
|
100
|
+
const isEditingExisting =
|
|
101
|
+
selectedStoreConfigRow.storeId !== null && configuredStoreIds.includes(selectedStoreConfigRow.storeId)
|
|
102
|
+
|
|
103
|
+
if (isEditingExisting) {
|
|
104
|
+
return storeList
|
|
105
|
+
}
|
|
106
|
+
// If adding new, filter out already configured stores
|
|
107
|
+
return storeList.filter(store => !configuredStoreIds.includes(store.storeId))
|
|
108
|
+
})
|
|
109
|
+
|
|
110
|
+
async function confirm() {
|
|
111
|
+
if (!selectedStoreConfigRow || !selectedStoreConfigRow.storeId) return
|
|
112
|
+
|
|
113
|
+
// TODO: Here I am regretting my decision to have JSON sub object business for this
|
|
114
|
+
// Copy the store config data for uh state wackiness reasons?
|
|
115
|
+
const storeConfigRowCopy = klona(selectedStoreConfigRow)
|
|
116
|
+
// Copy the partner config row
|
|
117
|
+
const partnerConfigCopy = klona(selectedPartnerConfig)
|
|
118
|
+
|
|
119
|
+
// Copy the selectedParnterConfigStoreRows
|
|
120
|
+
let updatedStoreRows = klona(selectedPartnerConfigStoreRows)
|
|
121
|
+
|
|
122
|
+
// If empty, add storeConfigCopy
|
|
123
|
+
if (updatedStoreRows.length === 0) {
|
|
124
|
+
updatedStoreRows.push(storeConfigRowCopy)
|
|
125
|
+
} else {
|
|
126
|
+
const existingIndex = updatedStoreRows.findIndex(row => row.storeId === storeConfigRowCopy.storeId)
|
|
127
|
+
if (existingIndex === -1) {
|
|
128
|
+
updatedStoreRows.push(storeConfigRowCopy)
|
|
129
|
+
} else {
|
|
130
|
+
updatedStoreRows[existingIndex] = storeConfigRowCopy
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
// Still possible to be missing defaults?
|
|
134
|
+
if (partnerConfigCopy && partnerConfigCopy.defaults) {
|
|
135
|
+
partnerConfigCopy.defaults.store = updatedStoreRows
|
|
136
|
+
await partnerConfigurationChanged(partnerConfigCopy)
|
|
137
|
+
}
|
|
138
|
+
close()
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
function close() {
|
|
142
|
+
selectedStoreConfigRow = newStoreConfig
|
|
143
|
+
show = false
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
function editStoreConfigRow(row?: EcommerceStoreConfig) {
|
|
147
|
+
// Set selected row
|
|
148
|
+
selectedStoreConfigRow = klona(row || newStoreConfig)
|
|
149
|
+
|
|
150
|
+
show = true
|
|
151
|
+
}
|
|
152
|
+
</script>
|
|
153
|
+
|
|
154
|
+
<div class="card">
|
|
155
|
+
<div class="card-header">
|
|
156
|
+
<h4 class="mb-0">{translate('ecommerce.configuration.storeConfiguration', 'Store Configuration')}</h4>
|
|
157
|
+
<p class="text-muted mb-0">
|
|
158
|
+
{translate('ecommerce.configuration.configureStoreLevelEbaySettings', 'Configure store level eBay settings')}
|
|
159
|
+
</p>
|
|
160
|
+
</div>
|
|
161
|
+
<div class="card-body">
|
|
162
|
+
{#if selectedPartnerConfigStoreRows.length}
|
|
163
|
+
<Table
|
|
164
|
+
rows={selectedPartnerConfigStoreRows}
|
|
165
|
+
responsive
|
|
166
|
+
stickyHeader
|
|
167
|
+
parentClass="overflow-y-auto mh-400"
|
|
168
|
+
columns={[
|
|
169
|
+
{ property: 'storeId', name: translate('ecommerce.configuration.storeId', 'Store ID') },
|
|
170
|
+
{ property: 'name', name: translate('ecommerce.configuration.storeName', 'Store Name') },
|
|
171
|
+
{ property: 'merchantLocationKey', name: translate('ecommerce.configuration.ebayLocation', 'Ebay Location') },
|
|
172
|
+
{ property: 'active', name: translate('ecommerce.configuration.active', 'Active') },
|
|
173
|
+
]}
|
|
174
|
+
>
|
|
175
|
+
{#snippet children({ row })}
|
|
176
|
+
<tr
|
|
177
|
+
onclick={() => editStoreConfigRow(row)}
|
|
178
|
+
style="cursor: pointer;"
|
|
179
|
+
>
|
|
180
|
+
<td property="storeId">{row.storeId}</td>
|
|
181
|
+
<td property="name">{row.name}</td>
|
|
182
|
+
<td property="merchantLocationKey">{row.merchantLocationKey}</td>
|
|
183
|
+
<td property="active">{row.active}</td>
|
|
184
|
+
</tr>
|
|
185
|
+
{/snippet}
|
|
186
|
+
</Table>
|
|
187
|
+
{/if}
|
|
188
|
+
</div>
|
|
189
|
+
<div class="card-footer">
|
|
190
|
+
<Button
|
|
191
|
+
outline
|
|
192
|
+
color="success"
|
|
193
|
+
size="sm"
|
|
194
|
+
icon="plus"
|
|
195
|
+
onclick={() => editStoreConfigRow()}
|
|
196
|
+
>
|
|
197
|
+
{translate('common:add', 'Add')}...
|
|
198
|
+
</Button>
|
|
199
|
+
</div>
|
|
200
|
+
</div>
|
|
201
|
+
<Modal
|
|
202
|
+
bind:show
|
|
203
|
+
title={translate('ecommerce.configuration.addEditStoreDefaults', 'Add/Edit Store Defaults')}
|
|
204
|
+
modalSize="lg"
|
|
205
|
+
confirmButtonText={translate('ecommerce.configuration.save', 'Save')}
|
|
206
|
+
cancelShown
|
|
207
|
+
{confirm}
|
|
208
|
+
{close}
|
|
209
|
+
>
|
|
210
|
+
{#if selectedStoreConfigRow}
|
|
211
|
+
<div class="card-body">
|
|
212
|
+
<Checkbox
|
|
213
|
+
label={translate('ecommerce.configuration.activeOnEbay', 'Active on eBay')}
|
|
214
|
+
bind:checked={selectedStoreConfigRow.active}
|
|
215
|
+
/>
|
|
216
|
+
|
|
217
|
+
<Select
|
|
218
|
+
label={translate('ecommerce.configuration.store', 'Store')}
|
|
219
|
+
emptyText="-- {translate('ecommerce.configuration.selectStore', 'Select Store')} --"
|
|
220
|
+
bind:value={selectedStoreConfigRow.storeId}
|
|
221
|
+
>
|
|
222
|
+
{#each availableStores as store}
|
|
223
|
+
<option value={store.storeId}>{store.name}</option>
|
|
224
|
+
{/each}
|
|
225
|
+
</Select>
|
|
226
|
+
{#if selectedStoreConfigRow.storeId}
|
|
227
|
+
<Select
|
|
228
|
+
label={translate('ecommerce.configuration.ebayLocation', 'Ebay Location')}
|
|
229
|
+
emptyText="-- {translate('ecommerce.configuration.selectLocation', 'Select Location')} --"
|
|
230
|
+
bind:value={selectedStoreConfigRow.merchantLocationKey}
|
|
231
|
+
>
|
|
232
|
+
{#each availableLocations as location}
|
|
233
|
+
<option value={location.ebayName}>{location.ebayName}</option>
|
|
234
|
+
{/each}
|
|
235
|
+
</Select>
|
|
236
|
+
{/if}
|
|
237
|
+
{#if selectedStoreConfigRow.merchantLocationKey}
|
|
238
|
+
<EcommerceDefaults
|
|
239
|
+
bind:defaults={selectedStoreConfigRow.defaults}
|
|
240
|
+
{ebayPolicyList}
|
|
241
|
+
{ecommerceConditionList}
|
|
242
|
+
{partnerConfigurationList}
|
|
243
|
+
{selectedEcommercePartnerId}
|
|
244
|
+
/>
|
|
245
|
+
{/if}
|
|
246
|
+
</div>
|
|
247
|
+
{/if}
|
|
248
|
+
</Modal>
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import type { EbayLocation, EbayPolicy, EcommerceCondition, EcommercePartnerConfiguration, Store } from './utils.js';
|
|
2
2
|
interface Props {
|
|
3
|
-
ebayLocationList?: EbayLocation
|
|
4
|
-
ebayPolicyList?: EbayPolicy
|
|
5
|
-
ecommerceConditionList: EcommerceCondition
|
|
6
|
-
partnerConfigurationList?: EcommercePartnerConfiguration
|
|
3
|
+
ebayLocationList?: Array<EbayLocation>;
|
|
4
|
+
ebayPolicyList?: Array<EbayPolicy>;
|
|
5
|
+
ecommerceConditionList: Array<EcommerceCondition>;
|
|
6
|
+
partnerConfigurationList?: Array<EcommercePartnerConfiguration>;
|
|
7
7
|
selectedEcommercePartnerId: number;
|
|
8
|
-
storeList: Store
|
|
8
|
+
storeList: Array<Store>;
|
|
9
9
|
partnerConfigurationChanged: (partnerConfig: EcommercePartnerConfiguration) => Promise<void>;
|
|
10
10
|
}
|
|
11
11
|
declare const EcommerceStoreConfiguration: import("svelte").Component<Props, {}, "">;
|