@juspay/svelte-ui-components 2.125.0 → 2.127.0

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.
@@ -5,6 +5,7 @@
5
5
  import type { JSONValue } from 'type-decoder';
6
6
  import { SvelteSet } from 'svelte/reactivity';
7
7
  import Button from '../Button/Button.svelte';
8
+ import Input from '../Input/Input.svelte';
8
9
  import Menu from '../Menu/Menu.svelte';
9
10
  import Tooltip from '../Tooltip/Tooltip.svelte';
10
11
  import Pagination from '../Pagination/Pagination.svelte';
@@ -169,23 +170,39 @@
169
170
  let hasSearchConfig = $derived(!!searchConfig);
170
171
  let isServerSearch = $derived(typeof onSearchChange === 'function');
171
172
  let searchInputRef = $state<HTMLInputElement | null>(null);
173
+ let inlineSearchInputRef = $state<{ focus: () => void } | null>(null);
174
+ let isInlineSearch = $derived(searchConfig?.displayMode === 'inline');
175
+ let isInlineSearchExpanded = $state(false);
176
+
177
+ const updateSearch = (term: string): void => {
178
+ searchTerm = term;
179
+ pageOverride = 1;
180
+ pagination?.onPageChange?.(1);
181
+ if (isServerSearch) {
182
+ onSearchChange?.(term);
183
+ }
184
+ };
172
185
 
173
186
  const handleSearchInput = (): void => {
174
187
  if (!searchInputRef) {
175
188
  return;
176
189
  }
177
- searchTerm = searchInputRef.value;
178
- pageOverride = 1;
179
- if (isServerSearch) {
180
- onSearchChange?.(searchTerm);
181
- }
190
+ updateSearch(searchInputRef.value);
182
191
  };
183
192
 
184
193
  const clearSearch = (): void => {
185
- searchTerm = '';
186
- pageOverride = 1;
187
- if (isServerSearch) {
188
- onSearchChange?.('');
194
+ updateSearch('');
195
+ isInlineSearchExpanded = false;
196
+ };
197
+
198
+ const expandInlineSearch = (): void => {
199
+ isInlineSearchExpanded = true;
200
+ queueMicrotask(() => inlineSearchInputRef?.focus());
201
+ };
202
+
203
+ const collapseInlineSearchIfEmpty = (): void => {
204
+ if (searchTerm.trim() === '') {
205
+ clearSearch();
189
206
  }
190
207
  };
191
208
 
@@ -561,7 +578,7 @@
561
578
  </div>
562
579
  {/if}
563
580
 
564
- {#if hasSearchConfig}
581
+ {#if hasSearchConfig && !isInlineSearch}
565
582
  <div class="table-search">
566
583
  <span class="table-search-icon">
567
584
  <!-- eslint-disable svelte/no-at-html-tags -->
@@ -773,6 +790,51 @@
773
790
  </Button>
774
791
  </div>
775
792
  {/if}
793
+ {#if hasSearchConfig && isInlineSearch && colIndex === effectiveHeaders.length - 1}
794
+ <span class="table-header-inline-search">
795
+ {#if isInlineSearchExpanded}
796
+ <Input
797
+ bind:this={inlineSearchInputRef}
798
+ bind:value={searchTerm}
799
+ placeholder={searchConfig?.placeholder ?? 'Search…'}
800
+ testId={searchConfig?.testId ?? ''}
801
+ ariaLabel={searchConfig?.placeholder ?? 'Search'}
802
+ autoComplete="off"
803
+ onInput={(value: string) => updateSearch(value)}
804
+ onBlur={collapseInlineSearchIfEmpty}
805
+ classes="table-inline-search-input"
806
+ />
807
+ <span class="table-inline-search-clear">
808
+ <Button
809
+ variant="ghost"
810
+ iconOnly={true}
811
+ ariaLabel="Close search"
812
+ onclick={clearSearch}
813
+ >
814
+ {#snippet icon()}
815
+ <!-- eslint-disable svelte/no-at-html-tags -->
816
+ {@html closeSvg}
817
+ {/snippet}
818
+ </Button>
819
+ </span>
820
+ {:else}
821
+ <span class="table-inline-search-trigger">
822
+ <Button
823
+ variant="ghost"
824
+ iconOnly={true}
825
+ ariaLabel={searchConfig?.placeholder ?? 'Search'}
826
+ testId={searchConfig?.testId && `${searchConfig.testId}-trigger`}
827
+ onclick={expandInlineSearch}
828
+ >
829
+ {#snippet icon()}
830
+ <!-- eslint-disable svelte/no-at-html-tags -->
831
+ {@html searchSvg}
832
+ {/snippet}
833
+ </Button>
834
+ </span>
835
+ {/if}
836
+ </span>
837
+ {/if}
776
838
  </span>
777
839
  </th>
778
840
  {/each}
@@ -1052,6 +1114,43 @@
1052
1114
  height: var(--table-search-clear-icon-size, 14px);
1053
1115
  }
1054
1116
 
1117
+ .table-header-inline-search {
1118
+ display: inline-flex;
1119
+ align-items: center;
1120
+ gap: var(--table-inline-search-gap, 6px);
1121
+ margin-left: auto;
1122
+ }
1123
+
1124
+ .table-inline-search-trigger {
1125
+ --button-color: transparent;
1126
+ --button-border: none;
1127
+ --button-padding: var(--table-inline-search-trigger-padding, 4px);
1128
+ --button-text-color: var(--table-inline-search-icon-color, #9ca3af);
1129
+ }
1130
+
1131
+ .table-inline-search-trigger :global(svg) {
1132
+ width: var(--table-inline-search-icon-size, 16px);
1133
+ height: var(--table-inline-search-icon-size, 16px);
1134
+ display: block;
1135
+ }
1136
+
1137
+ .table-inline-search-input {
1138
+ --input-margin: 0;
1139
+ width: var(--table-inline-search-input-width, 160px);
1140
+ }
1141
+
1142
+ .table-inline-search-clear {
1143
+ --button-color: transparent;
1144
+ --button-border: none;
1145
+ --button-padding: var(--table-inline-search-clear-padding, 2px);
1146
+ --button-text-color: var(--table-inline-search-clear-color, #6b7280);
1147
+ }
1148
+
1149
+ .table-inline-search-clear :global(svg) {
1150
+ width: var(--table-inline-search-clear-icon-size, 14px);
1151
+ height: var(--table-inline-search-clear-icon-size, 14px);
1152
+ }
1153
+
1055
1154
  /* ── Container ──────────────────────────────────────────────────────────── */
1056
1155
  .table-container {
1057
1156
  border: var(--table-border, 1px solid #e5e7eb);
@@ -361,6 +361,7 @@ export type TableSearchConfig = {
361
361
  placeholder?: string;
362
362
  searchableColumnIndices?: number[];
363
363
  testId?: string;
364
+ displayMode?: 'toolbar' | 'inline';
364
365
  };
365
366
  export type TableProperties = OptionalTableProperties & TableEventProperties;
366
367
  export type OptionalTableProperties = {
@@ -0,0 +1,217 @@
1
+ <script lang="ts">
2
+ import Accordion from '../Accordion/Accordion.svelte';
3
+ import Button from '../Button/Button.svelte';
4
+ import Loader from '../Loader/Loader.svelte';
5
+ import type { ThinkingIndicatorProperties } from './properties';
6
+
7
+ let {
8
+ label,
9
+ detail,
10
+ expanded = $bindable(false),
11
+ variant = 'default',
12
+ onToggle,
13
+ avatar,
14
+ toggleIcon,
15
+ testId,
16
+ toggleTestId,
17
+ detailTestId,
18
+ labelTestId,
19
+ classes
20
+ }: ThinkingIndicatorProperties = $props();
21
+
22
+ // A detail string is what makes the indicator expandable. Without one there is
23
+ // nothing to reveal, so it renders as a plain live status line instead of a
24
+ // disclosure control. `bare` overrides that entirely.
25
+ const isExpandable = $derived(
26
+ variant !== 'bare' && typeof detail === 'string' && detail.length > 0
27
+ );
28
+
29
+ const handleToggle = (): void => {
30
+ expanded = !expanded;
31
+ onToggle?.();
32
+ };
33
+ </script>
34
+
35
+ {#if isExpandable}
36
+ <div
37
+ class="thinking-indicator expandable {classes ?? ''}"
38
+ data-pw={typeof testId === 'string' ? testId : null}
39
+ testID={typeof testId === 'string' ? testId : null}
40
+ >
41
+ <div class="toggle">
42
+ <Button
43
+ onclick={handleToggle}
44
+ ariaExpanded={expanded}
45
+ testId={toggleTestId ?? (testId && `${testId}-toggle`)}
46
+ >
47
+ <span class="status-row">
48
+ <span class="avatar">
49
+ {#if avatar}{@render avatar()}{:else}<Loader />{/if}
50
+ </span>
51
+ <span class="status-label static-label" data-pw={labelTestId ?? null}>{label}</span>
52
+ </span>
53
+ <span class="arrow" class:expanded aria-hidden="true">
54
+ {#if toggleIcon}
55
+ {@render toggleIcon()}
56
+ {:else}
57
+ <svg viewBox="0 0 16 16" fill="none">
58
+ <path
59
+ d="M4 6l4 4 4-4"
60
+ stroke="currentColor"
61
+ stroke-width="1.5"
62
+ stroke-linecap="round"
63
+ stroke-linejoin="round"
64
+ />
65
+ </svg>
66
+ {/if}
67
+ </span>
68
+ </Button>
69
+ </div>
70
+ <Accordion expand={expanded}>
71
+ <p class="detail" data-pw={detailTestId ?? (testId && `${testId}-detail`) ?? null}>
72
+ {detail}
73
+ </p>
74
+ </Accordion>
75
+ </div>
76
+ {:else if variant === 'bare'}
77
+ <span
78
+ class="status-label {classes ?? ''}"
79
+ data-pw={typeof testId === 'string' ? testId : null}
80
+ testID={typeof testId === 'string' ? testId : null}
81
+ >{#if typeof labelTestId === 'string'}<span data-pw={labelTestId} testID={labelTestId}
82
+ >{label}</span
83
+ >{:else}{label}{/if}</span
84
+ >
85
+ {:else}
86
+ <div
87
+ class="thinking-indicator status-host {classes ?? ''}"
88
+ data-pw={typeof testId === 'string' ? testId : null}
89
+ testID={typeof testId === 'string' ? testId : null}
90
+ >
91
+ <span class="status-row">
92
+ <span class="avatar">
93
+ {#if avatar}{@render avatar()}{:else}<Loader />{/if}
94
+ </span>
95
+ <span class="status-label" data-pw={labelTestId ?? null}>{label}</span>
96
+ </span>
97
+ </div>
98
+ {/if}
99
+
100
+ <style>
101
+ .thinking-indicator {
102
+ box-sizing: border-box;
103
+ width: 100%;
104
+ }
105
+
106
+ .expandable {
107
+ border-bottom: var(--thinking-indicator-border-bottom, 1px solid #e4e4e7);
108
+ padding-block: var(--thinking-indicator-padding-block, 0.5rem);
109
+ margin-bottom: var(--thinking-indicator-margin-bottom, 1rem);
110
+ }
111
+
112
+ .toggle {
113
+ width: 100%;
114
+ --button-color: transparent;
115
+ --button-border: none;
116
+ --button-box-shadow: none;
117
+ --button-hover-box-shadow: none;
118
+ --button-active-box-shadow: none;
119
+ --button-width: 100%;
120
+ --button-padding: 0;
121
+ --button-justify-content: flex-start;
122
+ --button-text-color: inherit;
123
+ }
124
+
125
+ /* A flex ROW host makes the inner status-row hug its content, so the shimmer
126
+ gradient maps to the text's own width rather than the full container. */
127
+ .status-host {
128
+ display: flex;
129
+ align-items: center;
130
+ }
131
+
132
+ .status-row {
133
+ display: flex;
134
+ align-items: center;
135
+ gap: var(--thinking-indicator-gap, 0.25rem);
136
+ min-width: 0;
137
+ }
138
+
139
+ .avatar {
140
+ display: inline-flex;
141
+ align-items: center;
142
+ justify-content: center;
143
+ flex-shrink: 0;
144
+ width: var(--thinking-indicator-avatar-size, 1.5rem);
145
+ height: var(--thinking-indicator-avatar-size, 1.5rem);
146
+ --loader-width: var(--thinking-indicator-avatar-loader-size, 1rem);
147
+ --loader-height: var(--thinking-indicator-avatar-loader-size, 1rem);
148
+ }
149
+
150
+ .status-label {
151
+ flex: 1;
152
+ min-width: 0;
153
+ overflow: hidden;
154
+ white-space: nowrap;
155
+ text-overflow: ellipsis;
156
+ text-align: left;
157
+ font-size: var(--thinking-indicator-font-size, 0.75rem);
158
+ line-height: var(--thinking-indicator-line-height, 1.25rem);
159
+ color: var(--thinking-indicator-label-color, #858585);
160
+ background: var(
161
+ --thinking-indicator-shimmer-gradient,
162
+ linear-gradient(90deg, #858585 0%, #bebebe 50%, #858585 100%)
163
+ );
164
+ background-size: 200% 100%;
165
+ background-clip: text;
166
+ -webkit-text-fill-color: transparent;
167
+ animation: thinking-indicator-shimmer var(--thinking-indicator-shimmer-duration, 2s) linear
168
+ infinite;
169
+ }
170
+
171
+ /* The expandable summary holds still; only live status lines shimmer. */
172
+ .static-label {
173
+ animation: none;
174
+ -webkit-text-fill-color: var(--thinking-indicator-label-color, #858585);
175
+ }
176
+
177
+ .arrow {
178
+ display: inline-flex;
179
+ align-items: center;
180
+ justify-content: center;
181
+ flex-shrink: 0;
182
+ width: var(--thinking-indicator-arrow-size, 1rem);
183
+ height: var(--thinking-indicator-arrow-size, 1rem);
184
+ margin-left: var(--thinking-indicator-arrow-margin-left, 0.25rem);
185
+ color: var(--thinking-indicator-arrow-color, #7a7a7a);
186
+ transform: rotate(-90deg);
187
+ transition: var(--thinking-indicator-arrow-transition, transform 0.2s ease-in-out);
188
+ }
189
+
190
+ .arrow svg {
191
+ width: 100%;
192
+ height: 100%;
193
+ }
194
+
195
+ .arrow.expanded {
196
+ transform: rotate(0deg);
197
+ }
198
+
199
+ .detail {
200
+ margin: 0;
201
+ padding-top: var(--thinking-indicator-detail-padding-top, 0.5rem);
202
+ font-size: var(--thinking-indicator-detail-font-size, 0.875rem);
203
+ line-height: var(--thinking-indicator-detail-line-height, 1.5);
204
+ color: var(--thinking-indicator-detail-color, #bebebe);
205
+ text-align: left;
206
+ }
207
+
208
+ @keyframes thinking-indicator-shimmer {
209
+ 0% {
210
+ background-position: 200% 0;
211
+ }
212
+
213
+ 100% {
214
+ background-position: -200% 0;
215
+ }
216
+ }
217
+ </style>
@@ -0,0 +1,4 @@
1
+ import type { ThinkingIndicatorProperties } from './properties';
2
+ declare const ThinkingIndicator: import("svelte").Component<ThinkingIndicatorProperties, {}, "expanded">;
3
+ type ThinkingIndicator = ReturnType<typeof ThinkingIndicator>;
4
+ export default ThinkingIndicator;
@@ -0,0 +1,30 @@
1
+ import type { Snippet } from 'svelte';
2
+ export type ThinkingIndicatorVariant = 'default' | 'bare';
3
+ export type ThinkingIndicatorProperties = OptionalThinkingIndicatorProperties & MandatoryThinkingIndicatorProperties;
4
+ export type MandatoryThinkingIndicatorProperties = {
5
+ label: string;
6
+ };
7
+ export type OptionalThinkingIndicatorProperties = {
8
+ /** Reasoning/steps text. Providing one makes the indicator an expandable disclosure. */
9
+ detail?: string;
10
+ /** Bindable disclosure state — meaningful only when `detail` is set. */
11
+ expanded?: boolean;
12
+ /**
13
+ * `bare` renders only the shimmering label — for chat bubbles where the surrounding
14
+ * UI already supplies the avatar and layout. It never becomes expandable.
15
+ */
16
+ variant?: ThinkingIndicatorVariant;
17
+ onToggle?: () => void;
18
+ /** Leading indicator. Falls back to the built-in spinner. */
19
+ avatar?: Snippet;
20
+ /** Disclosure chevron. Falls back to a built-in chevron that rotates on expand. */
21
+ toggleIcon?: Snippet;
22
+ testId?: string;
23
+ /** Override the toggle button's test id (default: `<testId>-toggle`). */
24
+ toggleTestId?: string;
25
+ /** Override the detail text's test id (default: `<testId>-detail`). */
26
+ detailTestId?: string;
27
+ /** Test id for the status label itself (none by default). */
28
+ labelTestId?: string;
29
+ classes?: string;
30
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -174,6 +174,11 @@ export const tooltip = (node, options) => {
174
174
  if (bubbleEl !== null || delayTimer !== null) {
175
175
  return;
176
176
  }
177
+ // An empty text renders a degenerate stub bubble (arrow + sliver) that reads as a
178
+ // clipped artifact — consumers legitimately pass '' to mean "no tooltip here".
179
+ if (currentOptions.text.trim().length === 0) {
180
+ return;
181
+ }
177
182
  const doShow = () => {
178
183
  // Re-check after the delay: hide() may have been called while the timer was pending.
179
184
  if (bubbleEl !== null) {
@@ -0,0 +1,110 @@
1
+ <script lang="ts">
2
+ import { onMount, onDestroy, untrack } from 'svelte';
3
+ import type { TypewriterTextProperties } from './properties';
4
+
5
+ let {
6
+ text,
7
+ speed = 15,
8
+ isStreaming = false,
9
+ renderText,
10
+ testId,
11
+ classes
12
+ }: TypewriterTextProperties = $props();
13
+
14
+ let displayedText = $state('');
15
+ let currentIndex = $state(0);
16
+ let timeoutId = $state<ReturnType<typeof setTimeout> | null>(null);
17
+
18
+ // Where typing left off, so newly streamed-in text continues rather than restarts.
19
+ let previousTextLength = $state(0);
20
+
21
+ const typeNextCharacter = (): void => {
22
+ if (currentIndex < text.length) {
23
+ displayedText = text.substring(0, currentIndex + 1);
24
+ currentIndex++;
25
+ timeoutId = setTimeout(typeNextCharacter, speed);
26
+ }
27
+ };
28
+
29
+ // A reactive timer cannot be a $derived — same escape the chart components use.
30
+ // Internal typing state is read untracked so the effect re-runs only when the
31
+ // `text` prop itself changes, never on our own per-character writes.
32
+ // eslint-disable-next-line no-restricted-syntax
33
+ $effect(() => {
34
+ const nextText = text;
35
+ untrack(() => {
36
+ // Streamed text CONTINUES what is already displayed. Anything else — a
37
+ // shorter string, or one that no longer starts with what was typed — is a
38
+ // replacement: stop the timer and retype from the start, instead of
39
+ // leaving stale characters on screen.
40
+ const isContinuation =
41
+ nextText.length >= previousTextLength && nextText.startsWith(displayedText);
42
+ if (!isContinuation) {
43
+ if (timeoutId !== null) {
44
+ clearTimeout(timeoutId);
45
+ timeoutId = null;
46
+ }
47
+ displayedText = '';
48
+ currentIndex = 0;
49
+ previousTextLength = 0;
50
+ }
51
+ if (nextText.length > 0 && nextText.length > previousTextLength) {
52
+ if (currentIndex >= previousTextLength) {
53
+ if (timeoutId !== null) {
54
+ clearTimeout(timeoutId);
55
+ }
56
+ typeNextCharacter();
57
+ }
58
+ previousTextLength = nextText.length;
59
+ }
60
+ });
61
+ });
62
+
63
+ // eslint-disable-next-line no-restricted-syntax
64
+ $effect(() => {
65
+ if (!isStreaming && text.length > 0) {
66
+ if (timeoutId !== null) {
67
+ clearTimeout(timeoutId);
68
+ }
69
+ displayedText = text;
70
+ currentIndex = text.length;
71
+ }
72
+ });
73
+
74
+ onMount(() => {
75
+ if (text.length > 0) {
76
+ previousTextLength = text.length;
77
+ typeNextCharacter();
78
+ }
79
+ });
80
+
81
+ onDestroy(() => {
82
+ if (timeoutId !== null) {
83
+ clearTimeout(timeoutId);
84
+ }
85
+ });
86
+ </script>
87
+
88
+ <div
89
+ class="typewriter-text {classes ?? ''}"
90
+ class:plain={typeof renderText !== 'function'}
91
+ data-pw={typeof testId === 'string' ? testId : null}
92
+ testID={typeof testId === 'string' ? testId : null}
93
+ >
94
+ {#if typeof renderText === 'function'}
95
+ <!-- eslint-disable-next-line svelte/no-at-html-tags -->
96
+ {@html renderText(displayedText)}
97
+ {:else}
98
+ {displayedText}
99
+ {/if}
100
+ </div>
101
+
102
+ <style>
103
+ .typewriter-text {
104
+ max-width: var(--typewriter-text-max-width, 100%);
105
+ }
106
+
107
+ .plain {
108
+ white-space: var(--typewriter-text-white-space, pre-wrap);
109
+ }
110
+ </style>
@@ -0,0 +1,4 @@
1
+ import type { TypewriterTextProperties } from './properties';
2
+ declare const TypewriterText: import("svelte").Component<TypewriterTextProperties, {}, "">;
3
+ type TypewriterText = ReturnType<typeof TypewriterText>;
4
+ export default TypewriterText;
@@ -0,0 +1,21 @@
1
+ export type TypewriterTextProperties = OptionalTypewriterTextProperties & MandatoryTypewriterTextProperties;
2
+ export type MandatoryTypewriterTextProperties = {
3
+ text: string;
4
+ };
5
+ export type OptionalTypewriterTextProperties = {
6
+ /** Milliseconds between characters. */
7
+ speed?: number;
8
+ /**
9
+ * While `true`, text revealed so far stays and new text keeps typing as `text` grows.
10
+ * The moment it turns `false`, all remaining text is shown at once.
11
+ */
12
+ isStreaming?: boolean;
13
+ /**
14
+ * Renders the revealed text as HTML — pass a markdown renderer to type rich text.
15
+ * The component trusts the returned string, so sanitise inside the renderer if the
16
+ * text can contain untrusted input. When omitted, the text renders as plain text.
17
+ */
18
+ renderText?: (text: string) => string;
19
+ testId?: string;
20
+ classes?: string;
21
+ };
@@ -0,0 +1 @@
1
+ export {};
package/dist/index.d.ts CHANGED
@@ -34,6 +34,7 @@ export { default as Tabs } from './Tabs/Tabs.svelte';
34
34
  export { default as Choicebox } from './Choicebox/Choicebox.svelte';
35
35
  export { default as Slider } from './Slider/Slider.svelte';
36
36
  export { default as Tooltip } from './Tooltip/Tooltip.svelte';
37
+ export { default as TypewriterText } from './TypewriterText/TypewriterText.svelte';
37
38
  export { tooltip } from './Tooltip/tooltip-action';
38
39
  export { default as Shimmer } from './Shimmer/Shimmer.svelte';
39
40
  export { default as Progress } from './Progress/Progress.svelte';
@@ -52,6 +53,7 @@ export { default as ContextMenu } from './ContextMenu/ContextMenu.svelte';
52
53
  export { default as Calendar } from './Calendar/Calendar.svelte';
53
54
  export { default as RelativeTime } from './RelativeTime/RelativeTime.svelte';
54
55
  export { default as ThemeSwitcher } from './ThemeSwitcher/ThemeSwitcher.svelte';
56
+ export { default as ThinkingIndicator } from './ThinkingIndicator/ThinkingIndicator.svelte';
55
57
  export { default as Book } from './Book/Book.svelte';
56
58
  export { default as Browser } from './Browser/Browser.svelte';
57
59
  export { default as Phone } from './Phone/Phone.svelte';
@@ -66,6 +68,7 @@ export { default as DateRangePicker } from './DateRangePicker/DateRangePicker.sv
66
68
  export { default as Breadcrumb } from './Breadcrumb/Breadcrumb.svelte';
67
69
  export { default as LineChart } from './LineChart/LineChart.svelte';
68
70
  export { default as AreaChart } from './AreaChart/AreaChart.svelte';
71
+ export { default as AttachmentChipRow } from './AttachmentChipRow/AttachmentChipRow.svelte';
69
72
  export { default as BarChart } from './BarChart/BarChart.svelte';
70
73
  export { default as PieChart } from './PieChart/PieChart.svelte';
71
74
  export { default as SankeyChart } from './SankeyChart/SankeyChart.svelte';
@@ -85,6 +88,8 @@ export { default as ChatComposer } from './ChatComposer/ChatComposer.svelte';
85
88
  export { default as ChatSuggestions } from './ChatSuggestions/ChatSuggestions.svelte';
86
89
  export { default as ChatToolStatus } from './ChatToolStatus/ChatToolStatus.svelte';
87
90
  export { default as ChatBubble } from './ChatBubble/ChatBubble.svelte';
91
+ export { default as HITL } from './HITL/HITL.svelte';
92
+ export { pauseAllConfirmationTimers } from './HITL/timers';
88
93
  export { default as Resizable } from './Resizable/Resizable.svelte';
89
94
  export { ChatController } from './Chat/controller.svelte';
90
95
  export { partyOf } from './Chat/roles';
@@ -118,6 +123,7 @@ export type * from './Tabs/properties';
118
123
  export type * from './Choicebox/properties';
119
124
  export type * from './Slider/properties';
120
125
  export type * from './Tooltip/properties';
126
+ export type * from './TypewriterText/properties';
121
127
  export type * from './Shimmer/properties';
122
128
  export type * from './Progress/properties';
123
129
  export type * from './Pill/properties';
@@ -135,6 +141,7 @@ export type * from './ContextMenu/properties';
135
141
  export type * from './Calendar/properties';
136
142
  export type * from './RelativeTime/properties';
137
143
  export type * from './ThemeSwitcher/properties';
144
+ export type * from './ThinkingIndicator/properties';
138
145
  export type * from './Book/properties';
139
146
  export type * from './Browser/properties';
140
147
  export type * from './Phone/properties';
@@ -150,6 +157,7 @@ export type * from './DateRangePicker/properties';
150
157
  export type * from './Breadcrumb/properties';
151
158
  export type * from './LineChart/properties';
152
159
  export type * from './AreaChart/properties';
160
+ export type * from './AttachmentChipRow/properties';
153
161
  export type * from './BarChart/properties';
154
162
  export type * from './PieChart/properties';
155
163
  export type * from './SankeyChart/properties';
@@ -171,6 +179,7 @@ export type * from './ChatComposer/properties';
171
179
  export type * from './ChatSuggestions/properties';
172
180
  export type * from './ChatToolStatus/properties';
173
181
  export type * from './ChatBubble/properties';
182
+ export type * from './HITL/properties';
174
183
  export type * from './Resizable/properties';
175
184
  export { validateInput } from './utils';
176
185
  export { formatNumberIndian } from './_chart/format';
package/dist/index.js CHANGED
@@ -34,6 +34,7 @@ export { default as Tabs } from './Tabs/Tabs.svelte';
34
34
  export { default as Choicebox } from './Choicebox/Choicebox.svelte';
35
35
  export { default as Slider } from './Slider/Slider.svelte';
36
36
  export { default as Tooltip } from './Tooltip/Tooltip.svelte';
37
+ export { default as TypewriterText } from './TypewriterText/TypewriterText.svelte';
37
38
  export { tooltip } from './Tooltip/tooltip-action';
38
39
  export { default as Shimmer } from './Shimmer/Shimmer.svelte';
39
40
  export { default as Progress } from './Progress/Progress.svelte';
@@ -52,6 +53,7 @@ export { default as ContextMenu } from './ContextMenu/ContextMenu.svelte';
52
53
  export { default as Calendar } from './Calendar/Calendar.svelte';
53
54
  export { default as RelativeTime } from './RelativeTime/RelativeTime.svelte';
54
55
  export { default as ThemeSwitcher } from './ThemeSwitcher/ThemeSwitcher.svelte';
56
+ export { default as ThinkingIndicator } from './ThinkingIndicator/ThinkingIndicator.svelte';
55
57
  export { default as Book } from './Book/Book.svelte';
56
58
  export { default as Browser } from './Browser/Browser.svelte';
57
59
  export { default as Phone } from './Phone/Phone.svelte';
@@ -66,6 +68,7 @@ export { default as DateRangePicker } from './DateRangePicker/DateRangePicker.sv
66
68
  export { default as Breadcrumb } from './Breadcrumb/Breadcrumb.svelte';
67
69
  export { default as LineChart } from './LineChart/LineChart.svelte';
68
70
  export { default as AreaChart } from './AreaChart/AreaChart.svelte';
71
+ export { default as AttachmentChipRow } from './AttachmentChipRow/AttachmentChipRow.svelte';
69
72
  export { default as BarChart } from './BarChart/BarChart.svelte';
70
73
  export { default as PieChart } from './PieChart/PieChart.svelte';
71
74
  export { default as SankeyChart } from './SankeyChart/SankeyChart.svelte';
@@ -85,6 +88,8 @@ export { default as ChatComposer } from './ChatComposer/ChatComposer.svelte';
85
88
  export { default as ChatSuggestions } from './ChatSuggestions/ChatSuggestions.svelte';
86
89
  export { default as ChatToolStatus } from './ChatToolStatus/ChatToolStatus.svelte';
87
90
  export { default as ChatBubble } from './ChatBubble/ChatBubble.svelte';
91
+ export { default as HITL } from './HITL/HITL.svelte';
92
+ export { pauseAllConfirmationTimers } from './HITL/timers';
88
93
  export { default as Resizable } from './Resizable/Resizable.svelte';
89
94
  export { ChatController } from './Chat/controller.svelte';
90
95
  export { partyOf } from './Chat/roles';