mirror of
https://github.com/windmill-labs/windmill.git
synced 2026-08-24 08:01:38 +00:00
5d79f33590
* Remove $$props.field usage * Rename slots to ensure no hyphen * _props * _trigger * OnSelectedIteration type correct capitalization * rename _content * Remove afterUpdate * Migrate everything to svelte 5 * array bind * Fix popover * type never * nit fixes * Fixed many trivial errors * onClick * Fix errors * use let: * nit typing * fix: wrap state_referenced_locally vars with untrack() Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * Add untrack import * Fix all syntax errors due to untrack migration * Fix undefined errors * Fix more undefined errors * untrack(() => initialOpen) * svelte-ignore * Fix state_descriptors_fixed error in Chart.svelte Use $state.snapshot() to pass plain copies of data/options to Chart.js instead of $state proxies. Chart.js's listenArrayEvents tries to define property descriptors on data arrays, which Svelte 5 proxies reject. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * nit typing * Merge issue * Fix "path is not set" error in resource picker / editor * Fix InputTransformForm error when rerunning some flows * fix npm run check --------- Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
46 lines
1.2 KiB
Svelte
46 lines
1.2 KiB
Svelte
<script lang="ts">
|
|
import uFuzzy from '@leeoniya/ufuzzy'
|
|
import { untrack } from 'svelte'
|
|
|
|
interface Props {
|
|
filter?: string
|
|
items: any[] | undefined
|
|
f: (item: any) => string
|
|
filteredItems: (any & { marked: string })[] | undefined
|
|
opts?: uFuzzy.Options
|
|
}
|
|
|
|
let { filter = '', items, f, filteredItems = $bindable(), opts = {} }: Props = $props()
|
|
|
|
let uf = new uFuzzy(untrack(() => opts))
|
|
|
|
function filterItems() {
|
|
let trimmed = filter.trim()
|
|
if (items == undefined || trimmed.length == 0) {
|
|
filteredItems = items
|
|
return
|
|
}
|
|
// pre-filter
|
|
let idxs = uf.filter(plaintextItems, trimmed) ?? []
|
|
|
|
let info = uf.info(idxs, plaintextItems, trimmed)
|
|
let order = uf.sort(info, plaintextItems, trimmed)
|
|
|
|
let result: any[] = []
|
|
|
|
for (let i = 0; i < order.length; i++) {
|
|
let infoIdx = order[i]
|
|
result.push({
|
|
...items[info.idx[infoIdx]],
|
|
marked: uFuzzy.highlight(plaintextItems[info.idx[infoIdx]], info.ranges[infoIdx])
|
|
})
|
|
}
|
|
filteredItems = result
|
|
}
|
|
let plaintextItems = $derived(items?.map((item) => f(item)) ?? [])
|
|
|
|
$effect.pre(() => {
|
|
plaintextItems && filter != undefined && setTimeout(() => untrack(() => filterItems()), 0)
|
|
})
|
|
</script>
|