@seed-ship/mcp-ui-solid 4.3.2 → 4.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +28 -0
- package/dist/components/ExpandableWrapper.cjs +9 -1
- package/dist/components/ExpandableWrapper.cjs.map +1 -1
- package/dist/components/ExpandableWrapper.d.ts +3 -1
- package/dist/components/ExpandableWrapper.d.ts.map +1 -1
- package/dist/components/ExpandableWrapper.js +11 -3
- package/dist/components/ExpandableWrapper.js.map +1 -1
- package/dist/components/UIResourceRenderer.cjs +278 -209
- package/dist/components/UIResourceRenderer.cjs.map +1 -1
- package/dist/components/UIResourceRenderer.d.ts.map +1 -1
- package/dist/components/UIResourceRenderer.js +279 -210
- package/dist/components/UIResourceRenderer.js.map +1 -1
- package/dist/index.cjs +1 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/package.json +1 -1
- package/src/components/ExpandableWrapper.tsx +10 -2
- package/src/components/UIResourceRenderer.tsx +78 -14
- package/src/index.ts +1 -1
- package/tsconfig.tsbuildinfo +1 -1
package/dist/index.cjs
CHANGED
|
@@ -66,6 +66,7 @@ exports.DraggableGridItem = DraggableGridItem.DraggableGridItem;
|
|
|
66
66
|
exports.ResizeHandle = ResizeHandle.ResizeHandle;
|
|
67
67
|
exports.EditableUIResourceRenderer = EditableUIResourceRenderer.EditableUIResourceRenderer;
|
|
68
68
|
exports.ExpandableWrapper = ExpandableWrapper.ExpandableWrapper;
|
|
69
|
+
exports.useExpanded = ExpandableWrapper.useExpanded;
|
|
69
70
|
exports.ComponentToolbar = ComponentToolbar.ComponentToolbar;
|
|
70
71
|
exports.ChatBusProvider = useChatBus.ChatBusProvider;
|
|
71
72
|
exports.useChatBus = useChatBus.useChatBus;
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/index.d.cts
CHANGED
|
@@ -31,7 +31,7 @@ export { UIResourceRenderer, StreamingUIRenderer, GenerativeUIErrorBoundary } fr
|
|
|
31
31
|
export { DraggableGridItem } from './components/DraggableGridItem';
|
|
32
32
|
export { ResizeHandle } from './components/ResizeHandle';
|
|
33
33
|
export { EditableUIResourceRenderer } from './components/EditableUIResourceRenderer';
|
|
34
|
-
export { ExpandableWrapper } from './components/ExpandableWrapper';
|
|
34
|
+
export { ExpandableWrapper, useExpanded } from './components/ExpandableWrapper';
|
|
35
35
|
export { ComponentToolbar } from './components/ComponentToolbar';
|
|
36
36
|
export { ChatBusProvider, useChatBus } from './hooks/useChatBus';
|
|
37
37
|
export { ChatPrompt } from './components/ChatPrompt';
|
package/dist/index.d.ts
CHANGED
|
@@ -31,7 +31,7 @@ export { UIResourceRenderer, StreamingUIRenderer, GenerativeUIErrorBoundary } fr
|
|
|
31
31
|
export { DraggableGridItem } from './components/DraggableGridItem';
|
|
32
32
|
export { ResizeHandle } from './components/ResizeHandle';
|
|
33
33
|
export { EditableUIResourceRenderer } from './components/EditableUIResourceRenderer';
|
|
34
|
-
export { ExpandableWrapper } from './components/ExpandableWrapper';
|
|
34
|
+
export { ExpandableWrapper, useExpanded } from './components/ExpandableWrapper';
|
|
35
35
|
export { ComponentToolbar } from './components/ComponentToolbar';
|
|
36
36
|
export { ChatBusProvider, useChatBus } from './hooks/useChatBus';
|
|
37
37
|
export { ChatPrompt } from './components/ChatPrompt';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAGH,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAA;AAGjG,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAE,0BAA0B,EAAE,MAAM,yCAAyC,CAAA;AACpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -23,7 +23,7 @@ import { DataPreviewSection } from "./components/DataPreviewSection.js";
|
|
|
23
23
|
import { DraggableGridItem } from "./components/DraggableGridItem.js";
|
|
24
24
|
import { ResizeHandle } from "./components/ResizeHandle.js";
|
|
25
25
|
import { EditableUIResourceRenderer } from "./components/EditableUIResourceRenderer.js";
|
|
26
|
-
import { ExpandableWrapper } from "./components/ExpandableWrapper.js";
|
|
26
|
+
import { ExpandableWrapper, useExpanded } from "./components/ExpandableWrapper.js";
|
|
27
27
|
import { ComponentToolbar } from "./components/ComponentToolbar.js";
|
|
28
28
|
import { ChatBusProvider, useChatBus } from "./hooks/useChatBus.js";
|
|
29
29
|
import { ChatPrompt } from "./components/ChatPrompt.js";
|
|
@@ -99,6 +99,7 @@ export {
|
|
|
99
99
|
useConfirmModal,
|
|
100
100
|
useDataValidator,
|
|
101
101
|
useDragDrop,
|
|
102
|
+
useExpanded,
|
|
102
103
|
useFormPersistence,
|
|
103
104
|
useMCPAction,
|
|
104
105
|
useMCPActionSafe,
|
package/package.json
CHANGED
|
@@ -6,9 +6,15 @@
|
|
|
6
6
|
* imperative components like ChartJS that bind instances to DOM nodes.
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
-
import { Component, Show, createSignal, createEffect, onCleanup, JSX } from 'solid-js'
|
|
9
|
+
import { Component, Show, createSignal, createEffect, onCleanup, JSX, createContext, useContext, Accessor } from 'solid-js'
|
|
10
10
|
import { Portal } from 'solid-js/web'
|
|
11
11
|
|
|
12
|
+
/** Context for child components to know if they're in expanded/fullscreen view */
|
|
13
|
+
const ExpandedContext = createContext<Accessor<boolean>>(() => false)
|
|
14
|
+
|
|
15
|
+
/** Hook for child components to read expanded state */
|
|
16
|
+
export const useExpanded = () => useContext(ExpandedContext)
|
|
17
|
+
|
|
12
18
|
export interface ExpandableWrapperProps {
|
|
13
19
|
/** Content to render inline (and in expanded view) */
|
|
14
20
|
children: JSX.Element
|
|
@@ -103,7 +109,9 @@ export const ExpandableWrapper: Component<ExpandableWrapperProps> = (props) => {
|
|
|
103
109
|
{/* Inline slot — content lives here when not expanded */}
|
|
104
110
|
<div ref={inlineSlotRef}>
|
|
105
111
|
<div ref={contentRef}>
|
|
106
|
-
{
|
|
112
|
+
<ExpandedContext.Provider value={isExpanded}>
|
|
113
|
+
{props.children}
|
|
114
|
+
</ExpandedContext.Provider>
|
|
107
115
|
</div>
|
|
108
116
|
</div>
|
|
109
117
|
|
|
@@ -21,7 +21,7 @@ import { ImageGalleryRenderer } from './ImageGalleryRenderer'
|
|
|
21
21
|
import { VideoRenderer } from './VideoRenderer'
|
|
22
22
|
import { CodeBlockRenderer } from './CodeBlockRenderer'
|
|
23
23
|
import { MapRenderer } from './MapRenderer'
|
|
24
|
-
import { ExpandableWrapper } from './ExpandableWrapper'
|
|
24
|
+
import { ExpandableWrapper, useExpanded } from './ExpandableWrapper'
|
|
25
25
|
import { RenderProvider } from './RenderContext'
|
|
26
26
|
import { useAction } from '../hooks/useAction'
|
|
27
27
|
import { marked } from 'marked'
|
|
@@ -375,35 +375,72 @@ function TableRenderer(props: {
|
|
|
375
375
|
return sortDir() === 'asc' ? '\u2191' : '\u2193'
|
|
376
376
|
}
|
|
377
377
|
|
|
378
|
-
// ─── Client-side
|
|
379
|
-
const
|
|
378
|
+
// ─── Client-side search filter (v4.3.3) ─────────────────────
|
|
379
|
+
const [searchQuery, setSearchQuery] = createSignal('')
|
|
380
|
+
const [debouncedQuery, setDebouncedQuery] = createSignal('')
|
|
381
|
+
let searchTimer: ReturnType<typeof setTimeout> | null = null
|
|
382
|
+
|
|
383
|
+
const isSearchable = () => tableParams.searchable === true || (tableParams.searchable !== false && allRows().length > 10)
|
|
384
|
+
const searchPlaceholder = () => tableParams.searchPlaceholder || 'Rechercher dans le tableau...'
|
|
385
|
+
|
|
386
|
+
const handleSearch = (value: string) => {
|
|
387
|
+
setSearchQuery(value)
|
|
388
|
+
if (searchTimer) clearTimeout(searchTimer)
|
|
389
|
+
searchTimer = setTimeout(() => {
|
|
390
|
+
setDebouncedQuery(value)
|
|
391
|
+
setClientPage(0)
|
|
392
|
+
setProgressivePages(1)
|
|
393
|
+
}, 200)
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
/** Normalize string for accent-insensitive matching */
|
|
397
|
+
const normalize = (s: string) => s.normalize('NFD').replace(/[\u0300-\u036f]/g, '').toLowerCase()
|
|
398
|
+
|
|
399
|
+
const filteredRows = createMemo(() => {
|
|
400
|
+
const q = normalize(debouncedQuery())
|
|
401
|
+
if (!q) return sortedRows()
|
|
402
|
+
const cols = columns()
|
|
403
|
+
return sortedRows().filter((row: any) =>
|
|
404
|
+
cols.some((col: any) => {
|
|
405
|
+
const val = row[col.key]
|
|
406
|
+
if (val == null) return false
|
|
407
|
+
return normalize(String(val)).includes(q)
|
|
408
|
+
})
|
|
409
|
+
)
|
|
410
|
+
})
|
|
411
|
+
|
|
412
|
+
// ─── Client-side pagination (v4.0.4, progressive v4.3.2, context-aware v4.3.4) ─────
|
|
413
|
+
const isExpanded = useExpanded()
|
|
414
|
+
const fullPageSize = () => tableParams.pageSize ?? 25
|
|
415
|
+
const chatPageSize = () => tableParams.chatPageSize ?? Math.min(10, fullPageSize())
|
|
416
|
+
const clientPageSize = () => isExpanded() ? fullPageSize() : chatPageSize()
|
|
380
417
|
const hasServerPagination = () => !!tableParams.pagination
|
|
381
418
|
const isProgressiveMode = () => !!tableParams.showAllLabel
|
|
382
419
|
const needsClientPagination = () =>
|
|
383
|
-
!hasServerPagination() && clientPageSize() > 0 &&
|
|
420
|
+
!hasServerPagination() && clientPageSize() > 0 && filteredRows().length > clientPageSize()
|
|
384
421
|
const [clientPage, setClientPage] = createSignal(tableParams.initialPage ?? 0)
|
|
385
422
|
// Progressive mode: track how many pages to show (append)
|
|
386
423
|
const [progressivePages, setProgressivePages] = createSignal(1)
|
|
387
|
-
const clientTotalPages = () => needsClientPagination() ? Math.ceil(
|
|
424
|
+
const clientTotalPages = () => needsClientPagination() ? Math.ceil(filteredRows().length / clientPageSize()) : 1
|
|
388
425
|
const clientVisibleRows = createMemo(() => {
|
|
389
|
-
if (!needsClientPagination()) return
|
|
426
|
+
if (!needsClientPagination()) return filteredRows()
|
|
390
427
|
if (isProgressiveMode()) {
|
|
391
428
|
// Progressive: show first N * pageSize rows
|
|
392
|
-
return
|
|
429
|
+
return filteredRows().slice(0, progressivePages() * clientPageSize())
|
|
393
430
|
}
|
|
394
431
|
const start = clientPage() * clientPageSize()
|
|
395
|
-
return
|
|
432
|
+
return filteredRows().slice(start, start + clientPageSize())
|
|
396
433
|
})
|
|
397
434
|
const clientRangeStart = () => needsClientPagination()
|
|
398
435
|
? (isProgressiveMode() ? 1 : clientPage() * clientPageSize() + 1)
|
|
399
436
|
: 1
|
|
400
437
|
const clientRangeEnd = () => needsClientPagination()
|
|
401
438
|
? (isProgressiveMode()
|
|
402
|
-
? Math.min(progressivePages() * clientPageSize(),
|
|
403
|
-
: Math.min((clientPage() + 1) * clientPageSize(),
|
|
404
|
-
:
|
|
439
|
+
? Math.min(progressivePages() * clientPageSize(), filteredRows().length)
|
|
440
|
+
: Math.min((clientPage() + 1) * clientPageSize(), filteredRows().length))
|
|
441
|
+
: filteredRows().length
|
|
405
442
|
const progressiveHasMore = () => isProgressiveMode() && needsClientPagination() && progressivePages() < clientTotalPages()
|
|
406
|
-
const progressiveRemaining = () =>
|
|
443
|
+
const progressiveRemaining = () => filteredRows().length - progressivePages() * clientPageSize()
|
|
407
444
|
const showMoreLabel = () => tableParams.showAllLabel || 'Show more'
|
|
408
445
|
|
|
409
446
|
// ─── Virtualization ──────────────────────────────────────
|
|
@@ -640,6 +677,33 @@ function TableRenderer(props: {
|
|
|
640
677
|
</h3>
|
|
641
678
|
</Show>
|
|
642
679
|
|
|
680
|
+
{/* Search input (v4.3.3) */}
|
|
681
|
+
<Show when={isSearchable()}>
|
|
682
|
+
<div class="relative mb-3">
|
|
683
|
+
<span class="absolute left-3 top-1/2 -translate-y-1/2 text-gray-400 pointer-events-none text-sm">{'\uD83D\uDD0D'}</span>
|
|
684
|
+
<input
|
|
685
|
+
type="text"
|
|
686
|
+
value={searchQuery()}
|
|
687
|
+
onInput={(e) => handleSearch(e.currentTarget.value)}
|
|
688
|
+
placeholder={searchPlaceholder()}
|
|
689
|
+
class="w-full pl-8 pr-8 py-1.5 text-sm border border-gray-200 dark:border-gray-600 rounded-md bg-white dark:bg-gray-700 text-gray-900 dark:text-white placeholder-gray-400 focus:border-blue-400 focus:ring-1 focus:ring-blue-400 outline-none"
|
|
690
|
+
/>
|
|
691
|
+
<Show when={searchQuery()}>
|
|
692
|
+
<button
|
|
693
|
+
type="button"
|
|
694
|
+
onClick={() => { handleSearch(''); setSearchQuery(''); setDebouncedQuery('') }}
|
|
695
|
+
class="absolute right-2 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600 dark:hover:text-gray-300 text-sm"
|
|
696
|
+
aria-label="Clear search"
|
|
697
|
+
>×</button>
|
|
698
|
+
</Show>
|
|
699
|
+
</div>
|
|
700
|
+
<Show when={debouncedQuery() && filteredRows().length !== sortedRows().length}>
|
|
701
|
+
<p class="text-xs text-gray-500 dark:text-gray-400 mb-2">
|
|
702
|
+
{filteredRows().length} result{filteredRows().length !== 1 ? 's' : ''} on {sortedRows().length}
|
|
703
|
+
</p>
|
|
704
|
+
</Show>
|
|
705
|
+
</Show>
|
|
706
|
+
|
|
643
707
|
<div
|
|
644
708
|
ref={scrollContainerRef}
|
|
645
709
|
class="overflow-x-auto"
|
|
@@ -704,7 +768,7 @@ function TableRenderer(props: {
|
|
|
704
768
|
<Show when={needsClientPagination() && !isProgressiveMode()}>
|
|
705
769
|
<div class="mt-3 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400">
|
|
706
770
|
<span>
|
|
707
|
-
Showing {clientRangeStart()}–{clientRangeEnd()} of {
|
|
771
|
+
Showing {clientRangeStart()}–{clientRangeEnd()} of {filteredRows().length.toLocaleString('fr-FR')}
|
|
708
772
|
</span>
|
|
709
773
|
<div class="flex items-center gap-1">
|
|
710
774
|
<button
|
|
@@ -730,7 +794,7 @@ function TableRenderer(props: {
|
|
|
730
794
|
<Show when={needsClientPagination() && isProgressiveMode()}>
|
|
731
795
|
<div class="mt-3 flex flex-col items-center gap-2 text-xs text-gray-500 dark:text-gray-400">
|
|
732
796
|
<span>
|
|
733
|
-
{clientRangeStart()}–{clientRangeEnd()} of {
|
|
797
|
+
{clientRangeStart()}–{clientRangeEnd()} of {filteredRows().length.toLocaleString('fr-FR')}
|
|
734
798
|
</span>
|
|
735
799
|
<Show when={progressiveHasMore()}>
|
|
736
800
|
<button
|
package/src/index.ts
CHANGED
|
@@ -35,7 +35,7 @@ export { UIResourceRenderer, StreamingUIRenderer, GenerativeUIErrorBoundary } fr
|
|
|
35
35
|
export { DraggableGridItem } from './components/DraggableGridItem'
|
|
36
36
|
export { ResizeHandle } from './components/ResizeHandle'
|
|
37
37
|
export { EditableUIResourceRenderer } from './components/EditableUIResourceRenderer'
|
|
38
|
-
export { ExpandableWrapper } from './components/ExpandableWrapper'
|
|
38
|
+
export { ExpandableWrapper, useExpanded } from './components/ExpandableWrapper'
|
|
39
39
|
export { ComponentToolbar } from './components/ComponentToolbar'
|
|
40
40
|
|
|
41
41
|
// Chat Bus (v2.4.0 — @experimental)
|